ALSA: pcm: Fix avail to return error if stream is suspended
authorJeeja KP <jeeja.kp@intel.com>
Fri, 2 Sep 2016 16:19:44 +0000 (21:49 +0530)
committerTakashi Iwai <tiwai@suse.de>
Tue, 6 Sep 2016 10:10:29 +0000 (12:10 +0200)
When the stream is in suspended state some applications wait
on "Stream Pipe Error" in response to snd_pcm_avail call to
resume the stream.

In the current implementation snd_pcm_avail() returns zero
when the stream is in suspended state. This causes application
to enter in infinite loop for frames to be available.

"Stream pipe Error" code is getting returned for read/write
call when the stream is in suspended state. Similarly update
snd_pcm_avail to return -ESTRPIPE.

Signed-off-by: Jeeja KP <jeeja.kp@intel.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/core/pcm_native.c

index c61fd50f771f9ecd55c8e472d152321b37255e71..9d33c1e85c79b1f6b66f74e6117a198e60244b28 100644 (file)
@@ -2637,9 +2637,11 @@ static int snd_pcm_hwsync(struct snd_pcm_substream *substream)
                        break;
                /* Fall through */
        case SNDRV_PCM_STATE_PREPARED:
-       case SNDRV_PCM_STATE_SUSPENDED:
                err = 0;
                break;
+       case SNDRV_PCM_STATE_SUSPENDED:
+               err = -ESTRPIPE;
+               break;
        case SNDRV_PCM_STATE_XRUN:
                err = -EPIPE;
                break;