From fd31f66180b7960edb1283bcbc80897eca134a03 Mon Sep 17 00:00:00 2001 From: Marcel Holtmann Date: Sat, 27 Dec 2008 07:00:31 +0100 Subject: [PATCH] Register device interface only when driver is bound --- src/device.c | 30 +++++++++++++++++++----------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/src/device.c b/src/device.c index 86493a5..d884a3f 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 = { -- 2.7.4