From 1dad4952801a87ee8ed5c2293c19e05878eef2c4 Mon Sep 17 00:00:00 2001 From: Anthony Williams Date: Tue, 12 Feb 2013 08:21:40 +0000 Subject: [PATCH] Modify mark_waiting_and_try_lock to return modified count if mutex already locked [SVN r82828] --- include/boost/thread/win32/basic_timed_mutex.hpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/include/boost/thread/win32/basic_timed_mutex.hpp b/include/boost/thread/win32/basic_timed_mutex.hpp index 5d85c70d..742e8ea8 100644 --- a/include/boost/thread/win32/basic_timed_mutex.hpp +++ b/include/boost/thread/win32/basic_timed_mutex.hpp @@ -93,10 +93,13 @@ namespace boost { for(;;) { - long const new_count=(old_count&lock_flag_value)?(old_count+1):(old_count|lock_flag_value); + bool const was_locked=(old_count&lock_flag_value); + long const new_count=was_locked?(old_count+1):(old_count|lock_flag_value); long const current=BOOST_INTERLOCKED_COMPARE_EXCHANGE(&active_count,new_count,old_count); if(current==old_count) { + if(was_locked) + old_count=new_count; break; } old_count=current;