Interprocess: fixed_managed_shared_memory bug
Dear All, As suggested in an earlier post, for using the interprocess allocator with STL container, one has to use the fixed_managed_shared_memory. To be able to do so, we have to specify an address at which the shared memory region is mapped. This address is passed as the last argument to the fixed_managed_shared_memory constructor, and after this the following is the sequence of calls: 1) fixed_managed_shared_memory(,,,,addr) 2) basic_managed_shared_memory(,,,,addr) 3) managed_open_or_create_impl(,,,,addr,,) 4) priv_open_or_create(,,,,addr,) In priv_open_or_create() one creates the mapped_region which in turn calls mmap() to map the shared memory to the addr specified by us. However the mapped_region object that is created here is as follows: mapped_region region(dev, read_write); here the address is not passed to the to the mapped_region constructor, which has default arguments for addr which is '0'. Hence, the fixed_managed_shared_memory is never allocated at the addr specified. Can someone help with this? A work around that I have done is to create the mapped_region as follows: mapped_region region(dev, read_write, 0, 0, addr); Regards, Sunil Chomal
Sunil Chomal wrote: [snip]
In priv_open_or_create() one creates the mapped_region which in turn calls mmap() to map the shared memory to the addr specified by us. However the mapped_region object that is created here is as follows:
mapped_region region(dev, read_write);
here the address is not passed to the to the mapped_region constructor, which has default arguments for addr which is '0'. Hence, the fixed_managed_shared_memory is never allocated at the addr specified.
[snip]
A work around that I have done is to create the mapped_region as follows:
mapped_region region(dev, read_write, 0, 0, addr);
Yes, this is a bug. Thanks for pointing it. Your fix is correct. I will apply it to the CVS code. Thanks for the bug fix, Ion
participants (2)
-
Ion Gaztañaga
-
Sunil Chomal