From 1c182788c3e895462fa6e58c85a3704c69fdc8d2 Mon Sep 17 00:00:00 2001 From: Samuel Ortiz Date: Tue, 8 Jun 2010 21:43:58 +0200 Subject: [PATCH] Set default gateway when route deletion fails When del_routes fails, no gateway deletion event is sent and thus the connection layer doesn't set a proper default gateway. --- src/connection.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/connection.c b/src/connection.c index 9320fbd..fd029c9 100644 --- a/src/connection.c +++ b/src/connection.c @@ -191,18 +191,22 @@ static struct gateway_data *find_default_gateway(void) return found; } -static void remove_gateway(struct gateway_data *data) +static int remove_gateway(struct gateway_data *data) { + int ret; + DBG("gateway %s", data->gateway); gateway_list = g_slist_remove(gateway_list, data); if (data->active == TRUE) - del_routes(data); + ret = del_routes(data); g_free(data->gateway); g_free(data->vpn_ip); g_free(data); + + return ret; } static void connection_delgateway(int index, const char *gateway) @@ -313,6 +317,7 @@ static void connection_remove(struct connman_element *element) const char *gateway = NULL; struct gateway_data *data = NULL; gboolean set_default = FALSE; + int ret; DBG("element %p name %s", element, element->name); @@ -339,13 +344,14 @@ static void connection_remove(struct connman_element *element) if (data->vpn == TRUE && data->vpn_phy_index >= 0) connman_inet_del_host_route(data->vpn_phy_index, data->gateway); - remove_gateway(data); + ret = remove_gateway(data); /* with vpn this will be called after the network was deleted, * we need to call set_default here because we will not recieve any * gateway delete notification. + * We hit the same issue if remove_gateway() fails. */ - if (set_default) { + if (set_default || ret) { data = find_default_gateway(); if (data != NULL) set_default_gateway(data); -- 2.7.4