From: Dmitry Timoshkov Subject: Re: [PATCH 2/3] kernelbase: Set the proper error code in GetQueuedCompletionStatus{Ex} when the handle is closed. Message-Id: <20200429174934.713dfd720e92fdb8f2be18ef@baikal.ru> Date: Wed, 29 Apr 2020 17:49:34 +0800 In-Reply-To: <20200429090750.42741-2-alexey@prokhin.ru> References: <20200429090750.42741-1-alexey@prokhin.ru> <20200429090750.42741-2-alexey@prokhin.ru> Alexey Prokhin wrote: > if (status == STATUS_TIMEOUT) SetLastError( WAIT_TIMEOUT ); > + else if (status == ERROR_WAIT_NO_CHILDREN) 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 == ERROR_WAIT_NO_CHILDREN) SetLastError( ERROR_ABANDONED_WAIT_0 ); > else SetLastError( RtlNtStatusToDosError(ret) ); > return FALSE; > } Probably 'ret' should be checked for appropriate STATUS_xxx code, accidently ERROR_WAIT_NO_CHILDREN is equal STATUS_ABANDONED_WAIT_0. -- Dmitry.