diff options
Diffstat (limited to 'sound/core/pcm_native.c')
| -rw-r--r-- | sound/core/pcm_native.c | 9 | 
1 files changed, 7 insertions, 2 deletions
diff --git a/sound/core/pcm_native.c b/sound/core/pcm_native.c index a4d92e46c459..f08772568c17 100644 --- a/sound/core/pcm_native.c +++ b/sound/core/pcm_native.c @@ -2580,7 +2580,7 @@ static snd_pcm_sframes_t forward_appl_ptr(struct snd_pcm_substream *substream,  	return ret < 0 ? ret : frames;  } -/* decrease the appl_ptr; returns the processed frames or a negative error */ +/* decrease the appl_ptr; returns the processed frames or zero for error */  static snd_pcm_sframes_t rewind_appl_ptr(struct snd_pcm_substream *substream,  					 snd_pcm_uframes_t frames,  					 snd_pcm_sframes_t avail) @@ -2597,7 +2597,12 @@ static snd_pcm_sframes_t rewind_appl_ptr(struct snd_pcm_substream *substream,  	if (appl_ptr < 0)  		appl_ptr += runtime->boundary;  	ret = pcm_lib_apply_appl_ptr(substream, appl_ptr); -	return ret < 0 ? ret : frames; +	/* NOTE: we return zero for errors because PulseAudio gets depressed +	 * upon receiving an error from rewind ioctl and stops processing +	 * any longer.  Returning zero means that no rewind is done, so +	 * it's not absolutely wrong to answer like that. +	 */ +	return ret < 0 ? 0 : frames;  }  static snd_pcm_sframes_t snd_pcm_playback_rewind(struct snd_pcm_substream *substream,  | 
