[pulseaudio-discuss] [PATCH v2 5/5] fix a call to pa_sink_suspend() from an incorrect thread

Georg Chini georg at chini.tk
Fri Mar 16 10:47:15 UTC 2018


On 13.03.2018 18:40, Tanu Kaskinen wrote:
> The alsa sink calls pa_sink_suspend() from the set_port() callback.
> pa_sink_suspend() can only be called from the main thread, but the
> set_port() callback was often called from the IO thread. That caused an
> assertion to be hit in pa_sink_suspend() when switching ports.
>
> Another issue was that pa_sink_suspend() called the set_port() callback,
> and if the callback calls pa_sink_suspend() again recursively, nothing
> good can be expected from that, so the thread mismatch was not the only
> problem.
>
> This patch moves the mixer syncing logic out of pa_sink/source_suspend()
> to be handled internally by the alsa sink/source. This removes the
> recursive pa_sink_suspend() call. This also removes the need to have the
> mixer_dirty flag in pa_sink/source, so the flag and the
> pa_sink/source_set_mixer_dirty() functions can be removed.
>
> This patch also changes the threading rules of set_port(). Previously it
> was called sometimes from the main thread and sometimes from the IO
> thread. Now it's always called from the main thread. When deferred
> volumes are used, the alsa sink and source still have to update the
> mixer from the IO thread when switching ports, but the thread
> synchronization is now handled internally by the alsa sink and source.
> The SET_PORT messages are not needed any more and can be removed.
>
> BugLink: https://bugs.freedesktop.org/show_bug.cgi?id=104761
> ---
>   src/modules/alsa/alsa-sink.c   | 94 +++++++++++++++++++++++++++++++++---------
>   src/modules/alsa/alsa-source.c | 94 +++++++++++++++++++++++++++++++++---------
>   src/pulsecore/sink.c           | 52 +----------------------
>   src/pulsecore/sink.h           |  7 +---
>   src/pulsecore/source.c         | 52 +----------------------
>   src/pulsecore/source.h         |  7 +---
>   6 files changed, 156 insertions(+), 150 deletions(-)
>
LGTM


More information about the pulseaudio-discuss mailing list