From: Torge Matthies <tmatthies(a)codeweavers.com> --- dlls/ntdll/unix/server.c | 3 +++ dlls/ntdll/unix/virtual.c | 4 ++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/dlls/ntdll/unix/server.c b/dlls/ntdll/unix/server.c index 51a83f472e1..362c7793cbc 100644 --- a/dlls/ntdll/unix/server.c +++ b/dlls/ntdll/unix/server.c @@ -602,6 +602,9 @@ unsigned int server_select( const select_op_t *select_op, data_size_t size, UINT sigset_t old_set; int signaled; + /* ensure writes so far are visible to other threads */ + MemoryBarrier(); + memset( &result, 0, sizeof(result) ); do diff --git a/dlls/ntdll/unix/virtual.c b/dlls/ntdll/unix/virtual.c index 2b1581d767a..09fb8eaf4a6 100644 --- a/dlls/ntdll/unix/virtual.c +++ b/dlls/ntdll/unix/virtual.c @@ -5022,8 +5022,6 @@ void WINAPI NtFlushProcessWriteBuffers(void) { NTSTATUS status; - MemoryBarrier(); - do { select_op_t select_op; @@ -5040,6 +5038,8 @@ void WINAPI NtFlushProcessWriteBuffers(void) TIMEOUT_INFINITE, NULL, NULL ); } while (status); + + /* server_select is a memory barrier, so no need to call MemoryBarrier() */ } -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/741