Skip to content

Commit badbd90

Browse files
committed
Expose the Releaser as a struct for better performance
1 parent 010829f commit badbd90

File tree

1 file changed

+9
-9
lines changed

1 file changed

+9
-9
lines changed

src/NHibernate/Util/AsyncReaderWriterLock.cs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,9 @@ internal class AsyncReaderWriterLock
1111
{
1212
private readonly SemaphoreSlim _writeLockSemaphore = new SemaphoreSlim(1, 1);
1313
private readonly SemaphoreSlim _readLockSemaphore = new SemaphoreSlim(0, 1);
14-
private readonly IDisposable _writerReleaser;
15-
private readonly IDisposable _readerReleaser;
16-
private readonly Task<IDisposable> _readerReleaserTask;
14+
private readonly Releaser _writerReleaser;
15+
private readonly Releaser _readerReleaser;
16+
private readonly Task<Releaser> _readerReleaserTask;
1717
private SemaphoreSlim _waitingReadLockSemaphore;
1818
private int _readersWaiting;
1919
private int _currentReaders;
@@ -36,7 +36,7 @@ public AsyncReaderWriterLock()
3636

3737
internal bool AcquiredWriteLock => _writeLockSemaphore.CurrentCount == 0;
3838

39-
public IDisposable WriteLock()
39+
public Releaser WriteLock()
4040
{
4141
if (!CanEnterWriteLock(out var waitForReadLocks))
4242
{
@@ -55,7 +55,7 @@ public IDisposable WriteLock()
5555
return _writerReleaser;
5656
}
5757

58-
public async Task<IDisposable> WriteLockAsync()
58+
public async Task<Releaser> WriteLockAsync()
5959
{
6060
if (!CanEnterWriteLock(out var waitForReadLocks))
6161
{
@@ -74,7 +74,7 @@ public async Task<IDisposable> WriteLockAsync()
7474
return _writerReleaser;
7575
}
7676

77-
public IDisposable ReadLock()
77+
public Releaser ReadLock()
7878
{
7979
if (CanEnterReadLock())
8080
{
@@ -87,11 +87,11 @@ public IDisposable ReadLock()
8787
return _readerReleaser;
8888
}
8989

90-
public Task<IDisposable> ReadLockAsync()
90+
public Task<Releaser> ReadLockAsync()
9191
{
9292
return CanEnterReadLock() ? _readerReleaserTask : ReadLockInternalAsync();
9393

94-
async Task<IDisposable> ReadLockInternalAsync()
94+
async Task<Releaser> ReadLockInternalAsync()
9595
{
9696
await _waitingReadLockSemaphore.WaitAsync().ConfigureAwait(false);
9797
ReleaseWaitingReader();
@@ -197,7 +197,7 @@ private void ReleaseWaitingReader()
197197
}
198198
}
199199

200-
private sealed class Releaser : IDisposable
200+
public struct Releaser : IDisposable
201201
{
202202
private readonly AsyncReaderWriterLock _toRelease;
203203
private readonly bool _writer;

0 commit comments

Comments
 (0)