From da47398525bd86a3b2928aa986be5bd4d624a8c6 Mon Sep 17 00:00:00 2001 From: Antoine Aubert Date: Wed, 5 Oct 2016 08:42:28 +0200 Subject: [PATCH] gatmux: fix read channel remove on error In case of invalid IO, read_watch is not reset. This fix crash on destroy gatmux. --- gatchat/gatmux.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/gatchat/gatmux.c b/gatchat/gatmux.c index 9beeece3..074e340a 100644 --- a/gatchat/gatmux.c +++ b/gatchat/gatmux.c @@ -598,6 +598,13 @@ void g_at_mux_unref(GAtMux *mux) } } +static void read_watcher_destroy_notify(gpointer user_data) +{ + GAtMux *mux = user_data; + + mux->read_watch = 0; +} + gboolean g_at_mux_start(GAtMux *mux) { if (mux->channel == NULL) @@ -611,7 +618,7 @@ gboolean g_at_mux_start(GAtMux *mux) mux->read_watch = g_io_add_watch_full(mux->channel, G_PRIORITY_DEFAULT, G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL, - received_data, mux, NULL); + received_data, mux, read_watcher_destroy_notify); mux->shutdown = FALSE;