Set network->device as NULL when the device is removed
authorMartin Xu <martin.xu@intel.com>
Tue, 23 Mar 2010 03:43:50 +0000 (11:43 +0800)
committerSamuel Ortiz <sameo@linux.intel.com>
Tue, 23 Mar 2010 11:05:52 +0000 (12:05 +0100)
oFono plugin can use network->device to decide whether the modem is
removed during active PrimaryContext.
That fixes a segmentation fault when removing a 3G modem before getting
the set_network_active() D-Bus reply.

plugins/ofono.c
src/device.c
src/network.c

index c5521ef..2ad01f2 100644 (file)
@@ -398,8 +398,10 @@ static gboolean pending_network_is_available(
 
        /* Modem may be removed during waiting for active reply */
        device  = connman_network_get_device(pending_network);
-       if (device == NULL)
+       if (device == NULL) {
+               DBG("Modem is removed");
                return FALSE;
+       }
 
        identifier = connman_network_get_identifier(pending_network);
 
index f9dbe86..6aeed01 100644 (file)
@@ -656,6 +656,8 @@ static void unregister_network(gpointer data)
        connman_element_unregister((struct connman_element *) network);
 
        connman_network_unref(network);
+
+       __connman_network_set_device(network, NULL);
 }
 
 static void device_destruct(struct connman_element *element)
index 3fca7bb..8fb0ea0 100644 (file)
@@ -237,7 +237,8 @@ static void unregister_interface(struct connman_element *element)
 
        network->registered = FALSE;
 
-       emit_networks_signal(network->device);
+       if (network->device != NULL)
+               emit_networks_signal(network->device);
 
        g_dbus_unregister_interface(connection, element->path,
                                                CONNMAN_NETWORK_INTERFACE);