Am 28.01.2013 19:15, schrieb Eduardo Habkost: > When running "make check" with gcov enabled, we get the following > message: > > hw/tmp105.gcda:cannot open data file, assuming not executed > > The problem happens because: > > * tmp105-test exits before QEMU exits, because waitpid() at > qtest_quit() fails; > * waitpid() fails because there's another process already > waiting for the QEMU process; > * The process that is already waiting for QEMU is the child created by > qtest_init() to run system(); > * qtest_quit() is incorrectly waiting for the QEMU PID directly instead > of the child created by qtest_init(). > > This fixes the problem by sending SIGTERM to QEMU, but waiting for the > child process created by qtest_init() (that exits immediately after QEMU > exits). > > Reported-by: Andreas Färber <afaer...@suse.de> > Signed-off-by: Eduardo Habkost <ehabk...@redhat.com>
Thanks. Still need to test this... Anthony, might this by any chance fix your sparc 100% CPU issue? Andreas > --- > tests/libqtest.c | 7 +++++-- > 1 file changed, 5 insertions(+), 2 deletions(-) > > diff --git a/tests/libqtest.c b/tests/libqtest.c > index 913fa05..762dec4 100644 > --- a/tests/libqtest.c > +++ b/tests/libqtest.c > @@ -39,7 +39,8 @@ struct QTestState > int qmp_fd; > bool irq_level[MAX_IRQ]; > GString *rx; > - gchar *pid_file; > + gchar *pid_file; /* QEMU PID file */ > + int child_pid; /* Child process created to execute QEMU */ > char *socket_path, *qmp_socket_path; > }; > > @@ -144,6 +145,7 @@ QTestState *qtest_init(const char *extra_args) > > 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; > } > @@ -165,8 +167,9 @@ 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(pid, &status, 0); > + waitpid(s->child_pid, &status, 0); > } > > unlink(s->pid_file); > -- SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg, Germany GF: Jeff Hawn, Jennifer Guild, Felix Imendörffer; HRB 16746 AG Nürnberg