summaryrefslogtreecommitdiff
path: root/src/agent.c
diff options
context:
space:
mode:
authorJukka Rissanen <jukka.rissanen@linux.intel.com>2012-11-30 11:30:48 +0200
committerPatrik Flykt <patrik.flykt@linux.intel.com>2012-11-30 15:01:19 +0200
commit93ff3d8dbc99fd53b7a1265b1db8e64e261f672e (patch)
tree68c7b752cd6a4667aa37abea37e6febbcd52ec6d /src/agent.c
parentf0ef9b6dcda9918b21b2df269738dbb42d8f2dee (diff)
downloadconnman-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.c22
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;
}