diff --git a/mcs/class/System.Core/System.Threading/ReaderWriterLockSlim.cs b/mcs/class/System.Core/System.Threading/ReaderWriterLockSlim.cs index eb42055eda9fcfa54e24274b981e3a38e0b4ef8d..07f1dd1f9e7c5c3aa415f16e57737fb2ca2e6f43 100644 --- a/mcs/class/System.Core/System.Threading/ReaderWriterLockSlim.cs +++ b/mcs/class/System.Core/System.Threading/ReaderWriterLockSlim.cs @@ -292,7 +292,8 @@ namespace System.Threading { ctstate.LockState ^= LockState.Upgradable; ctstate.UpgradeableRecursiveCount--; - Interlocked.Add (ref rwlock, -RwRead); + if (Interlocked.Add (ref rwlock, -RwRead) >> RwReadBit == 0) + readerDoneEvent.Set (); } public void Dispose ()