From: Torge Matthies tmatthies@codeweavers.com
--- dlls/ntdll/unix/server.c | 3 +++ server/thread.c | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-)
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/server/thread.c b/server/thread.c index 1f052092b56..ca5c1c51502 100644 --- a/server/thread.c +++ b/server/thread.c @@ -2112,7 +2112,7 @@ DECL_HANDLER(flush_process_write_buffers) struct thread_apc *apc; int success;
- if (thread == current || thread->state == TERMINATED) continue; + if (thread == current || thread->state == TERMINATED || thread->wait) continue;
if (!(apc = create_apc( ¤t->obj, &call ))) break;