[PATCH v2] ntdll: Remove wait timeout in get_thread_context().

Paul Gofman pgofman at codeweavers.com
Mon Apr 12 14:14:03 CDT 2021


Fixes hangs during loading or after campaign start in
Mount & Blade II: Bannerlord.

Signed-off-by: Paul Gofman <pgofman at 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 );
-- 
2.30.2




More information about the wine-devel mailing list