Occasionally I hit an issue where a boost::condition_variable_any gets stuck during wait() with a predicate, where I know that the predicate evaluates to true and notify_one() has definitely been called multiple times. All that I have to go on is a core dump which as well as showing the above shows that
the thread running wait() is in interruptible_wait
total_count is 0
So presumably total_count has been decremented in wake_waiters but winapi::ReleaseSemaphore hasn't resulted in the waiting thread resuming. ReleaseSemaphore officially can fail but condition_variable's usage doesn't check the return code. Since total_count is zero subsequent calls to notify will have no effect.
The same app code runs on linux without hitting this issue.
Boost 1.83.0 MSVC 19.38.33135.0
Occasionally I hit an issue where a
boost::condition_variable_any
gets stuck duringwait()
with a predicate, where I know that the predicate evaluates totrue
andnotify_one()
has definitely been called multiple times. All that I have to go on is a core dump which as well as showing the above shows thatwait()
is ininterruptible_wait
total_count
is 0So presumably
total_count
has been decremented inwake_waiters
butwinapi::ReleaseSemaphore
hasn't resulted in the waiting thread resuming.ReleaseSemaphore
officially can fail butcondition_variable
's usage doesn't check the return code. Sincetotal_count
is zero subsequent calls tonotify
will have no effect.The same app code runs on linux without hitting this issue.