Subject: Re: [Boost-bugs] [Boost C++ Libraries] #9284: WaitForSingleObject(mutex) must handle WAIT_ABANDONED
From: Boost C++ Libraries (noreply_at_[hidden])
Date: 2013-10-29 02:26:29
#9284: WaitForSingleObject(mutex) must handle WAIT_ABANDONED
-------------------------------+--------------------------
Reporter: huyuguang@⦠| Owner: igaztanaga
Type: Bugs | Status: new
Milestone: To Be Determined | Component: interprocess
Version: Boost 1.54.0 | Severity: Problem
Resolution: | Keywords:
-------------------------------+--------------------------
Comment (by anonymous):
void lock()
{
unsigned long ret = winapi::wait_for_single_object(m_mtx_hnd,
winapi::infinite_time);
if(ret != winapi::wait_object_0){
if(ret != winapi::wait_abandoned) {
error_info err = system_error_code();
throw interprocess_exception(err);
} else {
winapi::release_mutex(m_mtx_hnd);
throw interprocess_exception(0, "wait_abandoned");
}
}
}
bool try_lock()
{
unsigned long ret = winapi::wait_for_single_object(m_mtx_hnd, 0);
if(ret == winapi::wait_object_0){
return true;
}
else if(ret == winapi::wait_timeout){
return false;
}
else if(ret == winapi::wait_abandoned){
winapi::release_mutex(m_mtx_hnd);
throw interprocess_exception(0, "wait_abandoned");
}
else{
error_info err = system_error_code();
throw interprocess_exception(err);
}
}
bool timed_lock(const boost::posix_time::ptime &abs_time)
{
if(abs_time == boost::posix_time::pos_infin){
this->lock();
return true;
}
boost::posix_time::ptime now = microsec_clock::universal_time();
if(now >= abs_time){
return false;
}
unsigned long ret = winapi::wait_for_single_object
(m_mtx_hnd, (abs_time - now).total_milliseconds());
if(ret == winapi::wait_object_0){
return true;
}
else if(ret == winapi::wait_timeout){
return false;
}
else if(ret == winapi::wait_abandoned){
winapi::release_mutex(m_mtx_hnd);
throw interprocess_exception(0, "wait_abandoned");
}
else{
error_info err = system_error_code();
throw interprocess_exception(err);
}
}
-- Ticket URL: <https://svn.boost.org/trac/boost/ticket/9284#comment:4> 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:14 UTC