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 ...@@ -424,54 +424,60 @@ namespace Titanium.Web.Proxy.Network.Tcp
{ {
while (runCleanUpTask) while (runCleanUpTask)
{ {
foreach (var item in cache) try
{ {
var queue = item.Value; foreach (var item in cache)
while (queue.Count > 0)
{ {
if (queue.TryDequeue(out var connection)) var queue = item.Value;
while (queue.Count > 0)
{ {
var cutOff = DateTime.Now.AddSeconds(-1 * server.ConnectionTimeOutSeconds); if (queue.TryDequeue(out var connection))
if (!server.EnableConnectionPool
|| connection.LastAccess < cutOff)
{ {
disposalBag.Add(connection); var cutOff = DateTime.Now.AddSeconds(-1 * server.ConnectionTimeOutSeconds);
continue; if (!server.EnableConnectionPool
|| connection.LastAccess < cutOff)
{
disposalBag.Add(connection);
continue;
}
queue.Enqueue(connection);
break;
} }
queue.Enqueue(connection);
break;
} }
} }
}
try try
{ {
await @lock.WaitAsync(); await @lock.WaitAsync();
//clear empty queues //clear empty queues
var emptyKeys = cache.Where(x => x.Value.Count == 0).Select(x => x.Key).ToList(); var emptyKeys = cache.Where(x => x.Value.Count == 0).Select(x => x.Key).ToList();
foreach (string key in emptyKeys) foreach (string key in emptyKeys)
{
cache.TryRemove(key, out var _);
}
}
finally
{ {
cache.TryRemove(key, out var _); @lock.Release();
} }
}
finally
{
@lock.Release();
}
while (!disposalBag.IsEmpty) while (!disposalBag.IsEmpty)
{
if (disposalBag.TryTake(out var connection))
{ {
connection?.Dispose(); if (disposalBag.TryTake(out var connection))
{
connection?.Dispose();
}
} }
} }
finally
//cleanup every 3 seconds by default {
await Task.Delay(1000 * 3); //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