Besides the IO channel for rfkill events, the associated watch also needs to be cleaned up on exit. --- src/rfkill.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-)
diff --git a/src/rfkill.c b/src/rfkill.c index 960cfea..b248c26 100644 --- a/src/rfkill.c +++ b/src/rfkill.c @@ -154,6 +154,7 @@ static gboolean rfkill_event(GIOChannel *chan, GIOCondition cond, gpointer data) } static GIOChannel *channel = NULL; +static guint watch = 0; int __connman_rfkill_block(enum connman_service_type type, bool block) { @@ -215,8 +216,9 @@ int __connman_rfkill_init(void) /* Process current RFKILL events sent on device open */ while (rfkill_process(channel) == G_IO_STATUS_NORMAL); - g_io_add_watch(channel, G_IO_IN | G_IO_NVAL | G_IO_HUP | G_IO_ERR, - rfkill_event, NULL); + watch = g_io_add_watch(channel, + G_IO_IN | G_IO_NVAL | G_IO_HUP | G_IO_ERR, + rfkill_event, NULL); return 0; } @@ -228,6 +230,11 @@ void __connman_rfkill_cleanup(void) if (!channel) return; + if (watch) { + g_source_remove(watch); + watch = 0; + } + g_io_channel_shutdown(channel, TRUE, NULL); g_io_channel_unref(channel); -- 1.9.1 _______________________________________________ connman mailing list connman@connman.net https://lists.connman.net/mailman/listinfo/connman