Skip to content

Commit abc2780

Browse files
Martin LercherMartin Lercher
authored andcommitted
Housekeeping, i.e. mitigate memory leak
1 parent 46fc378 commit abc2780

File tree

1 file changed

+21
-1
lines changed

1 file changed

+21
-1
lines changed

src/JsonRpc/ProcessScheduler.cs

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,26 @@ private Task Start(Func<Task> request)
3434
return t;
3535
}
3636

37+
private List<Task> RemoveCompleteTasks(List<Task> list)
38+
{
39+
if (list.Count == 0) return list;
40+
41+
var result = new List<Task>();
42+
foreach(var t in list)
43+
{
44+
if (t.IsFaulted)
45+
{
46+
// TODO: Handle Fault
47+
}
48+
else if (!t.IsCompleted)
49+
{
50+
result.Add(t);
51+
}
52+
}
53+
return result;
54+
}
55+
56+
3757
private void ProcessRequestQueue()
3858
{
3959
// see https://github.com/OmniSharp/csharp-language-server-protocol/issues/4
@@ -49,7 +69,6 @@ private void ProcessRequestQueue()
4969
if (type == RequestProcessType.Serial)
5070
{
5171
Task.WaitAll(waitables.ToArray(), token);
52-
waitables.Clear();
5372
Start(request).Wait(token);
5473
}
5574
else if (type == RequestProcessType.Parallel)
@@ -58,6 +77,7 @@ private void ProcessRequestQueue()
5877
}
5978
else
6079
throw new NotImplementedException("Only Serial and Parallel execution types can be handled currently");
80+
waitables = RemoveCompleteTasks(waitables);
6181
}
6282
}
6383
}

0 commit comments

Comments
 (0)