[tools 2/3] testbot/TestLauncher: Simplify waiting for the test process.
Francois Gouget
fgouget at codeweavers.com
Mon Mar 15 13:15:33 CDT 2021
There is no point waiting again after terminating the process.
Make sure to report the WaitForSingleObject() status if the process
exit code is not available.
Signed-off-by: Francois Gouget <fgouget at codeweavers.com>
---
testbot/src/TestLauncher/TestLauncher.c | 48 +++++++------------------
1 file changed, 13 insertions(+), 35 deletions(-)
diff --git a/testbot/src/TestLauncher/TestLauncher.c b/testbot/src/TestLauncher/TestLauncher.c
index 02acde04f..bfc9f0fa4 100644
--- a/testbot/src/TestLauncher/TestLauncher.c
+++ b/testbot/src/TestLauncher/TestLauncher.c
@@ -3,6 +3,7 @@
* Verifies that the dlls needed for the test are present.
*
* Copyright 2009 Ge van Geldorp
+ * Copyright 2012-2021 Francois Gouget
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -295,9 +296,8 @@ int main(int argc, char *argv[])
int CommandLen;
STARTUPINFOA StartupInfo;
PROCESS_INFORMATION ProcessInformation;
- DWORD WaitStatus;
DWORD ExitCode;
-
+
TimeOut = INFINITE;
CommandLine = NULL;
Arg = 1;
@@ -401,54 +401,32 @@ int main(int argc, char *argv[])
fprintf(stderr, "CreateProcess failed with error %lu\n", GetLastError());
exit(1);
}
-
CloseHandle(ProcessInformation.hThread);
- WaitStatus = WaitForSingleObject(ProcessInformation.hProcess, TimeOut);
- if (WaitStatus != WAIT_OBJECT_0)
+
+ ExitCode = WaitForSingleObject(ProcessInformation.hProcess, TimeOut);
+ if (ExitCode != WAIT_OBJECT_0)
{
- switch(WaitStatus)
+ switch (ExitCode)
{
case WAIT_FAILED:
fprintf(stderr, "Wait for child failed, error %lu\n", GetLastError());
break;
case WAIT_TIMEOUT:
+ /* The 'exit code' on the done line identifies timeouts */
break;
default:
- fprintf(stderr, "Unexpected return value %lu from wait for child\n", WaitStatus);
- break;
- }
-
- ExitCode = WaitStatus;
- if (! TerminateProcess(ProcessInformation.hProcess, 257))
- fprintf(stderr, "TerminateProcess failed with error %lu\n", GetLastError());
-
- switch (WaitForSingleObject(ProcessInformation.hProcess, 5000))
- {
- case WAIT_OBJECT_0:
- break;
-
- case WAIT_FAILED:
- fprintf(stderr, "Wait for terminate failed, error %lu\n", GetLastError());
- break;
-
- case WAIT_TIMEOUT:
- fprintf(stderr, "Can't kill child\n");
- break;
-
- default:
- fprintf(stderr, "Unexpected return value %lu from wait for terminate\n", WaitStatus);
+ fprintf(stderr, "Unexpected return value %lu from wait for child\n", ExitCode);
break;
}
+ if (!TerminateProcess(ProcessInformation.hProcess, 257))
+ fprintf(stderr, "TerminateProcess failed, error %lu\n", GetLastError());
}
- else
+ else if (!GetExitCodeProcess(ProcessInformation.hProcess, &ExitCode))
{
- if (! GetExitCodeProcess(ProcessInformation.hProcess, &ExitCode))
- {
- ExitCode = 259;
- fprintf(stderr, "Can't get child exit code, error %lu\n", GetLastError());
- }
+ fprintf(stderr, "Can't get child exit code, error %lu\n", GetLastError());
+ ExitCode = 259;
}
CloseHandle(ProcessInformation.hProcess);
--
2.20.1
More information about the wine-devel
mailing list