[pulseaudio-discuss] [PATCH 1/3] pstream: Don't split (non-SHM) memblocks

David Henningsson david.henningsson at canonical.com
Wed Mar 11 05:02:02 PDT 2015



On 2015-03-10 14:25, Tanu Kaskinen wrote:
> On Fri, 2015-03-06 at 21:20 +0100, Peter Meerwald wrote:
>> On Thu, 5 Mar 2015, David Henningsson wrote:
>>
>>> In case SHM is full or disabled, audio data is sent through the
>>> io/srbchannel. When this channel in turn gets full, memblocks
>>> could previously be split up. This could lead to crashes in case
>>> the split was on non-frame boundaries (in combination with full
>>> memblock queues).
>>>
>>> BugLink: https://bugs.freedesktop.org/show_bug.cgi?id=88452
>>> Signed-off-by: David Henningsson <david.henningsson at canonical.com>
>>> ---
>>>   src/pulsecore/pstream.c | 67 +++++++++++++++++++++++--------------------------
>>>   1 file changed, 31 insertions(+), 36 deletions(-)
>>>
>>> diff --git a/src/pulsecore/pstream.c b/src/pulsecore/pstream.c
>>> index b0ed5a7..8c05a87 100644
>>> --- a/src/pulsecore/pstream.c
>>> +++ b/src/pulsecore/pstream.c
>>> @@ -682,6 +682,36 @@ fail:
>>>       return -1;
>>>   }
>>>   
>>> +static void memblock_complete(pa_pstream *p, struct pstream_read *re) {
>>> +    size_t l;
>>> +    pa_memchunk chunk;
>>> +    int64_t offset;
>>> +
>>> +    if (!p->receive_memblock_callback)
>>> +        return;
>>> +
>>> +    /* Is this memblock data? Then pass it to the user */
>>> +    l = re->index - PA_PSTREAM_DESCRIPTOR_SIZE;
>>> +    if (l <= 0)
>> l is an unsigned data type; the difference should not become negative and
>> the check should just be for (l == 0)
> There are many places where this kind of redundant negativity checks are
> done (I suppose Lennart likes that style), so for consistency reasons, I
> wouldn't say that the check *should* be just for (l == 0). I certainly
> wouldn't be against using (l == 0) either, though (I don't personally
> like the style of using redundant negativity checks).
>
> But that's maybe irrelevant anyway, because I think the whole check is
> redundant. There is a check elsewhere that ensures that empty memblocks
> are rejected, so l can never be zero.
>
> Even if David prefers to keep the check "just in case", the comment
> certainly needs editing. "Is this memblock data?" is a nonsensical
> question here - of course it's memblock data, that should be obvious
> from the function name.
>
> Otherwise this patch looks good to me.
>

Thanks, pushed all three after removing the "if" and the comment. The 
third one's indentation was fixed up as well.

// David



More information about the pulseaudio-discuss mailing list