[PATCH] fix snd_pcm_drain() excluding SETUP state from valid states

Jaroslav Kysela perex at perex.cz
Wed Jun 3 18:50:20 CEST 2020


Dne 14. 05. 20 v 23:06 sylvain.bertrand at gmail.com napsal(a):
> On Thu, May 14, 2020 at 03:52:25PM +0200, Jaroslav Kysela wrote:
>> NAK: You should not call drain when the PCM handle is in the SETUP field.
>> It's an obvious caller problem. The streaming should be active somehow.
> 
> The pb here is the non-blocking calls of the drain function: in my test case,
> the first call to the drain function switches the pcm in draining state, but
> the pcm will be switched to the setup state somewhen in between 2 drain function
> calls! Naively, I was calling the drain function on a regular time basis to see
> if the draining was finished, namely expecting 0 to be returned.
> 
> Then if I understood you well, the right way(tm) to use the drain function in
> non-block mode, is to call only once the drain function, then inspect the state
> of the pcm till it not anymore in the draining state.
> 
> Am I right? Or did I miss something again?

I looked to this problem again and the original patch seems more appropriate. 
The snd_pcm_drain() should return zero, if the state is SETUP, because there 
is no further work.

I applied your patch:

https://github.com/alsa-project/alsa-lib/commit/1b9104b5ff10be7f60441f622436d4f14a2a97d1

with the (sanity) optimization in:

https://github.com/alsa-project/alsa-lib/commit/0b7f1441bb82903d45a29bf83c849ca94c5b7d7e

It basically doesn't allow to call the plugin callback (otherwise we need to 
review all plugin drain callbacks, if the SETUP state is handled properly).

			Thank you for your suggestion,
						Jaroslav

> 
> regards,
> 


-- 
Jaroslav Kysela <perex at perex.cz>
Linux Sound Maintainer; ALSA Project; Red Hat, Inc.


More information about the Alsa-devel mailing list