Skip to content

Commit

Permalink
qtest: don't use system command to avoid double fork
Browse files Browse the repository at this point in the history
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
  • Loading branch information
Anthony Liguori committed Apr 17, 2013
1 parent 4aead69 commit 8a8fd63
Showing 1 changed file with 4 additions and 7 deletions.
11 changes: 4 additions & 7 deletions tests/libqtest.c
Expand Up @@ -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;
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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);
Expand Down

0 comments on commit 8a8fd63

Please sign in to comment.