test-utils-glib: Wait for the killed process to exit
authorSimon McVittie <simon.mcvittie@collabora.co.uk>
Tue, 14 Feb 2017 19:40:28 +0000 (19:40 +0000)
committerSimon McVittie <simon.mcvittie@collabora.co.uk>
Tue, 21 Feb 2017 11:57:15 +0000 (11:57 +0000)
Otherwise, removing transient service directories that are being
watched by the dbus-daemon can fail with EAGAIN.

Bug: https://bugs.freedesktop.org/show_bug.cgi?id=99825
Reviewed-by: Philip Withnall <withnall@endlessm.com>
Signed-off-by: Simon McVittie <simon.mcvittie@collabora.co.uk>
test/test-utils-glib.c

index c5059ed..fac5dda 100644 (file)
@@ -418,9 +418,25 @@ test_connect_to_bus_as_user (TestMainContext *ctx,
 #endif
 }
 
+static void
+pid_died (GPid pid,
+          gint status,
+          gpointer user_data)
+{
+  gboolean *result = user_data;
+
+  g_assert (result != NULL);
+  g_assert (!*result);
+  *result = TRUE;
+}
+
 void
 test_kill_pid (GPid pid)
 {
+  gint died = FALSE;
+
+  g_child_watch_add (pid, pid_died, &died);
+
 #ifdef DBUS_WIN
   if (pid != NULL)
     TerminateProcess (pid, 1);
@@ -428,6 +444,9 @@ test_kill_pid (GPid pid)
   if (pid > 0)
     kill (pid, SIGTERM);
 #endif
+
+  while (!died)
+    g_main_context_iteration (NULL, TRUE);
 }
 
 static gboolean