Fixes hangs during loading or after campaign start in Mount & Blade II: Bannerlord.
Signed-off-by: Paul Gofman pgofman@codeweavers.com --- Supersedes 203674.
The hang happens when NtGetContextThread fails due to time out (after successful thread suspend). The timeout happens as the thread is busy in read() for regular file called from NtReadFile and does not process SIGUSR1 until read is complete. The read() may take a real long time when the disk is under heavy load.
dlls/ntdll/unix/thread.c | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-)
diff --git a/dlls/ntdll/unix/thread.c b/dlls/ntdll/unix/thread.c index 1a882a99855..543a214e056 100644 --- a/dlls/ntdll/unix/thread.c +++ b/dlls/ntdll/unix/thread.c @@ -617,13 +617,8 @@ NTSTATUS get_thread_context( HANDLE handle, context_t *context, unsigned int fla
if (ret == STATUS_PENDING) { - LARGE_INTEGER timeout; - timeout.QuadPart = -1000000; - if (NtWaitForSingleObject( handle, FALSE, &timeout )) - { - NtClose( handle ); - return STATUS_ACCESS_DENIED; - } + NtWaitForSingleObject( handle, FALSE, NULL ); + SERVER_START_REQ( get_thread_context ) { req->handle = wine_server_obj_handle( handle );