Fix deadlock in background translation thread shutdown (#7239)

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.
This commit is contained in:
David McFarland 2024-08-27 10:10:24 -07:00 committed by GitHub
parent b45a81458a
commit 3c61d560c3
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -80,9 +80,12 @@ namespace ARMeilleure.Translation
return true;
}
if (!_disposed)
{
Monitor.Wait(Sync);
}
}
}
result = default;