diff options
author | Alexander E. Patrakov <patrakov@gmail.com> | 2014-09-14 00:30:15 +0600 |
---|---|---|
committer | Jaroslav Kysela <perex@perex.cz> | 2014-09-13 21:04:26 +0200 |
commit | 78c804fc9348e4c29f1c77dd4b6ad586393aa628 (patch) | |
tree | 855961f084ac555c7d25df88915001512daa65cc /src/pcm/pcm_dshare.c | |
parent | 9a43dc15b2979ed6d8850b033b594fbef829c991 (diff) | |
download | alsa-lib-78c804fc9348e4c29f1c77dd4b6ad586393aa628.tar.gz |
pcm: handle negative values from snd_pcm_mmap_hw_avail
Such negative values can happen when an underrun happens and xrun
detection is disabled. Another situation is if the device updated the
pointer before alsa-lib has a chance to detect the xrun.
The problem is that these negative values could propagate to the
snd_pcm_rewindable return value, where it is specified that negative
returns must be interpreted as error codes and not as negative amount of
samples.
Signed-off-by: Alexander E. Patrakov <patrakov@gmail.com>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
Diffstat (limited to 'src/pcm/pcm_dshare.c')
-rw-r--r-- | src/pcm/pcm_dshare.c | 4 |
1 files changed, 1 insertions, 3 deletions
diff --git a/src/pcm/pcm_dshare.c b/src/pcm/pcm_dshare.c index f1a1a1d7..020e6f7d 100644 --- a/src/pcm/pcm_dshare.c +++ b/src/pcm/pcm_dshare.c @@ -412,7 +412,7 @@ static int snd_pcm_dshare_pause(snd_pcm_t *pcm ATTRIBUTE_UNUSED, int enable ATTR static snd_pcm_sframes_t snd_pcm_dshare_rewindable(snd_pcm_t *pcm) { - return snd_pcm_mmap_playback_hw_avail(pcm); + return snd_pcm_mmap_playback_hw_rewindable(pcm); } static snd_pcm_sframes_t snd_pcm_dshare_rewind(snd_pcm_t *pcm, snd_pcm_uframes_t frames) @@ -420,8 +420,6 @@ static snd_pcm_sframes_t snd_pcm_dshare_rewind(snd_pcm_t *pcm, snd_pcm_uframes_t snd_pcm_sframes_t avail; avail = snd_pcm_dshare_rewindable(pcm); - if (avail < 0) - return 0; if (frames > (snd_pcm_uframes_t)avail) frames = avail; snd_pcm_mmap_appl_backward(pcm, frames); |