diff options
author | Koundinya Veluri <kouvel@users.noreply.github.com> | 2017-10-05 12:06:07 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-10-05 12:06:07 -0700 |
commit | 7e43a10cdb136cc1213b1f5b2db406b9830108e4 (patch) | |
tree | c120a96eb32248246054a78b9bfad3a082a77da1 /buildpipeline/pipelines.json | |
parent | b085bfacb5eed105e3e55681f75c5413d91c1f86 (diff) | |
download | coreclr-7e43a10cdb136cc1213b1f5b2db406b9830108e4.tar.gz coreclr-7e43a10cdb136cc1213b1f5b2db406b9830108e4.tar.bz2 coreclr-7e43a10cdb136cc1213b1f5b2db406b9830108e4.zip |
Fix new deadlock possibility in ReaderWriterLockSlim from a recent change (#14337)
Fix new deadlock possibility in ReaderWriterLockSlim from a recent change
Fixed the following scenario that would lead to deadlock (rare, but frequently reproducible if code is changed):
- Thread T0 signals the write waiter event or the upgradeable read waiter event to wake a waiter
- There are no threads waiting on the event, but T1 is in WaitOnEvent() after exiting the spin lock and before actually waiting on the event (that is, it's recorded that there is one waiter for the event). It remains in this region for a while, in the repro case it typically gets context-switched out.
- T2 acquires the RW lock in some fashion that blocks T0 or T3 from acquiring the RW lock
- T0 or T3 fails to acquire the RW lock enough times for it to enter WaitOnEvent for the same event as T1
- T0 or T3 resets the event
- T2 releases the RW lock and does not wake a waiter because the reset at the previous step lost a signal but _waiterStates was not updated to reflect that
- T1 and other threads begin waiting on the event, but there's no longer any thread that would wake them
Diffstat (limited to 'buildpipeline/pipelines.json')
0 files changed, 0 insertions, 0 deletions