From 3bdace9bf779ce051f00c14914b35c3a26164aa9 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Wed, 18 Jun 2014 18:54:52 +0200 Subject: [PATCH] dhcp-server: simplify dhcp server unref call No need to use HASHMAP_ITERATE when we destruct all entries anyway. --- src/libsystemd-network/sd-dhcp-server.c | 29 +++++++++++++------------ 1 file changed, 15 insertions(+), 14 deletions(-) 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; } -- 2.30.2