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

Mikel Astiz mikel.astiz.oss at gmail.com
Tue Feb 12 23:40:56 PST 2013


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


More information about the pulseaudio-discuss mailing list