Opened 10 years ago

#7927 new Bugs

boost::bimap not boost::interprocess compatible.

Reported by: jdy@… 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)

bimap.c++ (2.1 KB ) - added by jdy@… 10 years ago.
sample code showing bimap w/ interprocess failure
multiindex.c++ (2.7 KB ) - added by jdy@… 10 years ago.
sample code showing multi_index working with interprocess

Download all attachments as: .zip

Change History (2)

by jdy@…, 10 years ago

Attachment: bimap.c++ added

sample code showing bimap w/ interprocess failure

by jdy@…, 10 years ago

Attachment: multiindex.c++ added

sample code showing multi_index working with interprocess

Note: See TracTickets for help on using tickets.