From cd6266bb04aed401245862a18670f5fb8d76ba69 Mon Sep 17 00:00:00 2001 From: dudu Date: Mon, 30 Nov 2020 14:22:09 +0800 Subject: [PATCH 1/2] Fix socket pool starvation --- Enyim.Caching/Memcached/MemcachedNode.cs | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/Enyim.Caching/Memcached/MemcachedNode.cs b/Enyim.Caching/Memcached/MemcachedNode.cs index 547d9f31..830649f9 100755 --- a/Enyim.Caching/Memcached/MemcachedNode.cs +++ b/Enyim.Caching/Memcached/MemcachedNode.cs @@ -551,10 +551,11 @@ public async Task AcquireAsync() // maybe we died while waiting if (!this.isAlive) { + _semaphore.Release(); + message = "Pool is dead, returning null. " + _endPoint; if (_isDebugEnabled) _logger.LogDebug(message); result.Fail(message); - return result; } @@ -573,9 +574,11 @@ public async Task AcquireAsync() } else { + _semaphore.Release(); + retval.IsAlive = false; + message = "Timeout to reset an acquired socket. InstanceId " + retval.InstanceId; _logger.LogError(message); - MarkAsDead(); result.Fail(message); return result; } @@ -589,10 +592,11 @@ public async Task AcquireAsync() } catch (Exception e) { + MarkAsDead(); + _semaphore.Release(); + message = "Failed to reset an acquired socket."; _logger.LogError(message, e); - - this.MarkAsDead(); result.Fail(message, e); return result; } @@ -945,7 +949,6 @@ protected virtual async Task ExecuteOperationAsync(IOperati _logger.LogError(errorMsg); return result; } - } protected virtual async Task ExecuteOperationAsync(IOperation op, Action next) From f0dcbb5e26f0f6f7cf77a17d9777c90ffb037c38 Mon Sep 17 00:00:00 2001 From: dudu Date: Tue, 1 Dec 2020 15:48:22 +0800 Subject: [PATCH 2/2] Add netstandard2.0 to TargetFrameworks --- Enyim.Caching/Enyim.Caching.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Enyim.Caching/Enyim.Caching.csproj b/Enyim.Caching/Enyim.Caching.csproj index ec299fc2..cb2c1e1f 100755 --- a/Enyim.Caching/Enyim.Caching.csproj +++ b/Enyim.Caching/Enyim.Caching.csproj @@ -3,7 +3,7 @@ EnyimMemcachedCore is a Memcached client library for .NET Core. Usage: Add services.AddEnyimMemcached(...) and app.UseEnyimMemcached() in Startup. Add IMemcachedClient into constructor. cnblogs.com - netstandard2.1;net5.0 + netstandard2.0;netstandard2.1;net5.0 true EnyimMemcachedCore EnyimMemcachedCore