Commit 1c73d08d authored by justcoding121's avatar justcoding121

wrap cleanup task with try finally

parent aa2e3340
......@@ -424,54 +424,60 @@ namespace Titanium.Web.Proxy.Network.Tcp
{
while (runCleanUpTask)
{
foreach (var item in cache)
try
{
var queue = item.Value;
while (queue.Count > 0)
foreach (var item in cache)
{
if (queue.TryDequeue(out var connection))
var queue = item.Value;
while (queue.Count > 0)
{
var cutOff = DateTime.Now.AddSeconds(-1 * server.ConnectionTimeOutSeconds);
if (!server.EnableConnectionPool
|| connection.LastAccess < cutOff)
if (queue.TryDequeue(out var connection))
{
disposalBag.Add(connection);
continue;
var cutOff = DateTime.Now.AddSeconds(-1 * server.ConnectionTimeOutSeconds);
if (!server.EnableConnectionPool
|| connection.LastAccess < cutOff)
{
disposalBag.Add(connection);
continue;
}
queue.Enqueue(connection);
break;
}
queue.Enqueue(connection);
break;
}
}
}
try
{
await @lock.WaitAsync();
try
{
await @lock.WaitAsync();
//clear empty queues
var emptyKeys = cache.Where(x => x.Value.Count == 0).Select(x => x.Key).ToList();
foreach (string key in emptyKeys)
//clear empty queues
var emptyKeys = cache.Where(x => x.Value.Count == 0).Select(x => x.Key).ToList();
foreach (string key in emptyKeys)
{
cache.TryRemove(key, out var _);
}
}
finally
{
cache.TryRemove(key, out var _);
@lock.Release();
}
}
finally
{
@lock.Release();
}
while (!disposalBag.IsEmpty)
{
if (disposalBag.TryTake(out var connection))
while (!disposalBag.IsEmpty)
{
connection?.Dispose();
if (disposalBag.TryTake(out var connection))
{
connection?.Dispose();
}
}
}
//cleanup every 3 seconds by default
await Task.Delay(1000 * 3);
finally
{
//cleanup every 3 seconds by default
await Task.Delay(1000 * 3);
}
}
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment