Module: wine Branch: master Commit: 3ae370dc71481dd7e50d439dd82b29ded2908c04 URL: http://source.winehq.org/git/wine.git/?a=commit;h=3ae370dc71481dd7e50d439dd8...
Author: Alexandre Julliard julliard@winehq.org Date: Mon Dec 3 13:55:25 2007 +0100
ntdll: Added a sleep in NtGet/SetContextThread, a yield is not enough on some kernels.
---
dlls/ntdll/thread.c | 18 ++++++++++++++---- 1 files changed, 14 insertions(+), 4 deletions(-)
diff --git a/dlls/ntdll/thread.c b/dlls/ntdll/thread.c index 37a845f..15768c2 100644 --- a/dlls/ntdll/thread.c +++ b/dlls/ntdll/thread.c @@ -820,8 +820,13 @@ NTSTATUS WINAPI NtSetContextThread( HANDLE handle, const CONTEXT *context ) ret = wine_server_call( req ); } SERVER_END_REQ; - if (ret != STATUS_PENDING) break; - NtYieldExecution(); + if (ret == STATUS_PENDING) + { + LARGE_INTEGER timeout; + timeout.QuadPart = -10000; + NtDelayExecution( FALSE, &timeout ); + } + else break; } NtResumeThread( handle, &dummy ); } @@ -1110,8 +1115,13 @@ NTSTATUS WINAPI NtGetContextThread( HANDLE handle, CONTEXT *context ) ret = wine_server_call( req ); } SERVER_END_REQ; - if (ret != STATUS_PENDING) break; - NtYieldExecution(); + if (ret == STATUS_PENDING) + { + LARGE_INTEGER timeout; + timeout.QuadPart = -10000; + NtDelayExecution( FALSE, &timeout ); + } + else break; } NtResumeThread( handle, &dummy ); }