[Spice-devel] [PATCH spice-server 28/33] test-display-base: Port to Windows
Frediano Ziglio
fziglio at redhat.com
Fri Dec 21 12:03:16 UTC 2018
Use GLib function to launch and wait process exit.
Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
---
server/tests/regression-test.py | 4 ++--
server/tests/test-display-base.c | 37 +++++++++++++++-----------------
2 files changed, 19 insertions(+), 22 deletions(-)
diff --git a/server/tests/regression-test.py b/server/tests/regression-test.py
index 5aad1a7b..81eaecf1 100755
--- a/server/tests/regression-test.py
+++ b/server/tests/regression-test.py
@@ -1,7 +1,7 @@
#!/usr/bin/python
from subprocess import PIPE, Popen
-import Image
-import ImageChops
+from PIL import Image
+from PIL import ImageChops
def spicy_screenshot():
diff --git a/server/tests/test-display-base.c b/server/tests/test-display-base.c
index 868521bc..ecf40e4a 100644
--- a/server/tests/test-display-base.c
+++ b/server/tests/test-display-base.c
@@ -91,17 +91,19 @@ static int has_automated_tests = 0; //automated test flag
// between multiple threads so use a mutex
static pthread_mutex_t timer_mutex = PTHREAD_MUTEX_INITIALIZER;
-__attribute__((noreturn))
-static void sigchld_handler(SPICE_GNUC_UNUSED int signal_num) // wait for the child process and exit
+// wait for the child process and exit
+static void child_exited(GPid pid, gint status, gpointer user_data)
{
- int status;
- wait(&status);
+ g_spawn_close_pid(pid);
exit(0);
}
static void regression_test(void)
{
- pid_t pid;
+ GPid pid;
+ GError *error = NULL;
+ gboolean retval;
+ gchar **argv;
if (--rects != 0) {
return;
@@ -113,17 +115,17 @@ static void regression_test(void)
return;
}
- pid = fork();
- if (pid == 0) {
- char buf[PATH_MAX];
- char *argv[] = { NULL };
- char *envp[] = {buf, NULL};
+ argv = g_strsplit("./regression-test.py", " ", -1);
+ retval = g_spawn_async(NULL, argv, NULL, G_SPAWN_SEARCH_PATH|G_SPAWN_DO_NOT_REAP_CHILD,
+ NULL, NULL, &pid, &error);
+ g_strfreev(argv);
+ g_assert(retval);
- snprintf(buf, sizeof(buf), "PATH=%s", getenv("PATH"));
- execve("regression-test.py", argv, envp);
- } else if (pid > 0) {
- return;
- }
+ GSource *source = g_child_watch_source_new(pid);
+ g_source_set_callback(source, (GSourceFunc)(void*)child_exited, NULL, NULL);
+ guint id = g_source_attach(source, basic_event_loop_get_context());
+ g_assert(id != 0);
+ g_source_unref(source);
}
static void set_cmd(QXLCommandExt *ext, uint32_t type, QXLPHYSICAL data)
@@ -969,11 +971,6 @@ void test_destroy(Test *test)
static void init_automated(void)
{
- struct sigaction sa;
-
- memset(&sa, 0, sizeof sa);
- sa.sa_handler = &sigchld_handler;
- sigaction(SIGCHLD, &sa, NULL);
}
static __attribute__((noreturn))
--
2.17.2
More information about the Spice-devel
mailing list