3
0
mirror of https://git.kernel.org/pub/scm/network/wireless/iwd.git synced 2024-12-19 10:02:33 +01:00

test-runner: use WNOHANG option waiting for PID

If an application has a bug and hangs on SIGTERM this causes
test-runner to hang as well. This is obviously an issue with
the application in question, but test-runner should have a way
of continuing onto the next test rather than hanging.

Instead we can use WNOHANG and a sleep to allow applications
some amount of time to exit, and if they haven't use SIGKILL
instead as well as print an error. Similar to how
wait_for_socket works. The timeout is hard coded to 2 seconds
(100ms sleep + 20 iterations).
This commit is contained in:
James Prestwood 2020-06-22 08:50:50 -07:00 committed by Denis Kenzior
parent 6c9c65a5de
commit f7c036a801

View File

@ -624,14 +624,24 @@ exit:
static void kill_process(pid_t pid)
{
int status;
int i = 0;
l_debug("Terminate pid: %d", pid);
kill(pid, SIGTERM);
do {
waitpid(pid, &status, 0);
} while (!WIFEXITED(status) && !WIFSIGNALED(status));
if (waitpid(pid, &status, WNOHANG) == pid)
return;
usleep(100000);
} while (!WIFEXITED(status) && !WIFSIGNALED(status) && i++ < 20);
l_error("Failed to kill process %d gracefully", pid);
kill(pid, SIGKILL);
/* SIGKILL shouldn't need WNOHANG */
waitpid(pid, &status, 0);
}
static bool wait_for_socket(const char *socket, useconds_t wait_time)