Hello Ion a others interprocess guru,
I'm currently using an interprocess::vector storing intreprocess::weak_ptr to data.
Sometimes after adding a shared_ptr to my vector with push_back, the weak_ptr stored at the end of the vector is not
the one I just inserted, but a copy of a previously inserted weak_ptr.
For examples the code below :
void addData (const SharableDataTypes<Data>::SharedPtrType & PData){
dataWPVector.push_back(PData);
if (dataWPVector.rbegin()->lock()->getObjectId() != PData->getObjectId()){
std::cerr << "After pushback in dataWPVector vector last elem Id=" << dataWPVector.rbegin()->lock()->getObjectId()
<< " added cable Id =" << PData->getObjectId() << std::endl;
}
}
spills the trace :
"After pushback in
dataWPVector vector last elem Id=50332165 added elem Id =352322053"
which should obviously not happen.
By adding some traces to the file : boost/interprocess/containers/container/vector.hpp
I found that this case only happens during a resizing step when the method priv_range_insert_expand_backwards is used
(Note : I used multiIndex to be the closest to our code).
I compiled it with gcc44 (GCC) 4.4.0 20090514 (Red Hat 4.4.0-6) on a 64b Red Hat Enterprise Linux Server release 5.4 server
using Boost V1.47 with the command :
gcc44 -std=c++0x -m64 -I/path_to_boot/boost_1_47_0/include/ -lrt -lstdc++ testPushBackVector.cc -o testPushBackVector
Note that this program does not reproduce the problem, as when it runs, only the priv_range_insert_new_allocation method is called.
I don't know how to force the program to use priv_range_insert_expand_backwards to reproduce the problem.
So now, the question : Am I doing something wrong or is this a bug ?
Thanks for your help,
Gaëtan