Also, move the check for changed leases to before the select(), so changes will occur immediately instead only after select() returns the next time.
Signed-off-by: Phil Sutter <[email protected]> Signed-off-by: Nico Erfurth <[email protected]> --- networking/udhcp/dhcpd.c | 10 +++++++++- 1 files changed, 9 insertions(+), 1 deletions(-) diff --git a/networking/udhcp/dhcpd.c b/networking/udhcp/dhcpd.c index dd55e70..356c81f 100644 --- a/networking/udhcp/dhcpd.c +++ b/networking/udhcp/dhcpd.c @@ -298,6 +298,7 @@ int udhcpd_main(int argc UNUSED_PARAM, char **argv) { int server_socket = -1, retval, max_sock; uint8_t *state; + uint8_t leases_changed = 0; unsigned timeout_end; unsigned num_ips; unsigned opt; @@ -389,6 +390,11 @@ int udhcpd_main(int argc UNUSED_PARAM, char **argv) uint32_t static_lease_nip; struct dyn_lease *lease, fake_lease; + if (leases_changed) { + write_leases(); + leases_changed = 0; + } + if (server_socket < 0) { server_socket = udhcp_listen_socket(/*INADDR_ANY,*/ SERVER_PORT, server_config.interface); @@ -405,7 +411,6 @@ int udhcpd_main(int argc UNUSED_PARAM, char **argv) server_config.auto_time ? &tv : NULL); } if (retval == 0) { - write_leases(); timeout_end = monotonic_sec() + server_config.auto_time; continue; } @@ -591,6 +596,7 @@ o DHCPREQUEST generated during REBINDING state: /* client requested or configured IP matches the lease. * ACK it, and bump lease expiration time. */ send_ACK(&packet, lease->lease_nip); + leases_changed = 1; break; } /* No lease for this MAC, or lease IP != requested IP */ @@ -626,6 +632,7 @@ o DHCPREQUEST generated during REBINDING state: ) { memset(lease->lease_mac, 0, sizeof(lease->lease_mac)); lease->expires = time(NULL) + server_config.decline_time; + leases_changed = 1; } break; @@ -644,6 +651,7 @@ o DHCPREQUEST generated during REBINDING state: && packet.ciaddr == lease->lease_nip ) { lease->expires = time(NULL); + leases_changed = 1; } break; -- 1.7.3.4 _______________________________________________ busybox mailing list [email protected] http://lists.busybox.net/mailman/listinfo/busybox
