diff options
author | Samuel Ortiz <sameo@linux.intel.com> | 2010-12-08 19:39:58 +0100 |
---|---|---|
committer | Samuel Ortiz <sameo@linux.intel.com> | 2010-12-08 19:41:28 +0100 |
commit | 377d8e81b904afc1a4378bb89f5932b64a432d6e (patch) | |
tree | 9fa0d0150fa33aea8a566a8244f7d1e6e3dc2ad6 | |
parent | de85b417473936092f2dc0d379971aa8ad5c9a85 (diff) | |
download | connman-377d8e81b904afc1a4378bb89f5932b64a432d6e.tar.gz connman-377d8e81b904afc1a4378bb89f5932b64a432d6e.tar.bz2 connman-377d8e81b904afc1a4378bb89f5932b64a432d6e.zip |
technology: Set technology driver to NULL when unregistering
-rw-r--r-- | src/technology.c | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/src/technology.c b/src/technology.c index 8a0ce522..c5600e21 100644 --- a/src/technology.c +++ b/src/technology.c @@ -83,11 +83,24 @@ static gint compare_priority(gconstpointer a, gconstpointer b) */ int connman_technology_driver_register(struct connman_technology_driver *driver) { + GSList *list; + struct connman_technology *technology; + DBG("driver %p name %s", driver, driver->name); driver_list = g_slist_insert_sorted(driver_list, driver, compare_priority); + for (list = technology_list; list; list = list->next) { + technology = list->data; + + if (technology->driver != NULL) + continue; + + if (technology->type == driver->type) + technology->driver = driver; + } + return 0; } @@ -99,8 +112,23 @@ int connman_technology_driver_register(struct connman_technology_driver *driver) */ void connman_technology_driver_unregister(struct connman_technology_driver *driver) { + GSList *list; + struct connman_technology *technology; + DBG("driver %p name %s", driver, driver->name); + for (list = technology_list; list; list = list->next) { + technology = list->data; + + if (technology->driver == NULL) + continue; + + if (technology->type == driver->type) { + technology->driver->remove(technology); + technology->driver = NULL; + } + } + driver_list = g_slist_remove(driver_list, driver); } |