summaryrefslogtreecommitdiff
path: root/plugins/supplicant.c
diff options
context:
space:
mode:
authorMarcel Holtmann <marcel@holtmann.org>2008-03-28 22:55:09 +0100
committerMarcel Holtmann <marcel@holtmann.org>2008-03-28 22:55:09 +0100
commitd3b8d6bdccf7640a4bf2f4b958ac80577d5bb281 (patch)
tree156fc85722298c76c359099afc3b65f06fb31383 /plugins/supplicant.c
parentf84146ee1dcbf0942097937909c5875748d7108b (diff)
downloadconnman-d3b8d6bdccf7640a4bf2f4b958ac80577d5bb281.tar.gz
connman-d3b8d6bdccf7640a4bf2f4b958ac80577d5bb281.tar.bz2
connman-d3b8d6bdccf7640a4bf2f4b958ac80577d5bb281.zip
Remove filter on device removal
Diffstat (limited to 'plugins/supplicant.c')
-rw-r--r--plugins/supplicant.c28
1 files changed, 28 insertions, 0 deletions
diff --git a/plugins/supplicant.c b/plugins/supplicant.c
index 0ec9304d..ad97f001 100644
--- a/plugins/supplicant.c
+++ b/plugins/supplicant.c
@@ -803,6 +803,32 @@ static int add_filter(struct supplicant_task *task)
return 0;
}
+static int remove_filter(struct supplicant_task *task)
+{
+ DBusError error;
+ gchar *filter;
+
+ filter = g_strdup_printf("type=signal,interface=%s.Interface,path=%s",
+ SUPPLICANT_INTF, task->path);
+
+ DBG("filter %s", filter);
+
+ dbus_error_init(&error);
+
+ dbus_bus_add_match(task->conn, filter, &error);
+
+ g_free(filter);
+
+ if (dbus_error_is_set(&error) == TRUE) {
+ connman_error("Can't add match: %s", error.message);
+ dbus_error_free(&error);
+ }
+
+ dbus_connection_remove_filter(task->conn, supplicant_filter, task);
+
+ return 0;
+}
+
int __supplicant_start(struct connman_iface *iface)
{
struct ifreq ifr;
@@ -881,6 +907,8 @@ int __supplicant_stop(struct connman_iface *iface)
tasks = g_slist_remove(tasks, task);
+ remove_filter(task);
+
remove_network(task);
dbus_connection_unref(task->conn);