pcm: improve handling for snd_pcm_wait()

The snd_pcm_wait() function is called also internally from
the various plugins to wait for the drain with -1 and from i/o
routines in pcm.c.

Define two special negative timeout values to distinguish the
drain and i/o wait and calculate the maximal timeout according
the wait place.

Fixes: https://github.com/alsa-project/alsa-lib/issues/228
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
This commit is contained in:
Jaroslav Kysela 2023-05-02 16:56:49 +02:00
parent 1de6f99c7d
commit e2d9e41174
9 changed files with 55 additions and 10 deletions

View file

@ -301,7 +301,7 @@ static int __snd_pcm_dsnoop_drain(snd_pcm_t *pcm)
break;
if (pcm->mode & SND_PCM_NONBLOCK)
return -EAGAIN;
__snd_pcm_wait_in_lock(pcm, -1);
__snd_pcm_wait_in_lock(pcm, SND_PCM_WAIT_DRAIN);
}
pcm->stop_threshold = stop_threshold;
return snd_pcm_dsnoop_drop(pcm);