[pulseaudio-discuss] [PATCH] thread-mq: make pa_thread_mq_done() safe for subsequent calls
David Henningsson
david.henningsson at canonical.com
Tue May 14 08:21:31 PDT 2013
On 05/14/2013 04:09 PM, Tanu Kaskinen wrote:
> From: Janos Kovacs <jankovac503 at gmail.com>
>
> ---
> src/pulsecore/thread-mq.c | 8 ++++++++
> 1 file changed, 8 insertions(+)
>
> diff --git a/src/pulsecore/thread-mq.c b/src/pulsecore/thread-mq.c
> index b492793..9efcd8a 100644
> --- a/src/pulsecore/thread-mq.c
> +++ b/src/pulsecore/thread-mq.c
> @@ -97,6 +97,14 @@ void pa_thread_mq_init(pa_thread_mq *q, pa_mainloop_api *mainloop, pa_rtpoll *rt
> void pa_thread_mq_done(pa_thread_mq *q) {
> pa_assert(q);
>
> + if (!q->mainloop && !q->inq && !q->outq &&
> + !q->read_event && !q->write_event)
> + return;
> +
> + pa_assert(q->mainloop);
> + pa_assert(q->inq && q->outq);
> + pa_assert(q->read_event && q->write_event);
> +
> /* Since we are called from main context we can be sure that the
> * inq is empty. However, the outq might still contain messages
> * for the main loop, which we need to dispatch (e.g. release
>
Looks a bit weird. There's no explanation if this fixes an existing bug
or just some attempt to be safer for the future.
Anyway, feels like it would have been better to put if's around every
call instead, because rest of PulseAudio is coded that way. E g:
if (q->mainloop && q->read_event) {
q->mainloop->io_free(q->read_event);
q->read_event = NULL;
}
--
David Henningsson, Canonical Ltd.
https://launchpad.net/~diwic
More information about the pulseaudio-discuss
mailing list