Skip to content

Commit 71ecb12

Browse files
authored
Eliminate threadpool exhaustion (#69)
* Try to eliminating the thread pool exhaustion. * Fix flattening and more trace. * More tracing. * Refactor. Raise internal version.
1 parent 5508029 commit 71ecb12

File tree

3 files changed

+11
-8
lines changed

3 files changed

+11
-8
lines changed

src/SenseNet.Security/Messaging/SecurityActivityQueue.cs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -198,9 +198,10 @@ private void ControlActivityQueueThread(CancellationToken cancel)
198198

199199
// Continue working
200200
_workCycle++;
201-
SnTrace.SecurityQueue.Write(() => $"SAQT: works (cycle: {_workCycle}, " +
202-
$"_arrivalQueue.Count: {_arrivalQueue.Count}), " +
203-
$"_executingList.Count: {_executingList.Count}");
201+
SnTrace.SecurityQueue.Write(() => $"SAQT: works (cycle: {_workCycle}, Queues: " +
202+
$"arrival: {_arrivalQueue.Count}), " +
203+
$"executing: {_executingList.Count}, " +
204+
$"waiting: {_waitingList.Count}");
204205

205206
RemoveGapsIfRequested();
206207

@@ -470,6 +471,8 @@ private IEnumerable<SecurityActivity> GetAllFromChains(List<SecurityActivity> ro
470471
flattened.AddRange(flattened[index].WaitingForMe);
471472
index++;
472473
}
474+
flattened = flattened.Distinct().ToList();
475+
SnTrace.SecurityQueue.Write(() => $"SAQT: GetAllFromChains: found {flattened.Count} activities.");
473476
foreach (var item in flattened)
474477
yield return item;
475478
}

src/SenseNet.Security/Messaging/SecurityMessages/SecurityActivity.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -374,20 +374,20 @@ public void OnDeserialization(object sender)
374374
private Task _executionTask;
375375
[field: NonSerialized]
376376
[JsonIgnore]
377-
private Task _finalizationTask;
377+
private TaskCompletionSource<bool> _finalizationTcs;
378378

379379
internal Task CreateTaskForWait()
380380
{
381-
_finalizationTask = new Task(() => { /* do nothing */ }, CancellationToken, TaskCreationOptions.LongRunning);
382-
return _finalizationTask;
381+
_finalizationTcs = new TaskCompletionSource<bool>(TaskCreationOptions.RunContinuationsAsynchronously);
382+
return _finalizationTcs.Task;
383383
}
384384
internal void StartExecutionTask()
385385
{
386386
_executionTask = ExecuteInternalAsync(CancellationToken);
387387
}
388388
internal void StartFinalizationTask()
389389
{
390-
_finalizationTask?.Start();
390+
_finalizationTcs?.TrySetResult(true);
391391
}
392392

393393
/// <summary>

src/SenseNet.Security/SenseNet.Security.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
<PropertyGroup>
44
<TargetFramework>net8.0</TargetFramework>
5-
<Version>4.3.1</Version>
5+
<Version>4.3.2-alpha.5</Version>
66
<Description>A powerful .Net component for managing permission entries in content repositories.</Description>
77
<Company>Sense/Net Inc.</Company>
88
<Copyright>Copyright © Sense/Net Inc.</Copyright>

0 commit comments

Comments
 (0)