[pulseaudio-discuss] [PATCH 12/13] bluetooth: Fix thread teardown code ordering

Tanu Kaskinen tanuk at iki.fi
Sat Feb 16 10:48:09 PST 2013


On Wed, 2013-02-13 at 08:40 +0100, Mikel Astiz wrote:
> 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.

Ok, I'll push this. Thanks for checking!

-- 
Tanu



More information about the pulseaudio-discuss mailing list