[PATCH] msvcp90: Reimplement condition variables on top of RtlWaitOnAddress().
Piotr Caban
piotr.caban at gmail.com
Mon Mar 14 13:51:12 CDT 2022
On 3/11/22 17:04, Henri Verbeet wrote:
> This is largely the same as the condition variable implementation in ntdll.
> There are essentially two reasons for doing this:
>
> - RtlWaitOnAddress() avoids server calls, compared to the existing keyed
> event implementation.
> - The NtReleaseKeyedEvent() call in _Cnd_signal() can hang if a thread was
> killed inside _Cnd_wait(), for example by an application calling exit().
> Piotr Caban reports this scenario is supposed to work with msvcp140,
> although not necessarily with earlier versions of msvcp. (And indeed,
> native msvcp140 is a workaround for the affected applications.)
I've sent a set of patches that tries to fix it differently. It's using
_Condition_variable to implement _Cnd_* functions in msvcp110/msvcp120.
In msvcp140 CONDITION_VARIABLE and SRWLock is used instead.
It should fix the problem you're describing in msvcp140.
_Condition_variable implementation is still to be fixed (currently
Wine's implementation hangs while native crashes).
Thanks,
Piotr
More information about the wine-devel
mailing list