From: Lennart Poettering Date: Wed, 18 Jun 2014 16:54:52 +0000 (+0200) Subject: dhcp-server: simplify dhcp server unref call X-Git-Tag: v215~340 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=commitdiff_plain;h=3bdace9bf779ce051f00c14914b35c3a26164aa9 dhcp-server: simplify dhcp server unref call No need to use HASHMAP_ITERATE when we destruct all entries anyway. --- diff --git a/src/libsystemd-network/sd-dhcp-server.c b/src/libsystemd-network/sd-dhcp-server.c index d9495024a..5bdcf860b 100644 --- a/src/libsystemd-network/sd-dhcp-server.c +++ b/src/libsystemd-network/sd-dhcp-server.c @@ -109,25 +109,26 @@ DEFINE_TRIVIAL_CLEANUP_FUNC(DHCPLease*, dhcp_lease_free); #define _cleanup_dhcp_lease_free_ _cleanup_(dhcp_lease_freep) sd_dhcp_server *sd_dhcp_server_unref(sd_dhcp_server *server) { - if (server && REFCNT_DEC(server->n_ref) <= 0) { - DHCPLease *lease; - Iterator i; + DHCPLease *lease; - log_dhcp_server(server, "UNREF"); + if (!server) + return NULL; - sd_dhcp_server_stop(server); + if (REFCNT_DEC(server->n_ref) > 0) + return NULL; - sd_event_unref(server->event); + log_dhcp_server(server, "UNREF"); - HASHMAP_FOREACH(lease, server->leases_by_client_id, i) { - hashmap_remove(server->leases_by_client_id, lease); - dhcp_lease_free(lease); - } + sd_dhcp_server_stop(server); - hashmap_free(server->leases_by_client_id); - free(server->bound_leases); - free(server); - } + sd_event_unref(server->event); + + while ((lease = hashmap_steal_first(server->leases_by_client_id))) + dhcp_lease_free(lease); + hashmap_free(server->leases_by_client_id); + + free(server->bound_leases); + free(server); return NULL; }