summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnthony Liguori <aliguori@us.ibm.com>2013-04-16 09:45:15 -0500
committerAnthony Liguori <aliguori@us.ibm.com>2013-04-17 10:26:04 -0500
commit8a8fd63734944bf6f7111596bd9cc9db6afb9b7c (patch)
tree28daeaa6f07435d6c6f066309d58238a1b2bbc75
parent4aead69241e010c3cda624084e3872aa9f7dcaef (diff)
downloadqemu-8a8fd63734944bf6f7111596bd9cc9db6afb9b7c.tar.gz
qtest: don't use system command to avoid double fork
Currently we waitpid on the child process we spawn off that does nothing more than system() another process. While this does not appear to be incorrect, it's wasteful and confusing so get rid of it. Signed-off-by: Anthony Liguori <aliguori@us.ibm.com> Message-id: 1366123521-4330-2-git-send-email-aliguori@us.ibm.com
-rw-r--r--tests/libqtest.c11
1 files changed, 4 insertions, 7 deletions
diff --git a/tests/libqtest.c b/tests/libqtest.c
index 389596a055..884f959992 100644
--- a/tests/libqtest.c
+++ b/tests/libqtest.c
@@ -107,7 +107,7 @@ static pid_t qtest_qemu_pid(QTestState *s)
QTestState *qtest_init(const char *extra_args)
{
QTestState *s;
- int sock, qmpsock, ret, i;
+ int sock, qmpsock, i;
gchar *pid_file;
gchar *command;
const char *qemu_binary;
@@ -136,10 +136,8 @@ QTestState *qtest_init(const char *extra_args)
"%s", qemu_binary, s->socket_path,
s->qmp_socket_path, pid_file,
extra_args ?: "");
-
- ret = system(command);
- exit(ret);
- g_free(command);
+ execlp("/bin/sh", "sh", "-c", command, NULL);
+ exit(1);
}
s->fd = socket_accept(sock);
@@ -169,9 +167,8 @@ void qtest_quit(QTestState *s)
pid_t pid = qtest_qemu_pid(s);
if (pid != -1) {
- /* kill QEMU, but wait for the child created by us to run system() */
kill(pid, SIGTERM);
- waitpid(s->child_pid, &status, 0);
+ waitpid(pid, &status, 0);
}
unlink(s->pid_file);