Review
This commit is contained in:
parent
71d8923f5c
commit
1e42791584
1 changed files with 14 additions and 6 deletions
|
|
@ -14,6 +14,7 @@ public class DnsRepository
|
|||
|
||||
private readonly ReaderWriterLockSlim _recordLock = new();
|
||||
private readonly List<DnsRecord> _records = [];
|
||||
private readonly SemaphoreSlim _syncLock = new(1, 1);
|
||||
|
||||
public List<DnsRecord> Find(Predicate<DnsRecord> query)
|
||||
{
|
||||
|
|
@ -40,20 +41,27 @@ public class DnsRepository
|
|||
|
||||
public async ValueTask Record(DnsRecord record, CancellationToken cancellationToken = default)
|
||||
{
|
||||
// just lock that thing.
|
||||
using (await _recordLock.AcquireLockAsync(cancellationToken).ConfigureAwait(false))
|
||||
bool entered = false;
|
||||
try
|
||||
{
|
||||
entered = await _syncLock.WaitAsync(Timeout.Infinite, cancellationToken).ConfigureAwait(continueOnCapturedContext: false);
|
||||
RecordContinuation(record);
|
||||
}
|
||||
finally
|
||||
{
|
||||
if (entered)
|
||||
{
|
||||
_syncLock.Release();
|
||||
}
|
||||
}
|
||||
|
||||
void RecordContinuation(DnsRecord record)
|
||||
{
|
||||
var search = Matches(record);
|
||||
bool lockEntered = false;
|
||||
|
||||
bool entered = false;
|
||||
try
|
||||
{
|
||||
lockEntered = _recordLock.TryEnterWriteLock(Timeout.Infinite);
|
||||
entered = _recordLock.TryEnterWriteLock(Timeout.Infinite);
|
||||
|
||||
if (search.First is { } node)
|
||||
{
|
||||
|
|
@ -79,7 +87,7 @@ public class DnsRepository
|
|||
}
|
||||
finally
|
||||
{
|
||||
if (lockEntered)
|
||||
if (entered)
|
||||
{
|
||||
_recordLock.ExitWriteLock();
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue