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.
This commit is contained in:
Tanu Kaskinen 2013-02-12 21:37:02 +02:00
parent 5d4b7c4a89
commit 77b3ba514c

View file

@ -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;