Hi,
On Thu, 2015-01-08 at 11:26 -0500, Hannu Mallat wrote:
> 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);
>
If the IOChannel variable is not strictly needed, one can always unref
it after adding the IO watcher and keep only the watch variable around;
the IO watch is the one keeping the only reference count on the
IOChannel. Less variables to look after.
Cheers,
Patrik
_______________________________________________
connman mailing list
[email protected]
https://lists.connman.net/mailman/listinfo/connman