From 77b3ba514cbb00adb89bafa7f48b4430d9764355 Mon Sep 17 00:00:00 2001 From: Tanu Kaskinen Date: Tue, 12 Feb 2013 21:37:02 +0200 Subject: [PATCH] bluetooth: Fix thread teardown code ordering thread_mq.outq may contain some unprocessed messages, which should be dispatched before unreffing the sink and source. If the sink and source are unreffed before all messages to them have been dispatched, the unreffing won't free the sink and source, and that in turn will likely cause problems with things getting freed in a wrong order. --- src/modules/bluetooth/module-bluetooth-device.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/modules/bluetooth/module-bluetooth-device.c b/src/modules/bluetooth/module-bluetooth-device.c index 25a21821..776bcbae 100644 --- a/src/modules/bluetooth/module-bluetooth-device.c +++ b/src/modules/bluetooth/module-bluetooth-device.c @@ -1954,6 +1954,13 @@ static void stop_thread(struct userdata *u) { u->rtpoll_item = NULL; } + if (u->rtpoll) { + pa_thread_mq_done(&u->thread_mq); + + pa_rtpoll_free(u->rtpoll); + u->rtpoll = NULL; + } + if (u->transport) { bt_transport_release(u); u->transport = NULL; @@ -1981,13 +1988,6 @@ static void stop_thread(struct userdata *u) { u->source = NULL; } - if (u->rtpoll) { - pa_thread_mq_done(&u->thread_mq); - - pa_rtpoll_free(u->rtpoll); - u->rtpoll = NULL; - } - if (u->read_smoother) { pa_smoother_free(u->read_smoother); u->read_smoother = NULL; -- 2.39.2