id,summary,reporter,owner,description,type,status,milestone,component,version,severity,resolution,keywords,cc 5845,mutex.inl: wait_mutex (and its callers) ignore failures from WaitForSingleObject,noloader@…,viboes," {{{ inline int wait_mutex(void* mutex, int time) { unsigned int res = 0; res = WaitForSingleObject(mutex_cast(mutex), time); //:xxx assert(res != WAIT_FAILED && res != WAIT_ABANDONED); return res; } }}} Its callers are spread across a number of files, including mutex.cpp and recursive_mutex.cpp. Unfortunately, a common use case is shown below (taken from mutex.cpp): {{{ void timed_mutex::do_lock() { wait_mutex(m_mutex, INFINITE); } }}} Not only does do_lock() ignore the return value, its callers will proceed to use the guarded data regardless of whether the lock was actually acquired. do_trylock() does a little better, but still ignores return values such as ERROR_INVALID_HANDLE and WAIT_FAILED. {{{ bool timed_mutex::do_trylock() { return wait_mutex(m_mutex, 0) == WAIT_OBJECT_0; } }}} ",Support Requests,closed,To Be Determined,thread,Boost 1.47.0,Problem,invalid,,noloader@… viboes