[pulseaudio-discuss] [PATCH 6/8] pass pa_suspend_cause_t to SINK/SOURCE_SET_STATE handlers

Tanu Kaskinen tanuk at iki.fi
Thu Feb 22 07:47:45 UTC 2018


On Thu, 2018-02-22 at 08:25 +0100, Georg Chini wrote:
> On 19.02.2018 15:48, Tanu Kaskinen wrote:
> > The suspend cause isn't yet used by any of the handlers. The alsa sink
> > and source will use it to sync the mixer when the SESSION suspend cause
> > is removed. Currently the syncing is done in pa_sink/source_suspend(),
> > and I want to change that, because pa_sink/source_suspend() shouldn't
> > have any alsa specific code.
> > ---
> >   src/modules/alsa/alsa-sink.c                 | 11 +++++++++--
> >   src/modules/alsa/alsa-source.c               | 11 +++++++++--
> >   src/modules/bluetooth/module-bluez4-device.c | 22 ++++++++++++++++++----
> >   src/modules/bluetooth/module-bluez5-device.c | 22 ++++++++++++++++++----
> >   src/modules/echo-cancel/module-echo-cancel.c |  2 +-
> >   src/modules/module-combine-sink.c            | 10 +++++++++-
> >   src/modules/module-equalizer-sink.c          |  2 +-
> >   src/modules/module-esound-sink.c             | 11 +++++++++--
> >   src/modules/module-ladspa-sink.c             |  2 +-
> >   src/modules/module-null-sink.c               |  6 ++++--
> >   src/modules/module-null-source.c             |  2 +-
> >   src/modules/module-pipe-sink.c               |  9 ++++++---
> >   src/modules/module-remap-sink.c              |  2 +-
> >   src/modules/module-sine-source.c             |  2 +-
> >   src/modules/module-solaris.c                 | 23 ++++++++++++++++++-----
> >   src/modules/module-tunnel-sink-new.c         | 12 ++++++++++--
> >   src/modules/module-tunnel-source-new.c       | 12 ++++++++++--
> >   src/modules/module-virtual-sink.c            |  2 +-
> >   src/modules/module-virtual-surround-sink.c   |  2 +-
> >   src/modules/oss/module-oss.c                 | 24 ++++++++++++++++++------
> >   src/modules/raop/raop-sink.c                 |  9 ++++++++-
> >   src/pulsecore/sink.c                         | 15 +++++++++------
> >   src/pulsecore/sink.h                         | 23 +++++++++++++++++++++++
> >   src/pulsecore/source.c                       | 15 +++++++++------
> >   src/pulsecore/source.h                       | 23 +++++++++++++++++++++++
> >   25 files changed, 218 insertions(+), 56 deletions(-)
> > 
> 
> I would rename pa_sink_message_set_state to pa_sink_set_state_message
> because the first name sounds like a function name.

Ok, pa_sink_set_state_message sounds better to me too.

> Also there may be
> some changes required due to the new patch 2 of the series. Otherwise
> looks good.

Raman suggested adding suspend_cause to thread_info. That's not as
simple as it seems, because the suspend cause has to be updated also
when resuming fails, but pa_sink_process_msg() isn't called when
resuming fails, and thread_info.suspend_cause would be set in
pa_sink_process_msg().

The way I'd solve the suspend_cause updating problem is to add a new
callback set_state_in_io_thread() that is called from the core
SET_STATE handler, and all modules would use the callback instead of
handling the SET_STATE message. Having the callback allows the core
SET_STATE handler to manage the state updating so that
thread_info.suspend_cause is always updated no matter what happens in
the set_state_in_io_thread() callback.

This would also get rid of the awkward rule that the SET_STATE handlers
must call pa_sink_process_msg() on success but not on failure.

Adding suspend_cause to thread_info is not necessary, so one option is
to just do nothing, but the refactoring seems beneficial, so I'd prefer
to do that.

-- 
Tanu

https://liberapay.com/tanuk
https://www.patreon.com/tanuk


More information about the pulseaudio-discuss mailing list