[glib: 1/3] gio/tests/gdbus-proxy: Make `proxy_ready` test start the server after the proxy
- From: Philip Withnall <pwithnall src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [glib: 1/3] gio/tests/gdbus-proxy: Make `proxy_ready` test start the server after the proxy
- Date: Fri, 25 Jan 2019 14:42:23 +0000 (UTC)
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]