diff options
author | Yu Watanabe <watanabe.yu+github@gmail.com> | 2021-09-24 17:26:35 +0900 |
---|---|---|
committer | Yu Watanabe <watanabe.yu+github@gmail.com> | 2021-09-24 17:26:41 +0900 |
commit | eb2f750242d6c4c0963887dbd561d8bafa318685 (patch) | |
tree | d0ec4eb0b64403789e392725dbac007e772e6111 /src/libsystemd-network/sd-dhcp-client.c | |
parent | d105befc976ad704d3b17b3a5ee1b659a5f624d4 (diff) | |
download | systemd-eb2f750242d6c4c0963887dbd561d8bafa318685.tar.gz |
libsystemd-network: disable event sources before unref them
Fixes #20825.
Diffstat (limited to 'src/libsystemd-network/sd-dhcp-client.c')
-rw-r--r-- | src/libsystemd-network/sd-dhcp-client.c | 12 |
1 files changed, 5 insertions, 7 deletions
diff --git a/src/libsystemd-network/sd-dhcp-client.c b/src/libsystemd-network/sd-dhcp-client.c index 65314f424c..72dbd95145 100644 --- a/src/libsystemd-network/sd-dhcp-client.c +++ b/src/libsystemd-network/sd-dhcp-client.c @@ -726,7 +726,7 @@ static int client_notify(sd_dhcp_client *client, int event) { static int client_initialize(sd_dhcp_client *client) { assert_return(client, -EINVAL); - client->receive_message = sd_event_source_unref(client->receive_message); + client->receive_message = sd_event_source_disable_unref(client->receive_message); client->fd = safe_close(client->fd); @@ -1492,7 +1492,7 @@ static int client_timeout_t2(sd_event_source *s, uint64_t usec, void *userdata) assert(client); - client->receive_message = sd_event_source_unref(client->receive_message); + client->receive_message = sd_event_source_disable_unref(client->receive_message); client->fd = safe_close(client->fd); client->state = DHCP_STATE_REBINDING; @@ -1844,7 +1844,7 @@ static int client_handle_message(sd_dhcp_client *client, DHCPMessage *message, i client->start_delay = 0; (void) event_source_disable(client->timeout_resend); - client->receive_message = sd_event_source_unref(client->receive_message); + client->receive_message = sd_event_source_disable_unref(client->receive_message); client->fd = safe_close(client->fd); client->state = DHCP_STATE_BOUND; @@ -2226,17 +2226,15 @@ static sd_dhcp_client *dhcp_client_free(sd_dhcp_client *client) { log_dhcp_client(client, "FREE"); + client_initialize(client); + client->timeout_resend = sd_event_source_unref(client->timeout_resend); client->timeout_t1 = sd_event_source_unref(client->timeout_t1); client->timeout_t2 = sd_event_source_unref(client->timeout_t2); client->timeout_expire = sd_event_source_unref(client->timeout_expire); - client_initialize(client); - sd_dhcp_client_detach_event(client); - sd_dhcp_lease_unref(client->lease); - set_free(client->req_opts); free(client->hostname); free(client->vendor_class_identifier); |