1- using System ;
1+ using System ;
22using System . Threading ;
33using System . Threading . Tasks ;
44
@@ -9,6 +9,7 @@ namespace NHibernate.Util
99 // https://devblogs.microsoft.com/pfxteam/building-async-coordination-primitives-part-7-asyncreaderwriterlock/
1010 internal class AsyncReaderWriterLock : IDisposable , Cache . ICacheLock
1111 {
12+ private readonly Lock _writeLockLock = LockFactory . Create ( ) ;
1213 private readonly SemaphoreSlim _writeLockSemaphore = new SemaphoreSlim ( 1 , 1 ) ;
1314 private readonly SemaphoreSlim _readLockSemaphore = new SemaphoreSlim ( 0 , 1 ) ;
1415 private readonly Releaser _writerReleaser ;
@@ -48,7 +49,7 @@ public Releaser WriteLock()
4849 if ( ! CanEnterWriteLock ( out var waitForReadLocks ) )
4950 {
5051 _writeLockSemaphore . Wait ( ) ;
51- lock ( _writeLockSemaphore )
52+ lock ( _writeLockLock )
5253 {
5354 _writersWaiting -- ;
5455 }
@@ -74,7 +75,7 @@ public async Task<Releaser> WriteLockAsync()
7475 if ( ! CanEnterWriteLock ( out var waitForReadLocks ) )
7576 {
7677 await _writeLockSemaphore . WaitAsync ( ) . ConfigureAwait ( false ) ;
77- lock ( _writeLockSemaphore )
78+ lock ( _writeLockLock )
7879 {
7980 _writersWaiting -- ;
8081 }
@@ -126,7 +127,7 @@ async Task<Releaser> ReadLockInternalAsync()
126127
127128 public void Dispose ( )
128129 {
129- lock ( _writeLockSemaphore )
130+ lock ( _writeLockLock )
130131 {
131132 _writeLockSemaphore . Dispose ( ) ;
132133 _readLockSemaphore . Dispose ( ) ;
@@ -139,7 +140,7 @@ public void Dispose()
139140 private bool CanEnterWriteLock ( out bool waitForReadLocks )
140141 {
141142 waitForReadLocks = false ;
142- lock ( _writeLockSemaphore )
143+ lock ( _writeLockLock )
143144 {
144145 AssertNotDisposed ( ) ;
145146 if ( _writeLockSemaphore . CurrentCount > 0 && _writeLockSemaphore . Wait ( 0 ) )
@@ -156,7 +157,7 @@ private bool CanEnterWriteLock(out bool waitForReadLocks)
156157
157158 private void ExitWriteLock ( )
158159 {
159- lock ( _writeLockSemaphore )
160+ lock ( _writeLockLock )
160161 {
161162 AssertNotDisposed ( ) ;
162163 if ( _writeLockSemaphore . CurrentCount == 1 )
@@ -187,7 +188,7 @@ private void ExitWriteLock()
187188
188189 private bool CanEnterReadLock ( out SemaphoreSlim waitingReadLockSemaphore )
189190 {
190- lock ( _writeLockSemaphore )
191+ lock ( _writeLockLock )
191192 {
192193 AssertNotDisposed ( ) ;
193194 if ( _writersWaiting == 0 && _writeLockSemaphore . CurrentCount > 0 )
@@ -212,7 +213,7 @@ private bool CanEnterReadLock(out SemaphoreSlim waitingReadLockSemaphore)
212213
213214 private void ExitReadLock ( )
214215 {
215- lock ( _writeLockSemaphore )
216+ lock ( _writeLockLock )
216217 {
217218 AssertNotDisposed ( ) ;
218219 if ( _currentReaders == 0 )
0 commit comments