Skip to content

Commit 3b8eaea

Browse files
authored
Merge pull request #154 from cnblogs/fix-socketpool-starvation
Fix socketpool starvation
2 parents b3dac1c + f0dcbb5 commit 3b8eaea

File tree

2 files changed

+9
-6
lines changed

2 files changed

+9
-6
lines changed

Enyim.Caching/Enyim.Caching.csproj

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
<PropertyGroup>
44
<Description>EnyimMemcachedCore is a Memcached client library for .NET Core. Usage: Add services.AddEnyimMemcached(...) and app.UseEnyimMemcached() in Startup. Add IMemcachedClient into constructor.</Description>
55
<Authors>cnblogs.com</Authors>
6-
<TargetFrameworks>netstandard2.1;net5.0</TargetFrameworks>
6+
<TargetFrameworks>netstandard2.0;netstandard2.1;net5.0</TargetFrameworks>
77
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
88
<AssemblyName>EnyimMemcachedCore</AssemblyName>
99
<PackageId>EnyimMemcachedCore</PackageId>

Enyim.Caching/Memcached/MemcachedNode.cs

+8-5
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)