diff options
author | Marcel Holtmann <marcel@holtmann.org> | 2008-03-28 22:55:09 +0100 |
---|---|---|
committer | Marcel Holtmann <marcel@holtmann.org> | 2008-03-28 22:55:09 +0100 |
commit | d3b8d6bdccf7640a4bf2f4b958ac80577d5bb281 (patch) | |
tree | 156fc85722298c76c359099afc3b65f06fb31383 /plugins/supplicant.c | |
parent | f84146ee1dcbf0942097937909c5875748d7108b (diff) | |
download | connman-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.c | 28 |
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); |