Tests can fail (seen on slow VMs) because `GetExitCodeProcess` is called before the child process is marked as terminated. `STILL_ACTIVE` is returned instead of the expected `1`.
dlls/kernel32/tests/loader.c#L3984 does a similar thing.
From: Anders Kjersem andersdev@proton.me
--- programs/reg/tests/add.c | 3 +++ 1 file changed, 3 insertions(+)
diff --git a/programs/reg/tests/add.c b/programs/reg/tests/add.c index ae9c79b07ec..6e095920464 100644 --- a/programs/reg/tests/add.c +++ b/programs/reg/tests/add.c @@ -37,7 +37,10 @@ BOOL run_reg_exe_(const char *file, unsigned line, const char *cmd, DWORD *rc)
ret = WaitForSingleObject(pi.hProcess, 10000); if (ret == WAIT_TIMEOUT) + { TerminateProcess(pi.hProcess, 1); + WaitForSingleObject(pi.hProcess, 3000); + }
bret = GetExitCodeProcess(pi.hProcess, rc); lok(bret, "GetExitCodeProcess failed: %ld\n", GetLastError());