mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-01-12 23:46:17 +01:00
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.
This commit is contained in:
parent
1a73410a96
commit
7aa83536af
@ -808,11 +808,19 @@ proxy_ready (GObject *source,
|
|||||||
{
|
{
|
||||||
GDBusProxy *proxy;
|
GDBusProxy *proxy;
|
||||||
GError *error;
|
GError *error;
|
||||||
|
gchar *owner;
|
||||||
|
|
||||||
error = NULL;
|
error = NULL;
|
||||||
proxy = g_dbus_proxy_new_for_bus_finish (result, &error);
|
proxy = g_dbus_proxy_new_for_bus_finish (result, &error);
|
||||||
g_assert_no_error (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");
|
_g_assert_property_notify (proxy, "g-name-owner");
|
||||||
|
|
||||||
test_basic (proxy);
|
test_basic (proxy);
|
||||||
@ -847,9 +855,6 @@ test_async (void)
|
|||||||
proxy_ready,
|
proxy_ready,
|
||||||
NULL);
|
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);
|
id = g_timeout_add (10000, fail_test, NULL);
|
||||||
g_main_loop_run (loop);
|
g_main_loop_run (loop);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user