Browse Source

tests/qtest: Use exit-with-parent=on in qtest invocations

Previously libqtest.c set PR_SET_PDEATHSIG (or the equivalent on
FreeBSD) after forking the qemu subprocess.  However we can get the
same behaviour now by using the new -run-with exit-with-parent=on
flag, on platforms that support it.

Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
Signed-off-by: Richard W.M. Jones <rjones@redhat.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
pull/307/head
Richard W.M. Jones 6 months ago
committed by Daniel P. Berrangé
parent
commit
b433ca56e1
  1. 22
      tests/qtest/libqtest.c

22
tests/qtest/libqtest.c

@ -33,6 +33,7 @@
#include "qemu/accel.h" #include "qemu/accel.h"
#include "qemu/ctype.h" #include "qemu/ctype.h"
#include "qemu/cutils.h" #include "qemu/cutils.h"
#include "qemu/exit-with-parent.h"
#include "qemu/sockets.h" #include "qemu/sockets.h"
#include "qobject/qdict.h" #include "qobject/qdict.h"
#include "qobject/qjson.h" #include "qobject/qjson.h"
@ -433,24 +434,6 @@ static QTestState *qtest_spawn_qemu(const char *qemu_bin, const char *args,
#ifndef _WIN32 #ifndef _WIN32
pid = fork(); pid = fork();
if (pid == 0) { if (pid == 0) {
#ifdef __linux__
/*
* Although we register a ABRT handler to kill off QEMU
* when g_assert() triggers, we want an extra safety
* net. The QEMU process might be non-functional and
* thus not have responded to SIGTERM. The test script
* might also have crashed with SEGV, in which case the
* cleanup handlers won't ever run.
*
* This PR_SET_PDEATHSIG setup will ensure any remaining
* QEMU will get terminated with SIGKILL in these cases.
*/
prctl(PR_SET_PDEATHSIG, SIGKILL, 0, 0, 0);
#endif /* __linux__ */
#ifdef __FreeBSD__
int sig = SIGKILL;
procctl(P_PID, getpid(), PROC_PDEATHSIG_CTL, &sig);
#endif /* __FreeBSD__ */
execlp("/bin/sh", "sh", "-c", command->str, NULL); execlp("/bin/sh", "sh", "-c", command->str, NULL);
exit(1); exit(1);
} }
@ -482,12 +465,15 @@ gchar *qtest_qemu_args(const char *extra_args)
"-display none " "-display none "
"-audio none " "-audio none "
"%s" "%s"
"%s"
" -accel qtest", " -accel qtest",
tracearg, tracearg,
socket_path, socket_path,
getenv("QTEST_LOG") ? DEV_STDERR : DEV_NULL, getenv("QTEST_LOG") ? DEV_STDERR : DEV_NULL,
qmp_socket_path, qmp_socket_path,
can_exit_with_parent() ?
"-run-with exit-with-parent=on " : "",
extra_args ?: ""); extra_args ?: "");
return args; return args;

Loading…
Cancel
Save