Handle element registration failures
authorMarcel Holtmann <marcel@holtmann.org>
Wed, 17 Dec 2008 23:11:05 +0000 (00:11 +0100)
committerMarcel Holtmann <marcel@holtmann.org>
Wed, 17 Dec 2008 23:11:05 +0000 (00:11 +0100)
plugins/dhclient.c
plugins/ethernet.c
plugins/ipv4.c
plugins/netdev.c
plugins/rtnllink.c
plugins/wifi.c

index 3d6f189..06083b6 100644 (file)
@@ -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);
index 832d636..9cfa76b 100644 (file)
@@ -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");
index b1c26d4..b7d79be 100644 (file)
@@ -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;
 }
index 3e08534..b32c12f 100644 (file)
@@ -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)
index b0ed247..e7acc5f 100644 (file)
@@ -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);
 }
 
index aa6021d..23fbb89 100644 (file)
@@ -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);
 }