summaryrefslogtreecommitdiff
path: root/src/libsystemd-network/sd-dhcp-client.c
diff options
context:
space:
mode:
authorYu Watanabe <watanabe.yu+github@gmail.com>2021-09-24 17:26:35 +0900
committerYu Watanabe <watanabe.yu+github@gmail.com>2021-09-24 17:26:41 +0900
commiteb2f750242d6c4c0963887dbd561d8bafa318685 (patch)
treed0ec4eb0b64403789e392725dbac007e772e6111 /src/libsystemd-network/sd-dhcp-client.c
parentd105befc976ad704d3b17b3a5ee1b659a5f624d4 (diff)
downloadsystemd-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.c12
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);