Skip to content

Commit cd6266b

Browse files
committed
Fix socket pool starvation
1 parent 1abc3ea commit cd6266b

File tree

1 file changed

+8
-5
lines changed

1 file changed

+8
-5
lines changed

Enyim.Caching/Memcached/MemcachedNode.cs

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -551,10 +551,11 @@ public async Task<IPooledSocketResult> AcquireAsync()
551551
// maybe we died while waiting
552552
if (!this.isAlive)
553553
{
554+
_semaphore.Release();
555+
554556
message = "Pool is dead, returning null. " + _endPoint;
555557
if (_isDebugEnabled) _logger.LogDebug(message);
556558
result.Fail(message);
557-
558559
return result;
559560
}
560561

@@ -573,9 +574,11 @@ public async Task<IPooledSocketResult> AcquireAsync()
573574
}
574575
else
575576
{
577+
_semaphore.Release();
578+
retval.IsAlive = false;
579+
576580
message = "Timeout to reset an acquired socket. InstanceId " + retval.InstanceId;
577581
_logger.LogError(message);
578-
MarkAsDead();
579582
result.Fail(message);
580583
return result;
581584
}
@@ -589,10 +592,11 @@ public async Task<IPooledSocketResult> AcquireAsync()
589592
}
590593
catch (Exception e)
591594
{
595+
MarkAsDead();
596+
_semaphore.Release();
597+
592598
message = "Failed to reset an acquired socket.";
593599
_logger.LogError(message, e);
594-
595-
this.MarkAsDead();
596600
result.Fail(message, e);
597601
return result;
598602
}
@@ -945,7 +949,6 @@ protected virtual async Task<IPooledSocketResult> ExecuteOperationAsync(IOperati
945949
_logger.LogError(errorMsg);
946950
return result;
947951
}
948-
949952
}
950953

951954
protected virtual async Task<bool> ExecuteOperationAsync(IOperation op, Action<bool> next)

0 commit comments

Comments
 (0)