condition_variable_any stuck waiting
Nobody has claimed this yet.
Assessment
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Newbie friendliness
- 38/100
- Issue type
- Bug
- Clarity
- Needs clarification
- Activity status
- Quiet
- Tech stack
- cpp
- Domain
- operating-systems
Research direction
Start with the Windows condition_variable_any path around interruptible_wait, wake_waiters, total_count, and winapi::ReleaseSemaphore. Reproduce under Boost 1.83.0 with MSVC 19.38.33135.0, then determine why a notified predicate wait can remain blocked and define a reliable fix or diagnostic for the semaphore failure.
Written by the indexing model from the issue text.
Description
Boost 1.83.0
MSVC 19.38.33135.0
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 ininterruptible_wait total_countis 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.
- Dominant language
- C++
- Stars
- 213
- Forks
- 171
- PR merge metrics
- No merged PRs in 30d
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from boostorg/thread
-
Difficulty 1/5 Under an hour Newbie friendliness 65/100
-
Difficulty 3/5 1-2 days Newbie friendliness 64/100
-
Difficulty 3/5 1-2 days Newbie friendliness 42/100
-
Difficulty 4/5 3-5 days Newbie friendliness 45/100
-
Difficulty 2/5 1-3 hours Newbie friendliness 58/100
Similar issues
-
Difficulty 2/5 1-3 hours Newbie friendliness 70/100
google/libultrahdr#485 ·
-
Difficulty 2/5 1-3 hours Newbie friendliness 75/100
godotengine/godot#123776 ·
-
bug
Difficulty 1/5 Under an hour Newbie friendliness 60/100
-
good first issue
Difficulty 1/5 Under an hour Newbie friendliness 90/100
-
good first issue
Difficulty 2/5 1-3 hours Newbie friendliness 75/100
ros2/common_interfaces#344 ·