From: Marcel Holtmann Date: Wed, 17 Dec 2008 23:11:05 +0000 (+0100) Subject: Handle element registration failures X-Git-Tag: 0.5~4 X-Git-Url: https://vcs.maemo.org/git/?a=commitdiff_plain;h=0f461fae5f251b9598b4b470f52ca9af575c0cc2;p=connman Handle element registration failures --- diff --git a/plugins/dhclient.c b/plugins/dhclient.c index 3d6f189..06083b6 100644 --- a/plugins/dhclient.c +++ b/plugins/dhclient.c @@ -296,7 +296,8 @@ static DBusHandlerResult dhclient_filter(DBusConnection *conn, element->type = CONNMAN_ELEMENT_TYPE_IPV4; element->index = task->ifindex; connman_element_update(task->element); - connman_element_register(element, task->element); + if (connman_element_register(element, task->element) < 0) + connman_element_unref(element); } else if (g_ascii_strcasecmp(text, "RENEW") == 0 || g_ascii_strcasecmp(text, "REBIND") == 0) { connman_element_update(task->element); diff --git a/plugins/ethernet.c b/plugins/ethernet.c index 832d636..9cfa76b 100644 --- a/plugins/ethernet.c +++ b/plugins/ethernet.c @@ -76,7 +76,8 @@ static void ethernet_newlink(unsigned short type, int index, netdev->subtype = CONNMAN_ELEMENT_SUBTYPE_NETWORK; netdev->index = element->index; - connman_element_register(netdev, element); + if (connman_element_register(netdev, element) < 0) + connman_element_unref(netdev); } } else { DBG("carrier off"); diff --git a/plugins/ipv4.c b/plugins/ipv4.c index b1c26d4..b7d79be 100644 --- a/plugins/ipv4.c +++ b/plugins/ipv4.c @@ -399,7 +399,8 @@ static int ipv4_probe(struct connman_element *element) connection->type = CONNMAN_ELEMENT_TYPE_CONNECTION; connection->index = element->index; - connman_element_register(connection, element); + if (connman_element_register(connection, element) < 0) + connman_element_unref(connection); return 0; } diff --git a/plugins/netdev.c b/plugins/netdev.c index 3e08534..b32c12f 100644 --- a/plugins/netdev.c +++ b/plugins/netdev.c @@ -46,7 +46,8 @@ static void create_element(struct connman_element *parent, else element->subtype = CONNMAN_ELEMENT_SUBTYPE_UNKNOWN; - connman_element_register(element, parent); + if (connman_element_register(element, parent) < 0) + connman_element_unref(element); } static int netdev_probe(struct connman_element *element) diff --git a/plugins/rtnllink.c b/plugins/rtnllink.c index b0ed247..e7acc5f 100644 --- a/plugins/rtnllink.c +++ b/plugins/rtnllink.c @@ -110,7 +110,11 @@ static void rtnllink_newlink(unsigned short type, int index, device->name = name; device->devname = devname; - connman_element_register(device, NULL); + if (connman_element_register(device, NULL) < 0) { + connman_element_unref(device); + return; + } + device_list = g_slist_append(device_list, device); } diff --git a/plugins/wifi.c b/plugins/wifi.c index aa6021d..23fbb89 100644 --- a/plugins/wifi.c +++ b/plugins/wifi.c @@ -243,7 +243,8 @@ static void state_change(struct connman_element *device, dhcp->type = CONNMAN_ELEMENT_TYPE_DHCP; dhcp->index = element->index; - connman_element_register(dhcp, element); + if (connman_element_register(dhcp, element) < 0) + connman_element_unref(dhcp); } else if (state == STATE_INACTIVE || state == STATE_DISCONNECTED) { data->connected = FALSE; connman_element_set_enabled(element, FALSE); @@ -363,7 +364,10 @@ static void scan_result(struct connman_element *device, DBG("%s (%s) strength %d", network->identifier, element->wifi.security, element->strength); - connman_element_register(element, device); + if (connman_element_register(element, device) < 0) { + connman_element_unref(element); + goto done; + } } else { data->pending = g_slist_remove(data->pending, element); @@ -381,6 +385,7 @@ static void scan_result(struct connman_element *device, element->available = TRUE; +done: g_free(temp); } @@ -553,7 +558,11 @@ static void wifi_newlink(unsigned short type, int index, device->name = name; device->devname = devname; - connman_element_register(device, NULL); + if (connman_element_register(device, NULL) < 0) { + connman_element_unregister(device); + return; + } + device_list = g_slist_append(device_list, device); }