diff options
author | Jukka Rissanen <jukka.rissanen@linux.intel.com> | 2012-11-30 11:30:48 +0200 |
---|---|---|
committer | Patrik Flykt <patrik.flykt@linux.intel.com> | 2012-11-30 15:01:19 +0200 |
commit | 93ff3d8dbc99fd53b7a1265b1db8e64e261f672e (patch) | |
tree | 68c7b752cd6a4667aa37abea37e6febbcd52ec6d /src/agent.c | |
parent | f0ef9b6dcda9918b21b2df269738dbb42d8f2dee (diff) | |
download | connman-93ff3d8dbc99fd53b7a1265b1db8e64e261f672e.tar.gz connman-93ff3d8dbc99fd53b7a1265b1db8e64e261f672e.tar.bz2 connman-93ff3d8dbc99fd53b7a1265b1db8e64e261f672e.zip |
agent: Release all agents when stopping
Diffstat (limited to 'src/agent.c')
-rw-r--r-- | src/agent.c | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/src/agent.c b/src/agent.c index a1eab1fe..c08dba8a 100644 --- a/src/agent.c +++ b/src/agent.c @@ -409,14 +409,20 @@ void connman_agent_driver_unregister(struct connman_agent_driver *driver) { GSList *list; + if (driver == NULL) + return; + DBG("Unregistering driver %p name %s", driver, driver->name); for (list = driver_list; list; list = list->next) { DBusMessage *message; - if (driver == list->data) + if (driver != list->data) continue; + DBG("Sending release to %s path %s iface %s", agent_sender, + agent_path, driver->interface); + message = dbus_message_new_method_call(agent_sender, agent_path, driver->interface, "Release"); if (message != NULL) { @@ -425,11 +431,23 @@ void connman_agent_driver_unregister(struct connman_agent_driver *driver) } agent_free(); + + /* + * ATM agent_free() unsets the agent_sender and agent_path + * variables so we can unregister only once. + * This needs proper fix later. + */ + break; } driver_list = g_slist_remove(driver_list, driver); } +static void release_all_agents(void) +{ + connman_agent_driver_unregister(get_driver()); +} + int __connman_agent_init(void) { DBG(""); @@ -451,6 +469,8 @@ void __connman_agent_cleanup(void) if (agent_watch > 0) g_dbus_remove_watch(connection, agent_watch); + release_all_agents(); + dbus_connection_unref(connection); connection = NULL; } |