https://bugs.winehq.org/show_bug.cgi?id=46099
--- Comment #15 from Greg Smith codedonewell@gmail.com --- Diving a bit deeper: When thread 009e calls WaitOnAddress/RtlWaitOnAddress, it does some necessary checks before actually waiting, the problem is occuring because after it has performed the checks but before it can get a lock on keyed_event, thread 0090 has called RtlWakeAddressAll and changed that address' contents. When thread 009e goes into the wait code, the address has been changed but it never gets notified. Had thread 0090 been forced to wait until 009e had completed it checks and started it's wait, then the deadlock would not have happened. I'm not yet sure of a good way to provide the necessary synchronisation here. I'll have to research how it is done elsewhere in wine. I suspect that attention from more experienced wine devs is called for.