The summary of the bug, provided by Stephan T. Lavavej:
In shared_timed_mutex::try_lock_until() (line 195 in 3.6.0), you need to deliver a notification. The scenario is:
- There are N threads holding the shared lock.
- One thread calls try_lock_until() to attempt to acquire the exclusive lock. It sets the "I want to write" bool/bit, then waits for the N readers to drain away.
- K more threads attempt to acquire the shared lock, but they notice that someone said "I want to write", so they block on a condition_variable.
- At least one of the N readers is stubborn and doesn't release the shared lock.
- The wannabe-writer times out, gives up, and unsets the "I want to write" bool/bit.
At this point, a notification (it needs to be notify_all) must be delivered to the condition_variable that the K wannabe-readers are waiting on. Otherwise, they can block forever without waking up.
Nit: Can't you initialize this as:
?