Opened 10 years ago
#7927 new Bugs
boost::bimap not boost::interprocess compatible.
Reported by: | Owned by: | Matias Capeletto | |
---|---|---|---|
Milestone: | To Be Determined | Component: | bimap |
Version: | Boost 1.52.0 | Severity: | Problem |
Keywords: | bimap, multi_index, interprocess | Cc: |
Description
I've been trying to get boost::bimap to work in a boost::interprocess::managed_mapped_file.
According to Matias Capeletto in this thread on the boost devel mailing list: http://thread.gmane.org/gmane.comp.lib.boost.devel/238100/
Bimap is just given your allocator to MultiIndex. The issue is that the map views (left, right and relation set) are initialized with a reference to the multiindex core in construction time... when interprocess read it from memory the second time this references are garbage. A direct solution will be to use interprocess offset_ptr, but that will have a performance hit so I will have to rethink how the views are accessing the core, probably using CRTP.
I've attached two small programs. Both compile with g++ 4.7. One (multiindex.c++) puts a multi_index into the managed_mapped_file. On the first run, it creates the data structure puts some stuff in it, then reopens the data structure and outputs the stuff. On the second run, it does the same thing, but it uses the data stored in the mapped file.
The other program (bimap.c++) does exactly the same thing, but when run the second time it crashes. My guess is because bimap isn't quite interprocess compatible---that is, it isn't using the provided allocator for EVERYTHING.
Compiled with:
g++ -o multiindex multiindex.c++ -lpthread
and
g++ -g -o bimap bimap.c++ -lpthread
Joel
Attachments (2)
Change History (2)
by , 10 years ago
by , 10 years ago
Attachment: | multiindex.c++ added |
---|
sample code showing multi_index working with interprocess
sample code showing bimap w/ interprocess failure