ALSA: pcm - Fix hwptr buffer-size overlap bug
authorTakashi Iwai <tiwai@suse.de>
Thu, 23 Jul 2009 14:21:08 +0000 (16:21 +0200)
committerTakashi Iwai <tiwai@suse.de>
Thu, 23 Jul 2009 14:21:08 +0000 (16:21 +0200)
The fix 79452f0a28aa5a40522c487b42a5fc423647ad98 introduced another
bug due to the missing offset for the overlapped hwptr.
When the hwptr goes back to zero, the delta value has to be corrected
with the buffer size.  Otherwise this causes looping sounds.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/core/pcm_lib.c

index d315f72949f461479f97243842e98705fef35765..72cfd47af6b8b4196ba6a77d52002e3a52ab9e18 100644 (file)
@@ -256,7 +256,7 @@ static int snd_pcm_update_hw_ptr_interrupt(struct snd_pcm_substream *substream)
                        delta = new_hw_ptr - hw_ptr_interrupt;
        }
        if (delta < 0) {
-               if (runtime->periods == 1)
+               if (runtime->periods == 1 || new_hw_ptr < old_hw_ptr)
                        delta += runtime->buffer_size;
                if (delta < 0) {
                        hw_ptr_error(substream,