Skip to content

Commit a2811c2

Browse files
committed
properly unlock the mutex on bg task shutdown
fixes #134
1 parent 9e5b208 commit a2811c2

File tree

1 file changed

+8
-33
lines changed

1 file changed

+8
-33
lines changed

Signal-Windows.RC/SignalBackgroundTask.cs

Lines changed: 8 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -22,16 +22,14 @@ public sealed class SignalBackgroundTask : IBackgroundTask
2222
private const string TaskName = "SignalMessageBackgroundTask";
2323
private readonly ILogger Logger = LibsignalLogging.CreateLogger<SignalBackgroundTask>();
2424
private BackgroundTaskDeferral Deferral;
25-
private DateTime TaskStartTime;
26-
private DateTime TaskEndTime;
2725
private SignalLibHandle Handle;
2826
private ToastNotifier ToastNotifier;
27+
private AutoResetEvent e = new AutoResetEvent(false);
2928

30-
public async void Run(IBackgroundTaskInstance taskInstance)
29+
public void Run(IBackgroundTaskInstance taskInstance)
3130
{
31+
3232
Logger.LogInformation("Background task starting");
33-
TaskStartTime = DateTime.Now;
34-
TaskEndTime = TaskStartTime + TimeSpan.FromSeconds(25);
3533
Deferral = taskInstance.GetDeferral();
3634
SignalLogging.SetupLogging(false);
3735
ToastNotifier = ToastNotificationManager.CreateToastNotifier();
@@ -49,48 +47,25 @@ public async void Run(IBackgroundTaskInstance taskInstance)
4947
Handle = new SignalLibHandle(true);
5048
Handle.SignalMessageEvent += Handle_SignalMessageEvent;
5149
Handle.BackgroundAcquire();
52-
await CheckTimer();
50+
e.WaitOne();
5351
}
5452
catch (Exception e)
5553
{
5654
Logger.LogError("Background task failed: {0}\n{1}", e.Message, e.StackTrace);
5755
}
5856
finally
5957
{
58+
Logger.LogInformation("Background task shutting down");
59+
Handle.BackgroundRelease();
6060
LibUtils.Unlock();
6161
Deferral.Complete();
6262
}
6363
}
6464

6565
private void OnCanceled(IBackgroundTaskInstance sender, BackgroundTaskCancellationReason reason)
6666
{
67-
Logger.LogWarning("Background task received cancel request");
68-
try
69-
{
70-
Handle.BackgroundRelease();
71-
}
72-
catch(Exception e)
73-
{
74-
Logger.LogError("OnCanceled() failed : {0}\n{1}", e.Message, e.StackTrace);
75-
}
76-
finally
77-
{
78-
LibUtils.Unlock();
79-
Logger.LogWarning("Background task cancel handler finished");
80-
}
81-
}
82-
83-
private async Task CheckTimer()
84-
{
85-
Logger.LogInformation("Started listening for messages");
86-
while (true)
87-
{
88-
if (DateTime.Now >= TaskEndTime)
89-
{
90-
return;
91-
}
92-
await Task.Delay(TimeSpan.FromMilliseconds(250));
93-
}
67+
Logger.LogInformation("Background task received cancel request");
68+
e.Set();
9469
}
9570

9671
private void Handle_SignalMessageEvent(object sender, SignalMessageEventArgs e)

0 commit comments

Comments
 (0)