Skip to content

Commit ad2a6d4

Browse files
committed
Fix deadlock when rapdily suspending and resuming
1 parent c2255b6 commit ad2a6d4

File tree

1 file changed

+7
-3
lines changed

1 file changed

+7
-3
lines changed

Signal-Windows.Lib/SignalLibHandle.cs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -231,9 +231,11 @@ public async Task Reacquire()
231231
Logger.LogTrace("Reacquire() locking");
232232
CancelSource = new CancellationTokenSource();
233233
SemaphoreSlim.Wait(CancelSource.Token);
234+
Logger.LogTrace("Reacquire() locked");
234235
try
235236
{
236237
GlobalResetEvent = LibUtils.OpenResetEventSet();
238+
Running = true;
237239
LibUtils.Lock();
238240
GlobalResetEvent.Reset();
239241
LibsignalDBContext.ClearSessionCache();
@@ -277,7 +279,6 @@ await f.Key.RunAsync(CoreDispatcherPriority.Normal, () =>
277279
{
278280
InitNetwork();
279281
}
280-
Running = true;
281282
}
282283
finally
283284
{
@@ -289,10 +290,12 @@ await f.Key.RunAsync(CoreDispatcherPriority.Normal, () =>
289290
public void Release()
290291
{
291292
//TODO invalidate view information
292-
Logger.LogTrace("Release() locking");
293+
Logger.LogTrace("Release()");
293294
if (Running)
294295
{
296+
Logger.LogTrace("Release() locking");
295297
SemaphoreSlim.Wait(CancelSource.Token);
298+
Logger.LogTrace("Release() locked");
296299
Running = false;
297300
CancelSource.Cancel();
298301
IncomingMessagesTask?.Wait();
@@ -306,7 +309,7 @@ public void Release()
306309
}
307310
else
308311
{
309-
Logger.LogTrace("SignalLibHandle was already closed");
312+
Logger.LogWarning("SignalLibHandle was already closed");
310313
}
311314
}
312315

@@ -955,6 +958,7 @@ private void InitNetwork()
955958
/// </summary>
956959
private async Task HandleAuthFailure()
957960
{
961+
Logger.LogError("HandleAuthFailure");
958962
Logger.LogTrace("HandleAuthFailure() locking");
959963
SemaphoreSlim.Wait(CancelSource.Token);
960964
try

0 commit comments

Comments
 (0)