Skip to content

Commit

Permalink
Proper fix
Browse files Browse the repository at this point in the history
  • Loading branch information
benaadams committed May 24, 2024
1 parent 1756477 commit b1e3d44
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 33 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -51,9 +51,11 @@ public struct BondedItemsEnumerator : IEnumerator<NodeBucketItem>, IEnumerable<N
public BondedItemsEnumerator(NodeBucket nodeBucket)
{
_nodeBucket = nodeBucket;
lock (_nodeBucket._nodeBucketLock)
{
_currentNode = nodeBucket._items.Last;
}
_referenceTime = DateTime.UtcNow;
Monitor.Enter(_nodeBucket._nodeBucketLock);
_currentNode = nodeBucket._items.Last;
Current = null!;
}

Expand All @@ -63,13 +65,16 @@ public BondedItemsEnumerator(NodeBucket nodeBucket)

public bool MoveNext()
{
while (_currentNode is not null)
lock (_nodeBucket._nodeBucketLock)
{
Current = _currentNode.Value;
_currentNode = _currentNode.Previous;
if (Current.IsBonded(_referenceTime))
while (_currentNode is not null)
{
return true;
Current = _currentNode.Value;
_currentNode = _currentNode.Previous;
if (Current.IsBonded(_referenceTime))
{
return true;
}
}
}

Expand All @@ -81,11 +86,6 @@ public bool MoveNext()

public void Dispose()
{
NodeBucket? nodeBucket = Interlocked.Exchange(ref _nodeBucket, null!);
if (nodeBucket is not null)
{
Monitor.Exit(nodeBucket._nodeBucketLock);
}
}
public BondedItemsEnumerator GetEnumerator() => this;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -105,33 +105,25 @@ public ClosestNodesEnumerator(NodeBucket[] buckets, int bucketSize)

public bool MoveNext()
{
try
while (_count < _bucketSize)
{
while (_count < _bucketSize)
if (!_enumeratorSet || !_itemEnumerator.MoveNext())
{
if (!_enumeratorSet || !_itemEnumerator.MoveNext())
_itemEnumerator.Dispose();
_bucketIndex++;
if (_bucketIndex >= _buckets.Length)
{
_itemEnumerator.Dispose();
_bucketIndex++;
if (_bucketIndex >= _buckets.Length)
{
return false;
}

_itemEnumerator = _buckets[_bucketIndex].BondedItems.GetEnumerator();
_enumeratorSet = true;
continue;
return false;
}

Current = _itemEnumerator.Current.Node!;
_count++;
return true;
_itemEnumerator = _buckets[_bucketIndex].BondedItems.GetEnumerator();
_enumeratorSet = true;
continue;
}
}
catch
{
_itemEnumerator.Dispose();
throw;

Current = _itemEnumerator.Current.Node!;
_count++;
return true;
}

return false;
Expand Down

0 comments on commit b1e3d44

Please sign in to comment.