Am 13.01.2012 19:32, schrieb Anthony Liguori: > This also includes a qtest wrapper script to make it easier to launch qtest > tests directly. > > Signed-off-by: Anthony Liguori <aligu...@us.ibm.com>
> +QTestState *qtest_init(const char *extra_args) > +{ > + QTestState *s; > + struct sockaddr_un addr; > + int sock, ret, i; > + gchar *socket_path; > + gchar *pid_file; > + gchar *command; > + const char *qemu_binary; > + pid_t pid; > + > + qemu_binary = getenv("QTEST_QEMU_BINARY"); > + g_assert(qemu_binary != NULL); > + > + socket_path = g_strdup_printf("/tmp/qtest-%d.sock", getpid()); > + pid_file = g_strdup_printf("/tmp/qtest-%d.pid", getpid()); > + > + s = g_malloc(sizeof(*s)); > + > + sock = socket(PF_UNIX, SOCK_STREAM, 0); > + g_assert_no_errno(sock); > + > + addr.sun_family = AF_UNIX; > + snprintf(addr.sun_path, sizeof(addr.sun_path), "%s", socket_path); > + > + pid = fork(); > + if (pid == 0) { > + command = g_strdup_printf("%s " > + "-qtest unix:%s,server,nowait " > + "-qtest-log /dev/null " > + "-pidfile %s " > + "-machine accel=qtest " > + "%s", qemu_binary, socket_path, > + pid_file, > + extra_args ?: ""); > + > + ret = system(command); > + exit(ret); > + g_free(command); > + } > + > + do { > + sleep(1); This is the line that takes the greatest part of the time for make check-qtest. Can we use some shorter delay if it's required at all? > + ret = connect(sock, (struct sockaddr *)&addr, sizeof(addr)); > + } while (ret == -1); > + g_assert_no_errno(ret); > + > + s->fd = sock; > + s->rx = g_string_new(""); > + s->pid_file = pid_file; > + for (i = 0; i < MAX_IRQ; i++) { > + s->irq_level[i] = false; > + } > + > + g_free(socket_path); > + > + return s; > +} Kevin