diff options
Diffstat (limited to 'tests')
-rw-r--r-- | tests/libqtest.c | 22 |
1 files changed, 11 insertions, 11 deletions
diff --git a/tests/libqtest.c b/tests/libqtest.c index 359d571..dd93be8 100644 --- a/tests/libqtest.c +++ b/tests/libqtest.c @@ -43,8 +43,8 @@ struct QTestState int qmp_fd; bool irq_level[MAX_IRQ]; GString *rx; - gchar *pid_file; /* QEMU PID file */ int child_pid; /* Child process created to execute QEMU */ + pid_t qemu_pid; /* QEMU process spawned by our child */ char *socket_path, *qmp_socket_path; }; @@ -90,13 +90,13 @@ static int socket_accept(int sock) return ret; } -static pid_t qtest_qemu_pid(QTestState *s) +static pid_t read_pid_file(const char *pid_file) { FILE *f; char buffer[1024]; pid_t pid = -1; - f = fopen(s->pid_file, "r"); + f = fopen(pid_file, "r"); if (f) { if (fgets(buffer, sizeof(buffer), f)) { pid = atoi(buffer); @@ -147,7 +147,6 @@ QTestState *qtest_init(const char *extra_args) s->qmp_fd = socket_accept(qmpsock); s->rx = g_string_new(""); - s->pid_file = pid_file; s->child_pid = pid; for (i = 0; i < MAX_IRQ; i++) { s->irq_level[i] = false; @@ -157,8 +156,12 @@ QTestState *qtest_init(const char *extra_args) qtest_qmp_discard_response(s, ""); qtest_qmp_discard_response(s, "{ 'execute': 'qmp_capabilities' }"); + s->qemu_pid = read_pid_file(pid_file); + unlink(pid_file); + g_free(pid_file); + if (getenv("QTEST_STOP")) { - kill(qtest_qemu_pid(s), SIGSTOP); + kill(s->qemu_pid, SIGSTOP); } return s; @@ -168,19 +171,16 @@ void qtest_quit(QTestState *s) { int status; - pid_t pid = qtest_qemu_pid(s); - if (pid != -1) { - kill(pid, SIGTERM); - waitpid(pid, &status, 0); + if (s->qemu_pid != -1) { + kill(s->qemu_pid, SIGTERM); + waitpid(s->qemu_pid, &status, 0); } close(s->fd); close(s->qmp_fd); g_string_free(s->rx, true); - unlink(s->pid_file); unlink(s->socket_path); unlink(s->qmp_socket_path); - g_free(s->pid_file); g_free(s->socket_path); g_free(s->qmp_socket_path); g_free(s); |