From fd8bf31be4014a87855d006ec50b44d4c3cf40a4 Mon Sep 17 00:00:00 2001 From: Saurav Babu Date: Tue, 1 Mar 2016 17:18:00 +0530 Subject: [PATCH] gdhcp: Don't try to remove timer again GLib-CRITICAL warning message is obtained in below scenario: 1. service is connected and link local address is obtained. 2. Try to disconnect service. (connmand:8377): GLib-CRITICAL **: Source ID 289 was not found when attempting to remove it (connmand:8377): GLib-CRITICAL **: Source ID 303 was not found when attempting to remove it When Link Local IP address is obtained then both dhcp_client->timeout assigned for DISCOVER_TIMEOUT and ANNOUNCE_INTERVAL are already removed when discover_timeout() and ipv4ll_announce_timeout() function returns FALSE but the dhcp_client->timeout is not assigned to 0. Now when dhcp_release() calls remove_timeouts() function then dhcp_client->timeout is tried to remove again resulting in GLib-CRITICAL warning. This patch removes all possible remaing timeouts in g_dhcp_client_start() and explicitly sets dhcp_client->timeout to 0 in ipv4ll_announce_timeout() function. Change-Id: I12b072beef92818a2c1db253c85d1cfea540682b Signed-off-by: Saurav Babu --- gdhcp/client.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/gdhcp/client.c b/gdhcp/client.c index 8189613..106c777 100755 --- a/gdhcp/client.c +++ b/gdhcp/client.c @@ -2622,6 +2622,7 @@ static gboolean ipv4ll_announce_timeout(gpointer dhcp_data) dhcp_client->ipv4ll_available_cb(dhcp_client, dhcp_client->ipv4ll_available_data); dhcp_client->conflicts = 0; + dhcp_client->timeout = 0; return FALSE; } @@ -2654,6 +2655,8 @@ int g_dhcp_client_start(GDHCPClient *dhcp_client, const char *last_address) uint32_t addr; uint64_t rand; + remove_timeouts(dhcp_client); + if (dhcp_client->type == G_DHCP_IPV6) { if (dhcp_client->information_req_cb) { dhcp_client->state = INFORMATION_REQ; -- 2.7.4