From: Yuxuan Shui <yshui(a)codeweavers.com> --- dlls/ntdll/sync.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/dlls/ntdll/sync.c b/dlls/ntdll/sync.c index 94148ff089a..6e8fad1e026 100644 --- a/dlls/ntdll/sync.c +++ b/dlls/ntdll/sync.c @@ -675,7 +675,7 @@ retry: struct srwlock_waiter *next = head->next; InterlockedOr((LONG *)&head->state, waiter_state); TRACE("waking %p\n", head); - RtlWakeAddressSingle(&head->state); + NtAlertThreadByThreadId((HANDLE)head->thread_id); head = next; } } @@ -705,6 +705,7 @@ static BOOLEAN srwlock_wait(RTL_SRWLOCK *lock, DWORD waiter_state, return FALSE; } + waiter.thread_id = GetCurrentThreadId(); waiter.state = waiter_state; if (tag & SRWLOCK_TAG_HAS_WAITERS) { @@ -762,7 +763,7 @@ static BOOLEAN srwlock_wait(RTL_SRWLOCK *lock, DWORD waiter_state, waiter_state = ReadAcquire((LONG *)&waiter.state); if (waiter_state & SRWLOCK_WAITER_STATE_NOTIFIED) break; - RtlWaitOnAddress(&waiter.state, &waiter_state, sizeof(DWORD), NULL); + NtWaitForAlertByThreadId(NULL, NULL); }; TRACE("woken: %p %#lx\n", lock, waiter_state); -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/3504