From: Yu Watanabe Date: Sun, 6 Feb 2022 16:38:21 +0000 (+0900) Subject: sd-dhcp6-client: initialize IO event source in sd_dhcp6_client_start() X-Git-Tag: v251-rc1~291^2~34 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=8ef959cd090459bf45d2dfe37e4e9ed23b09ffc2;p=thirdparty%2Fsystemd.git sd-dhcp6-client: initialize IO event source in sd_dhcp6_client_start() --- diff --git a/src/libsystemd-network/sd-dhcp6-client.c b/src/libsystemd-network/sd-dhcp6-client.c index 25091e1b604..2c02c0d9511 100644 --- a/src/libsystemd-network/sd-dhcp6-client.c +++ b/src/libsystemd-network/sd-dhcp6-client.c @@ -589,14 +589,13 @@ static void client_reset(sd_dhcp6_client *client) { client->lease = sd_dhcp6_lease_unref(client->lease); - client->receive_message = sd_event_source_disable_unref(client->receive_message); - client->transaction_id = 0; client->transaction_start = 0; client->retransmit_time = 0; client->retransmit_count = 0; + (void) event_source_disable(client->receive_message); (void) event_source_disable(client->timeout_resend); (void) event_source_disable(client->timeout_resend_expire); (void) event_source_disable(client->timeout_t1); @@ -1358,24 +1357,6 @@ static int client_set_state(sd_dhcp6_client *client, DHCP6State state) { if (r < 0) goto error; - if (!client->receive_message) { - r = sd_event_add_io(client->event, &client->receive_message, - client->fd, EPOLLIN, client_receive_message, - client); - if (r < 0) - goto error; - - r = sd_event_source_set_priority(client->receive_message, - client->event_priority); - if (r < 0) - goto error; - - r = sd_event_source_set_description(client->receive_message, - "dhcp6-receive-message"); - if (r < 0) - goto error; - } - client->state = state; client->transaction_id = random_u32() & htobe32(0x00ffffff); client->transaction_start = time_now; @@ -1388,6 +1369,10 @@ static int client_set_state(sd_dhcp6_client *client, DHCP6State state) { if (r < 0) goto error; + r = sd_event_source_set_enabled(client->receive_message, SD_EVENT_ON); + if (r < 0) + goto error; + return 0; error: @@ -1401,6 +1386,7 @@ int sd_dhcp6_client_stop(sd_dhcp6_client *client) { client_stop(client, SD_DHCP6_CLIENT_EVENT_STOP); + client->receive_message = sd_event_source_unref(client->receive_message); client->fd = safe_close(client->fd); return 0; @@ -1450,6 +1436,24 @@ int sd_dhcp6_client_start(sd_dhcp6_client *client) { client->fd = r; } + if (!client->receive_message) { + _cleanup_(sd_event_source_disable_unrefp) sd_event_source *s = NULL; + + r = sd_event_add_io(client->event, &s, client->fd, EPOLLIN, client_receive_message, client); + if (r < 0) + return r; + + r = sd_event_source_set_priority(s, client->event_priority); + if (r < 0) + return r; + + r = sd_event_source_set_description(s, "dhcp6-receive-message"); + if (r < 0) + return r; + + client->receive_message = TAKE_PTR(s); + } + if (client->information_request) { usec_t t = now(CLOCK_MONOTONIC);