[glib: 1/3] gio/tests/gdbus-proxy: Make `proxy_ready` test start the server after the proxy



commit 7aa83536af12caa135979b6539aefb74a58db81a
Author: Iain Lane <iainl gnome org>
Date:   Fri Jan 18 15:20:21 2019 +0000

    gio/tests/gdbus-proxy: Make `proxy_ready` test start the server after the proxy
    
    There's a race here, as revealed by Debian's buildds.
    
    We call g_dbus_proxy_new() to create a proxy for the test server, with
    callback proxy_ready() Then we call g_spawn_command_line_async() to
    start the test server, and then start the main loop.
    
    proxy_ready() assumes that the test server hasn't been started when it
    is called. But there is no guarantee that these asynchronous operations
    involving spawning a process won't happen in a different order that mean
    the bus name *does* have an owner.
    
    What we can do is move starting the server inside of proxy_ready(), so
    we know that the test server isn't started until after the proxy is
    created. We also add an assertion to check that it is indeed not running
    before we execute it.

 gio/tests/gdbus-proxy.c | 11 ++++++++---
 1 file changed, 8 insertions(+), 3 deletions(-)
---
diff --git a/gio/tests/gdbus-proxy.c b/gio/tests/gdbus-proxy.c
index 8a2c324a2..b8d542429 100644
--- a/gio/tests/gdbus-proxy.c
+++ b/gio/tests/gdbus-proxy.c
@@ -808,11 +808,19 @@ proxy_ready (GObject      *source,
 {
   GDBusProxy *proxy;
   GError *error;
+  gchar *owner;
 
   error = NULL;
   proxy = g_dbus_proxy_new_for_bus_finish (result, &error);
   g_assert_no_error (error);
 
+  owner = g_dbus_proxy_get_name_owner (proxy);
+  g_assert_null (owner);
+  g_free (owner);
+
+  /* this is safe; we explicitly kill the service later on */
+  g_assert (g_spawn_command_line_async (g_test_get_filename (G_TEST_BUILT, "gdbus-testserver", NULL), NULL));
+
   _g_assert_property_notify (proxy, "g-name-owner");
 
   test_basic (proxy);
@@ -847,9 +855,6 @@ test_async (void)
                             proxy_ready,
                             NULL);
 
-  /* this is safe; testserver will exit once the bus goes away */
-  g_assert (g_spawn_command_line_async (g_test_get_filename (G_TEST_BUILT, "gdbus-testserver", NULL), NULL));
-
   id = g_timeout_add (10000, fail_test, NULL);
   g_main_loop_run (loop);
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]