[pulseaudio-discuss] [PATCH v0 1/2] bluetooth: Do not setup stream before thread starts

Tanu Kaskinen tanuk at iki.fi
Sat Dec 1 15:45:35 PST 2012


On Thu, 2012-11-29 at 14:28 +0100, Mikel Astiz wrote:
> From: Mikel Astiz <mikel.astiz at bmw-carit.de>
> 
> bt_transport_acquire() might get called from the main thread, in case
> the IO thread hasn't been started yet. In this case, we should not call
> setup_stream() since this is going to be called in the beginning of
> thread_func().
> ---
>  src/modules/bluetooth/module-bluetooth-device.c | 4 ++++
>  1 file changed, 4 insertions(+)
> 
> diff --git a/src/modules/bluetooth/module-bluetooth-device.c b/src/modules/bluetooth/module-bluetooth-device.c
> index 136c7da..d1c386f 100644
> --- a/src/modules/bluetooth/module-bluetooth-device.c
> +++ b/src/modules/bluetooth/module-bluetooth-device.c
> @@ -424,6 +424,10 @@ static int bt_transport_acquire(struct userdata *u, pa_bool_t start) {
>          return 0;
>  
>  done:
> +    /* If thread is still about to start, the stream will be set up in the beginning of thread_func() */
> +    if (u->thread == NULL)
> +        return 0;

Otherwise fine, but isn't it random whether u->thread == NULL when
bt_transport_acquire() is called in the beginning of thread_func()? It
looks like a race to me. Would it be better to call setup_stream()
directly in thread_func() instead of calling bt_transport_acquire()?

-- 
Tanu



More information about the pulseaudio-discuss mailing list