summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMarcel Holtmann <marcel@holtmann.org>2008-12-27 07:00:31 +0100
committerMarcel Holtmann <marcel@holtmann.org>2008-12-27 07:00:31 +0100
commitfd31f66180b7960edb1283bcbc80897eca134a03 (patch)
tree32d0f4f4a45240e79f96aa12ef02e9bba010b174 /src
parent4c1c88e40a46a41510faa3f1544bfc2aaf9d1063 (diff)
downloadconnman-fd31f66180b7960edb1283bcbc80897eca134a03.tar.gz
connman-fd31f66180b7960edb1283bcbc80897eca134a03.tar.bz2
connman-fd31f66180b7960edb1283bcbc80897eca134a03.zip
Register device interface only when driver is bound
Diffstat (limited to 'src')
-rw-r--r--src/device.c30
1 files changed, 19 insertions, 11 deletions
diff --git a/src/device.c b/src/device.c
index 86493a50..d884a3f9 100644
--- a/src/device.c
+++ b/src/device.c
@@ -859,10 +859,6 @@ static int device_probe(struct connman_element *element)
if (device == NULL)
return -ENODEV;
- err = register_interface(element);
- if (err < 0)
- return err;
-
for (list = driver_list; list; list = list->next) {
struct connman_device_driver *driver = list->data;
@@ -873,11 +869,22 @@ static int device_probe(struct connman_element *element)
if (driver->probe(device) == 0) {
device->driver = driver;
- device_enable(device);
break;
}
}
+ if (!device->driver)
+ return -ENODEV;
+
+ err = register_interface(element);
+ if (err < 0) {
+ if (device->driver->remove)
+ device->driver->remove(device);
+ return err;
+ }
+
+ device_enable(device);
+
return 0;
}
@@ -890,14 +897,15 @@ static void device_remove(struct connman_element *element)
if (device == NULL)
return;
- unregister_interface(element);
+ if (!device->driver)
+ return;
- if (device->driver) {
- device_disable(device);
+ device_disable(device);
- if (device->driver->remove)
- device->driver->remove(device);
- }
+ unregister_interface(element);
+
+ if (device->driver->remove)
+ device->driver->remove(device);
}
static struct connman_driver device_driver = {