Fix availability listing for devices without attached drivers
authorMarcel Holtmann <marcel@holtmann.org>
Thu, 23 Jul 2009 20:00:12 +0000 (22:00 +0200)
committerMarcel Holtmann <marcel@holtmann.org>
Thu, 23 Jul 2009 20:00:12 +0000 (22:00 +0200)
src/device.c

index 13105a1d620ac374e97f736a0a12a07f6d306152..01141cfa6345511fa055808bd6111f0fe4123060 100644 (file)
@@ -671,6 +671,7 @@ static void unregister_interface(struct connman_element *element)
 
 static int setup_device(struct connman_device *device)
 {
+       enum connman_service_type type;
        int err;
 
        DBG("device %p", device);
@@ -683,6 +684,9 @@ static int setup_device(struct connman_device *device)
                return err;
        }
 
+       type = __connman_device_get_service_type(device);
+       __connman_notifier_register(type);
+
        switch (device->mode) {
        case CONNMAN_DEVICE_MODE_UNKNOWN:
        case CONNMAN_DEVICE_MODE_NETWORK_SINGLE:
@@ -726,6 +730,8 @@ static void probe_driver(struct connman_element *element, gpointer user_data)
 
 static void remove_device(struct connman_device *device)
 {
+       enum connman_service_type type;
+
        DBG("device %p", device);
 
        __connman_device_disable(device);
@@ -741,6 +747,9 @@ static void remove_device(struct connman_device *device)
                break;
        }
 
+       type = __connman_device_get_service_type(device);
+       __connman_notifier_unregister(type);
+
        unregister_interface(&device->element);
 
        if (device->driver->remove)
@@ -1737,15 +1746,10 @@ void __connman_device_set_network(struct connman_device *device,
  */
 int connman_device_register(struct connman_device *device)
 {
-       enum connman_service_type type;
-
        __connman_storage_load_device(device);
 
        device->offlinemode = __connman_manager_get_offlinemode();
 
-       type = __connman_device_get_service_type(device);
-       __connman_notifier_register(type);
-
        return connman_element_register(&device->element, NULL);
 }
 
@@ -1757,13 +1761,8 @@ int connman_device_register(struct connman_device *device)
  */
 void connman_device_unregister(struct connman_device *device)
 {
-       enum connman_service_type type;
-
        __connman_storage_save_device(device);
 
-       type = __connman_device_get_service_type(device);
-       __connman_notifier_unregister(type);
-
        connman_element_unregister(&device->element);
 }