diff --git a/src/libsystemd-network/sd-dhcp6-client.c b/src/libsystemd-network/sd-dhcp6-client.c index f90e81f85a..e6eecbbe36 100644 --- a/src/libsystemd-network/sd-dhcp6-client.c +++ b/src/libsystemd-network/sd-dhcp6-client.c @@ -1051,6 +1051,7 @@ static int client_enter_bound_state(sd_dhcp6_client *client) { DHCP6_STATE_RENEW, DHCP6_STATE_REBIND)); + (void) event_source_disable(client->receive_message); (void) event_source_disable(client->timeout_resend); r = dhcp6_lease_get_lifetime(client->lease, &lifetime_t1, &lifetime_t2, &lifetime_valid); @@ -1152,6 +1153,8 @@ static int client_process_information( sd_dhcp6_lease_unref(client->lease); client->lease = TAKE_PTR(lease); + /* Do not call client_stop() here, as it frees the acquired lease. */ + (void) event_source_disable(client->receive_message); (void) event_source_disable(client->timeout_resend); client_set_state(client, DHCP6_STATE_STOPPED); @@ -1346,8 +1349,6 @@ static int client_receive_message( case DHCP6_STATE_BOUND: case DHCP6_STATE_STOPPED: - return 0; - default: assert_not_reached(); }