alsa-devel.alsa-project.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] Alsa-plugins: Pulse: Fix snd_pcm_avail returning 0 in some cases
@ 2011-04-21 13:22 David Henningsson
  2011-04-21 23:25 ` Raymond Yau
  0 siblings, 1 reply; 7+ messages in thread
From: David Henningsson @ 2011-04-21 13:22 UTC (permalink / raw)
  To: alsa-devel; +Cc: General PulseAudio Discussion, Maarten Lankhorst

[-- Attachment #1: Type: text/plain, Size: 500 bytes --]

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

[-- Attachment #2: 0001-Pulse-Fix-snd_pcm_avail-returning-0-in-some-cases.patch --]
[-- Type: text/x-patch, Size: 1119 bytes --]

>From 73ff6f83e1e4c53181e1794bf2cec3baee7c81b7 Mon Sep 17 00:00:00 2001
From: David Henningsson <david.henningsson@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.lankhorst@gmail.com>
Signed-off-by: David Henningsson <david.henningsson@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


[-- Attachment #3: Type: text/plain, Size: 0 bytes --]



^ permalink raw reply related	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2011-05-07  3:18 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-04-21 13:22 [PATCH] Alsa-plugins: Pulse: Fix snd_pcm_avail returning 0 in some cases David Henningsson
2011-04-21 23:25 ` Raymond Yau
2011-04-26  8:01   ` David Henningsson
2011-04-26 14:39     ` Takashi Iwai
2011-05-07  3:18       ` Raymond Yau
2011-04-27  1:00     ` Raymond Yau
2011-04-29  2:32     ` Raymond Yau

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).