Due to a round-off error, snd_pcm_avail could in some cases
return 0 even though more data could be written to the stream.
This was discovered by Maarten Lankhorst [1], and there is also a test
program available that triggers this error [2].
[1]
https://tango.0pointer.de/pipermail/pulseaudio-discuss/2011-April/009935.html
[2]
https://tango.0pointer.de/pipermail/pulseaudio-discuss/attachments/20110420/3c852d6e/attachment.c
--
David Henningsson, Canonical Ltd.
http://launchpad.net/~diwic
From 73ff6f83e1e4c53181e1794bf2cec3baee7c81b7 Mon Sep 17 00:00:00 2001
From: David Henningsson david.hennings...@canonical.com
Date: Thu, 21 Apr 2011 15:10:19 +0200
Subject: [PATCH] Pulse: Fix snd_pcm_avail returning 0 in some cases
Due to a round-off error, snd_pcm_avail could in some cases
return 0 even though more data could be written to the stream.
Reported-by: Maarten Lankhorst m.b.lankho...@gmail.com
Signed-off-by: David Henningsson david.hennings...@canonical.com
---
pulse/pcm_pulse.c |4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/pulse/pcm_pulse.c b/pulse/pcm_pulse.c
index 2df0a80..9105d4d 100644
--- a/pulse/pcm_pulse.c
+++ b/pulse/pcm_pulse.c
@@ -92,8 +92,8 @@ static int update_ptr(snd_pcm_pulse_t *pcm)
size -= pcm-offset;
/* Prevent accidental overrun of the fake ringbuffer */
- if (size = pcm-buffer_attr.tlength)
- size = pcm-buffer_attr.tlength-1;
+ if (size pcm-buffer_attr.tlength - pcm-frame_size)
+ size = pcm-buffer_attr.tlength - pcm-frame_size;
if (size pcm-last_size) {
pcm-ptr += size - pcm-last_size;
--
1.7.4.1
___
pulseaudio-discuss mailing list
pulseaudio-discuss@mail.0pointer.de
https://tango.0pointer.de/mailman/listinfo/pulseaudio-discuss