Comment 9 for bug 1058200

Revision history for this message
David Henningsson (diwic) wrote : Re: [pulseaudio-discuss] [PATCH] stream: Return error in case a client peeks to early

On 10/02/2012 10:38 PM, Tanu Kaskinen wrote:
> On Mon, 2012-10-01 at 17:06 +0200, David Henningsson wrote:
>> If there is no silence memblock and no data, pa_memblockq_peek can
>> return NULL. In this case, do not crash on an assertion in
>> pa_memblock_acquire, but instead return a proper error to the client.
>
> If there is no data in the buffer, pa_stream_peek() is supposed to
> return NULL according to the documentation. And it does that: if there's
> no data, pa_memblock_peek() will return a negative value, causing
> pa_stream_peek() to return NULL.
>
> The problem is the case where the buffer does contain data, but not at
> the read index. That is, there is a hole in the buffer. The client
> documentation doesn't have any warnings about holes, so the only safe
> way to handle holes is to return silence. Fixing this should be a simple
> matter of giving a silence memchunk when creating record_memblockq.

I'm not so sure. Silence, as in all zeroes, might work for S16 audio
data, but what about other formats? Compressed audio? Peak audio (which
I think is the case here)? Etc.

Also maybe it could also be valuable for the client to distinguish
between no data available, and valid zero data.

How about returning NULL and adding to the documentation something like:

-If no data is available this will return a NULL pointer.
+If no data is available (at the current read position), this will
return a NULL pointer.

--
David Henningsson, Canonical Ltd.
https://launchpad.net/~diwic