mirror of
https://github.com/arun11299/cpp-subprocess.git
synced 2025-08-04 12:26:19 -04:00
Proper implementation of wait() on Windows
This commit makes sure: 1. WaitForSingleObject returns with expected code before proceeding. 2. Process handle is properly closed.
This commit is contained in:
parent
ed313971c0
commit
bdba84fdf6
@ -1423,11 +1423,18 @@ inline int Popen::wait() noexcept(false)
|
|||||||
#ifdef __USING_WINDOWS__
|
#ifdef __USING_WINDOWS__
|
||||||
int ret = WaitForSingleObject(process_handle_, INFINITE);
|
int ret = WaitForSingleObject(process_handle_, INFINITE);
|
||||||
|
|
||||||
|
// WaitForSingleObject with INFINITE should only return when process has signaled
|
||||||
|
if (ret != WAIT_OBJECT_0) {
|
||||||
|
throw OSError("Unexpected return code from WaitForSingleObject", 0);
|
||||||
|
}
|
||||||
|
|
||||||
DWORD dretcode_;
|
DWORD dretcode_;
|
||||||
|
|
||||||
if (FALSE == GetExitCodeProcess(process_handle_, &dretcode_))
|
if (FALSE == GetExitCodeProcess(process_handle_, &dretcode_))
|
||||||
throw OSError("Failed during call to GetExitCodeProcess", 0);
|
throw OSError("Failed during call to GetExitCodeProcess", 0);
|
||||||
|
|
||||||
|
CloseHandle(process_handle_);
|
||||||
|
|
||||||
return (int)dretcode_;
|
return (int)dretcode_;
|
||||||
#else
|
#else
|
||||||
int ret, status;
|
int ret, status;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user