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:
parent
b45a81458a
commit
3c61d560c3
1 changed files with 4 additions and 1 deletions
|
@ -80,7 +80,10 @@ namespace ARMeilleure.Translation
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
Monitor.Wait(Sync);
|
if (!_disposed)
|
||||||
|
{
|
||||||
|
Monitor.Wait(Sync);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Reference in a new issue