aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid McFarland <mcfarland@hotmail.com>2024-08-27 10:10:24 -0700
committerGitHub <noreply@github.com>2024-08-27 19:10:24 +0200
commit3c61d560c39d6edf897183fe33b8047c25d2d895 (patch)
tree3214a73d2d9f49a08ad084a0435c55cf3ac89b13
parentb45a81458a0b48acd519ce280c7b8f3970e0ffed (diff)
Fix deadlock in background translation thread shutdown (#7239)1.1.1380
TryDequeue checks for _disposed before taking the lock. If another thread calls Dispose before it takes the lock, it won't get woken up by the PulseAll call, and will deadlock in Monitor.Wait. Double-checking _disposed with the lock taken should avoid this.
-rw-r--r--src/ARMeilleure/Translation/TranslatorQueue.cs5
1 files changed, 4 insertions, 1 deletions
diff --git a/src/ARMeilleure/Translation/TranslatorQueue.cs b/src/ARMeilleure/Translation/TranslatorQueue.cs
index cee2f908..831522bc 100644
--- a/src/ARMeilleure/Translation/TranslatorQueue.cs
+++ b/src/ARMeilleure/Translation/TranslatorQueue.cs
@@ -80,7 +80,10 @@ namespace ARMeilleure.Translation
return true;
}
- Monitor.Wait(Sync);
+ if (!_disposed)
+ {
+ Monitor.Wait(Sync);
+ }
}
}