Subject: [Boost-bugs] [Boost C++ Libraries] #7923: Multiple consecutive named_mutex::remove
From: Boost C++ Libraries (noreply_at_[hidden])
Date: 2013-01-24 13:57:23
#7923: Multiple consecutive named_mutex::remove
-------------------------------------------+--------------------------------
Reporter: cbarrioy <cbarrioy@â¦> | Type: Bugs
Status: new | Milestone: To Be Determined
Component: None | Version: Boost 1.52.0
Severity: Problem | Keywords: named_mutex remove
-------------------------------------------+--------------------------------
I have three named_mutex that need to be removed from system in the same
inizialization function to ensure the unique existence of the named
resources.
The problem appear with multiple consecutive calls to named_mutex::remove
with the three named_mutex, obtaining "false" return value randomly.
I can see that named_mutex::remove use a temporal file and rename it with
a name generated randomly, using process/system info data, however I
obtain the same generated name in two consecutive calls and consequently
remove method fails
Maybe a precision issue with time used to construct the randomly generated
name.
I make a simple program to reproduce the problem. With this example you
can obtain "false" sometimes in the first iteration, sometimes at
iteration 11000, 23000, 90000...
{{{
#include <boost/interprocess/sync/named_mutex.hpp>
#include <boost/interprocess/exceptions.hpp>
#include <boost/scoped_ptr.hpp>
#include <boost/lexical_cast.hpp>
#include <boost/thread.hpp>
using namespace std;
void sharedMemoryTest()
{
boost::scoped_ptr<boost::interprocess::named_mutex> mutex;
boost::scoped_ptr<boost::interprocess::named_mutex> mutex2;
std::string mutexName = "ASYSTEM_00000_mutex";
std::string mutexName2 = "ASYSTEM_00001_mutex";
bool error = false;
int count = 0;
while(!error)
{
try
{
mutex.reset(new
boost::interprocess::named_mutex(boost::interprocess::create_only,
mutexName.c_str()));
error = error ||
!boost::interprocess::named_mutex::remove(mutexName.c_str());
mutex2.reset(new
boost::interprocess::named_mutex(boost::interprocess::create_only,
mutexName2.c_str()));
error = error ||
!boost::interprocess::named_mutex::remove(mutexName2.c_str());
++count;
}
catch(boost::interprocess::interprocess_exception& ie)
{
cout<<"Error "<<ie.what() <<" on iteration:
"<<count<<std::endl;
error = true;
}
}
cout<<"Error on iteration: "<<count<<std::endl;
}
int _tmain(int argc, _TCHAR* argv[])
{
sharedMemoryTest();
return 0;
}
}}}
-- Ticket URL: <https://svn.boost.org/trac/boost/ticket/7923> Boost C++ Libraries <http://www.boost.org/> Boost provides free peer-reviewed portable C++ source libraries.
This archive was generated by hypermail 2.1.7 : 2017-02-16 18:50:11 UTC