Hi Tanu, On Tue, Feb 12, 2013 at 8:37 PM, Tanu Kaskinen <tanuk at iki.fi> wrote: > 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 f6f6da6..06fe0be 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; > -- > 1.7.10.4 This one looks good to me. Cheers, Mikel