[PATCH v2 2/3] kernelbase: Set the proper error code in GetQueuedCompletionStatus{Ex} when the handle is closed.

Alexey Prokhin alexey at prokhin.ru
Wed Apr 29 10:10:17 CDT 2020


Planet Zoo relies on it being ERROR_ABANDONED_WAIT_0.

Signed-off-by: Alexey Prokhin <alexey at prokhin.ru>
---
v2: ERROR_WAIT_NO_CHILDREN -> STATUS_ABANDONED_WAIT_0. Supersedes 184511
---
 dlls/kernelbase/sync.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/dlls/kernelbase/sync.c b/dlls/kernelbase/sync.c
index c0db4679e9..ca8bb691cc 100644
--- a/dlls/kernelbase/sync.c
+++ b/dlls/kernelbase/sync.c
@@ -959,6 +959,7 @@ BOOL WINAPI DECLSPEC_HOTPATCH GetQueuedCompletionStatus( HANDLE port, LPDWORD co
     }
 
     if (status == STATUS_TIMEOUT) SetLastError( WAIT_TIMEOUT );
+    else if (status == STATUS_ABANDONED_WAIT_0) SetLastError( ERROR_ABANDONED_WAIT_0 );
     else SetLastError( RtlNtStatusToDosError(status) );
     return FALSE;
 }
@@ -980,6 +981,7 @@ BOOL WINAPI DECLSPEC_HOTPATCH GetQueuedCompletionStatusEx( HANDLE port, OVERLAPP
     if (ret == STATUS_SUCCESS) return TRUE;
     else if (ret == STATUS_TIMEOUT) SetLastError( WAIT_TIMEOUT );
     else if (ret == STATUS_USER_APC) SetLastError( WAIT_IO_COMPLETION );
+    else if (ret == STATUS_ABANDONED_WAIT_0) SetLastError( ERROR_ABANDONED_WAIT_0 );
     else SetLastError( RtlNtStatusToDosError(ret) );
     return FALSE;
 }
-- 
2.26.2




More information about the wine-devel mailing list