sd-dhcp6-client: initialize IO event source in sd_dhcp6_client_start()

This commit is contained in:
Yu Watanabe
2022-02-14 14:45:14 +09:00
parent f814cd80de
commit 8ef959cd09
+24 -20
View File
@@ -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);