From: Takashi Iwai Date: Thu, 27 Mar 2003 09:10:22 +0000 (+0000) Subject: check the current pcm status in snd_pcm_read/write_areas() if X-Git-Tag: v1.0.3~187 X-Git-Url: https://git.alsa-project.org/?a=commitdiff_plain;h=2978d1832335a8e42f6d3305eac111073d0dd00b;p=alsa-lib.git check the current pcm status in snd_pcm_read/write_areas() if snd_pcm_wait() returns an error. this will fix the bogus return code of snd_pcm_readi/writei(). --- diff --git a/src/pcm/pcm.c b/src/pcm/pcm.c index b133d78b..b7ec2670 100644 --- a/src/pcm/pcm.c +++ b/src/pcm/pcm.c @@ -6110,9 +6110,15 @@ snd_pcm_sframes_t snd_pcm_read_areas(snd_pcm_t *pcm, const snd_pcm_channel_area_ } err = snd_pcm_wait(pcm, -1); - if (err < 0) - break; state = snd_pcm_state(pcm); + if (err < 0) { + /* check more precisely */ + if (state == SND_PCM_STATE_XRUN) + err = -EPIPE; + else if (state == SND_PCM_STATE_SUSPENDED) + err = -ESTRPIPE; + break; + } goto _again; } @@ -6183,9 +6189,15 @@ snd_pcm_sframes_t snd_pcm_write_areas(snd_pcm_t *pcm, const snd_pcm_channel_area } err = snd_pcm_wait(pcm, -1); - if (err < 0) - break; state = snd_pcm_state(pcm); + if (err < 0) { + /* check more precisely */ + if (state == SND_PCM_STATE_XRUN) + err = -EPIPE; + else if (state == SND_PCM_STATE_SUSPENDED) + err = -ESTRPIPE; + break; + } goto _again; }