summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSamuel Ortiz <sameo@linux.intel.com>2010-12-08 19:39:58 +0100
committerSamuel Ortiz <sameo@linux.intel.com>2010-12-08 19:41:28 +0100
commit377d8e81b904afc1a4378bb89f5932b64a432d6e (patch)
tree9fa0d0150fa33aea8a566a8244f7d1e6e3dc2ad6
parentde85b417473936092f2dc0d379971aa8ad5c9a85 (diff)
downloadconnman-377d8e81b904afc1a4378bb89f5932b64a432d6e.tar.gz
connman-377d8e81b904afc1a4378bb89f5932b64a432d6e.tar.bz2
connman-377d8e81b904afc1a4378bb89f5932b64a432d6e.zip
technology: Set technology driver to NULL when unregistering
-rw-r--r--src/technology.c28
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);
}