|
Boost Users : |
Subject: [Boost-users] boost::interprocess on FreeBSD 7
From: Andy Wiese (andyw_at_[hidden])
Date: 2008-12-17 09:57:06
My apologies if this is a resend. I think I might have sent the first
time before I was approved in the list.
Using boost::interprocess from boost_1_37_0 on FreeBSD 7.0,
specifically wishing to allocate boost::interprocess::map structures
in shared memory pools.
I get a segmentation fault in pthread_mutex_lock() from /lib/libthr.so.
3, in a variety of places including anything related to a
ShmemAllocator. For example, when I run the example from http://www.boost.org/doc/libs/1_37_0/doc/html/interprocess/allocators_containers.html#interprocess.allocators_containers.containers_explained
I get the segfault at this line:
//Initialize the STL-like allocator
const ShmemAllocator alloc_inst (segment.get_segment_manager());
I encountered this segfault (always in pthread_mutex_lock) when trying
to use mapped file boost::interprocess::map structure that works very
well on darwin.
Can anyone suggest what I might do to get this working on FreeBSD?
Is anyone familiar with FreeBSD 7.0 and the scary inner workings of
boost::interprocess interested in a small consulting project?
-----------------------------------------------------------------------------------------------
FWIW, here is the complete text of the example, taken verbatim from
the tutorial page:
void test_ipc2()
{
using namespace boost::interprocess;
shared_memory_object::remove("MySharedMemory");
try{
//A managed shared memory where we can construct objects
//associated with a c-string
managed_shared_memory segment(create_only,
"MySharedMemory", //segment name
65536);
//Alias an STL-like allocator of ints that allocates ints from the
segment
typedef allocator<int, managed_shared_memory::segment_manager>
ShmemAllocator;
//Alias a vector that uses the previous STL-like allocator
typedef vector<int, ShmemAllocator> MyVector;
int initVal[] = {0, 1, 2, 3, 4, 5, 6 };
const int *begVal = initVal;
const int *endVal = initVal + sizeof(initVal)/sizeof(initVal[0]);
//Initialize the STL-like allocator
const ShmemAllocator alloc_inst (segment.get_segment_manager());
//Construct the vector in the shared memory segment with the STL-
like allocator
//from a range of iterators
MyVector *myvector =
segment.construct<MyVector>
("MyVector")/*object name*/
(begVal /*first ctor parameter*/,
endVal /*second ctor parameter*/,
alloc_inst /*third ctor parameter*/);
BOOST_CHECK(myvector);
//Use vector as your want
std::sort(myvector->rbegin(), myvector->rend());
// . . .
//When done, destroy and delete vector from the segment
segment.destroy<MyVector>("MyVector");
}
catch(...){
shared_memory_object::remove("MySharedMemory");
throw;
}
shared_memory_object::remove("MySharedMemory");
}
Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net