Commit 21a7c4cc authored by Benjamin Berg's avatar Benjamin Berg Committed by Thomas Haller

systemd: fix crash by unrefing event sources before re-adding them

In certain cases the timeouts may not have been unref'ed before they
need to be re-added. Add the appropriate unref calls to ensure we don't
register the timeout multiple times.

This fixes possible cases where timeouts are triggered multiple times
and even on destroyed DHCPv6 clients.

#73

(cherry picked from commit e179202e)
(cherry picked from commit bbef6cf4)
(cherry picked from commit d535f95b)
(cherry picked from commit fe5949dc)
parent ef315222
......@@ -1100,6 +1100,7 @@ static int client_start(sd_dhcp6_client *client, enum DHCP6State state) {
log_dhcp6_client(client, "T1 expires in %s",
format_timespan(time_string, FORMAT_TIMESPAN_MAX, timeout, USEC_PER_SEC));
client->lease->ia.timeout_t1 = sd_event_source_unref(client->lease->ia.timeout_t1);
r = sd_event_add_time(client->event,
&client->lease->ia.timeout_t1,
clock_boottime_or_monotonic(), time_now + timeout,
......@@ -1122,6 +1123,7 @@ static int client_start(sd_dhcp6_client *client, enum DHCP6State state) {
log_dhcp6_client(client, "T2 expires in %s",
format_timespan(time_string, FORMAT_TIMESPAN_MAX, timeout, USEC_PER_SEC));
client->lease->ia.timeout_t2 = sd_event_source_unref(client->lease->ia.timeout_t2);
r = sd_event_add_time(client->event,
&client->lease->ia.timeout_t2,
clock_boottime_or_monotonic(), time_now + timeout,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment