IO watch for rfkill events needs to be cleaned up on exit. --- src/rfkill.c | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-)
diff --git a/src/rfkill.c b/src/rfkill.c index 960cfea..c6f9674 100644 --- a/src/rfkill.c +++ b/src/rfkill.c @@ -153,7 +153,7 @@ static gboolean rfkill_event(GIOChannel *chan, GIOCondition cond, gpointer data) return TRUE; } -static GIOChannel *channel = NULL; +static guint watch = 0; int __connman_rfkill_block(enum connman_service_type type, bool block) { @@ -191,6 +191,7 @@ int __connman_rfkill_block(enum connman_service_type type, bool block) int __connman_rfkill_init(void) { + GIOChannel *channel; GIOFlags flags; int fd; @@ -215,21 +216,21 @@ 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; + g_io_channel_unref(channel); + + return watch ? 0 : -EIO; } void __connman_rfkill_cleanup(void) { DBG(""); - if (!channel) - return; - - g_io_channel_shutdown(channel, TRUE, NULL); - g_io_channel_unref(channel); - - channel = NULL; + if (watch) { + g_source_remove(watch); + watch = 0; + } } -- 1.9.1 _______________________________________________ connman mailing list connman@connman.net https://lists.connman.net/mailman/listinfo/connman