[pulseaudio-discuss] Should corking be acknowledged by pa_sink_suspend()?

Ville Sundell ville.sundell at nomovok.com
Mon Nov 10 06:29:13 PST 2014


Hello again!
I've traced the invocation of pa_sink_suspend(), and the erroneous 
uncorking seems to lead to module-suspend-on-idle.so. Going to dig more 
into that.

However, it seems that PA_SINK_SUSPENDED and PA_SINK_INPUT_CORKED are 
accidentally sharing the same enum placement, could it be that situation 
where suspending cause (s->suspend_cause) is 0, and sink is already 
suspended, should be handled anyway? (just changing PA_SINK_INPUT_CORKED 
to PA_SINK_SUSPENDED?)

_Ville

On 07.11.2014 11:10, Ville Sundell wrote:
> Thank you for the pointers, I will check these points and let you guys 
> know :)
>
> _Ville
>
> On 07.11.2014 09:13, Arun Raghavan wrote:
>> On 5 November 2014 15:44, Ville Sundell <ville.sundell at nomovok.com> 
>> wrote:
>>> On 05.11.2014 11:57, Arun Raghavan wrote:
>>>> On 5 November 2014 15:04, Ville Sundell <ville.sundell at nomovok.com> 
>>>> wrote:
>>>>> Greetings everyone!
>>>>> I am having some problems with corking: pulseaudio policy enforcer 
>>>>> will
>>>>> cork
>>>>> all the streams which belongs to a corked group. However, despite the
>>>>> fact
>>>>> corking itself happens correctly (via pa_sink_input_cork() at
>>>>> pulseaudio-policy-enforcement:src/policy-group.c) the stream will 
>>>>> not end
>>>>> up
>>>>> being corked, instead it will be set to PA_SINK_RUNNING.
>>>> Not sure what code base this is, but this policy enforcement is not
>>>> part of PulseAudio upstream. I guess this comes from Nemo or Tizen?
>>> That is true, policy enforcer is implemented as a PulseAudio module, 
>>> and is
>>> used by Nemo and other similar systems.
>>>>
>>>> Either way, there seems to be some confusion between concepts here.
>>>> The idea of corking applies to sink inputs (pa_sink_input on the
>>>> server side, pa_stream on the client side). The idea of being
>>>> suspended applies to sinks (pa_sink). Could you explain your problem
>>>> again, and what the symptoms are, keeping this in mind?
>>> Thank you for clarifying this! The problem is as follows:
>>> 1) Program, which is part of a group which is already corked, opens 
>>> a stream
>>> 2) Policy enforcer notices this, and corks the stream right away, 
>>> like this:
>>>      pa_sink_input_cork(si, group->corked);
>>> 3) PulseAudio corks the stream correctly, up to this point 
>>> everything works
>>> as expected
>>> 4) However, pa_sink_suspend() gets called without a cause
>>> (s->suspend_cause), it tries to return it to a normal state 
>>> (PA_SINK_RUNNING
>>> or PA_SINK_IDLE), but here the state should be and stay as 
>>> SINK_INPUT_CORKED
>> It would be good to see what the call stack leading to
>> pa_sink_suspend() is. Please note again that PA_SINK_INPUT_CORKED is
>> not a state that applies to a sink. The sink would either be in
>> PA_SINK_SUSPENDED or _IDLE or _RUNNING.
>>
>>> 5) This will lead to uncorking of the stream which should be corked 
>>> (after
>>> applying the attached patch, this stream stays corked)
>> Changes in sink state should not cause sink inputs to uncork under the
>> normal course of events (I haven't looked at your policy enforcement
>> code, so don't know if that's triggering something).
>>
>> Regards,
>> Arun
>> _______________________________________________
>> pulseaudio-discuss mailing list
>> pulseaudio-discuss at lists.freedesktop.org
>> http://lists.freedesktop.org/mailman/listinfo/pulseaudio-discuss
>
> _______________________________________________
> pulseaudio-discuss mailing list
> pulseaudio-discuss at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/pulseaudio-discuss



More information about the pulseaudio-discuss mailing list