Re: Simple, easy multithreaded circular buffer library for Linux?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, Oct 17, 2008 at 1:20 PM, Olivier Guilyardi <ml@xxxxxxxx> wrote:
> Paul Coccoli wrote:
>> On Fri, Oct 17, 2008 at 8:46 AM, Paul Davis <paul@xxxxxxxxxxxxxxxxxxxxx> wrote:
>>>
>>> I'd rather add the memory barriers to the JACK code, but this could be a
>>> race to see who does what first. A memory barrier is typically single
>>> instruction. The complication tends to be defining them in a
>>> sufficiently portable way.
>>
>> Why do you suspect you need memory barriers?  My concern with
>> ringbuffer.c is the non-atomic ops on the read and write pointers.
>> They're marked volatile, but what I think you really want is make all
>> ops on those fields atomic.  Stuff like this:
>>
>> rb->read_ptr += n1;
>> rb->read_ptr &= rb->size_mask;
>>
>> Looks like a problem to me.  What happens if there's a context switch
>> in between those 2 statements?
>>
>> NB: I only took a cursory glance at the code.
>
> Well, it looks like you had a fast but great insight here. I've turned all
> statements of this kind into one-liners, and the jack ringbuffer now
> (apparently) passes the test.
>

Looks like I don't have to "step back" or "read the whole thread for
links to relevant documents" then ;)

> Here's the patch against jack1 r3007:
> http://svn.samalyse.com/misc/rbtest/patches/jack-r3007-rb-fix.diff
>
> And thanks everyone for the tests ! I've updated the test suite, it now contains
> an additional test with this patch. Please continue testing :)
>

I didn't test your patch, but my own patch (which is the same thing)
works on dual Core2 duo system, whereas the original didn't.

No memory barriers needed *on x86* (volatile isn't needed anywhere).
Others system probably need memory barriers.
_______________________________________________
Linux-audio-user mailing list
Linux-audio-user@xxxxxxxxxxxxxxxxxxxx
http://lists.linuxaudio.org/mailman/listinfo/linux-audio-user

[Index of Archives]     [Linux Sound]     [ALSA Users]     [Pulse Audio]     [ALSA Devel]     [Sox Users]     [Linux Media]     [Kernel]     [Photo Sharing]     [Gimp]     [Yosemite News]     [Linux Media]

  Powered by Linux