Remove sources while cleanup. It will avoid receiving events after cleanup. --- android/ipc.c | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/android/ipc.c b/android/ipc.c index ed3ef3c..4277bfe 100644 --- a/android/ipc.c +++ b/android/ipc.c @@ -45,6 +45,9 @@ static struct service_handler services[HAL_SERVICE_ID_MAX + 1]; static GIOChannel *cmd_io = NULL; static GIOChannel *notif_io = NULL; +static guint cmd_id; +static guint notif_id; + int ipc_handle_msg(struct service_handler *handlers, size_t max_index, const void *buf, ssize_t len) { @@ -192,11 +195,11 @@ static gboolean notif_connect_cb(GIOChannel *io, GIOCondition cond, cond = G_IO_ERR | G_IO_HUP | G_IO_NVAL; - g_io_add_watch(io, cond, notif_watch_cb, NULL); + notif_id = g_io_add_watch(io, cond, notif_watch_cb, NULL); cond = G_IO_IN | G_IO_ERR | G_IO_HUP | G_IO_NVAL; - g_io_add_watch(cmd_io, cond, cmd_watch_cb, NULL); + cmd_id = g_io_add_watch(cmd_io, cond, cmd_watch_cb, NULL); info("IPC: successfully connected"); @@ -232,12 +235,22 @@ void ipc_init(void) void ipc_cleanup(void) { + if (cmd_id) { + g_source_remove(cmd_id); + cmd_id = 0; + } + if (cmd_io) { g_io_channel_shutdown(cmd_io, TRUE, NULL); g_io_channel_unref(cmd_io); cmd_io = NULL; } + if (notif_id) { + g_source_remove(notif_id); + notif_id = 0; + } + if (notif_io) { g_io_channel_shutdown(notif_io, TRUE, NULL); g_io_channel_unref(notif_io); -- 1.8.3.1 -- To unsubscribe from this list: send the line "unsubscribe linux-bluetooth" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html