diff options
author | David McFarland <mcfarland@hotmail.com> | 2024-08-27 10:10:24 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-08-27 19:10:24 +0200 |
commit | 3c61d560c39d6edf897183fe33b8047c25d2d895 (patch) | |
tree | 3214a73d2d9f49a08ad084a0435c55cf3ac89b13 | |
parent | b45a81458a0b48acd519ce280c7b8f3970e0ffed (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.cs | 5 |
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); + } } } |