diff options
author | Marcel Holtmann <marcel@holtmann.org> | 2008-12-27 07:00:31 +0100 |
---|---|---|
committer | Marcel Holtmann <marcel@holtmann.org> | 2008-12-27 07:00:31 +0100 |
commit | fd31f66180b7960edb1283bcbc80897eca134a03 (patch) | |
tree | 32d0f4f4a45240e79f96aa12ef02e9bba010b174 /src | |
parent | 4c1c88e40a46a41510faa3f1544bfc2aaf9d1063 (diff) | |
download | connman-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.c | 30 |
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 = { |