Steven Dake wrote:
> On 05/28/2010 02:14 AM, Jan Friesse wrote:
>> Angus,
>> attached is fixed version of rb, which should do what you think current
>> implementation is doing. Please take a time to read comments beginning
>> with "^^^^^"
>>
>> But basically:
>> - Implementation didn't support storing of data with non multiply
>> word-size (ie. 32-bit) records (7 bytes, ...)
>> - MMaped circular buffer needs backend in file. Take a look to coroipcc
>> how to make it in shm, ...
>>
>> Regards,
>> Honza
>
>
> The current mmap in Angus's code is correct - it creates a private
> circular map that is replicated back to back to let the kernel memory
> manager deal with wrapping. (the log ring is never in shared memory).
Maybe I'm not understand what are you trying to do. But my idea of ring
is following:
/ Memory map \
| same as first \
| part \
-------------------------------
|1 |1 |
-------------------------------
/ |
/ |
| \
Start of buffer \
End of buffer
So if I understand it correctly, if I will:
- create new mapped region - circular_memory_map (&buf, 4096)
- buf[0] = 'A';
- buf[4096] = 'B';
- printf ("%c %c\n", buf[0], buf[4096]);
What should be result? If it is real circular buffer, it should be B B,
but with current implementation it will be A B. So it is not circular
buffer.
>
> It would be interesting to allow the ring buffer to be created with a
> backing store for the shared memory case.
>
> I'll have a look at the word size issue.
_______________________________________________
Openais mailing list
[email protected]
https://lists.linux-foundation.org/mailman/listinfo/openais