Commit 7d6a6ca5 authored by David Zeuthen's avatar David Zeuthen

Bug 627188 – gdbus-non-socket test occasionally fails

Fix logical bug in test case to avoid race condition between the
client and the server.
Signed-off-by: default avatarDavid Zeuthen <davidz@redhat.com>
parent 6c340c0b
...@@ -237,9 +237,20 @@ test_non_socket (void) ...@@ -237,9 +237,20 @@ test_non_socket (void)
stream = my_io_stream_new_for_fds (read_fd, write_fd); stream = my_io_stream_new_for_fds (read_fd, write_fd);
guid = g_dbus_generate_guid (); guid = g_dbus_generate_guid ();
error = NULL; error = NULL;
/* We need to delay message processing to avoid the race
* described in
*
* https://bugzilla.gnome.org/show_bug.cgi?id=627188
*
* This is because (early) dispatching is done on the IO thread
* (method_call() isn't called until we're in the right thread
* though) so in rare cases the parent sends the message before
* we (the child) register the object
*/
connection = g_dbus_connection_new_sync (stream, connection = g_dbus_connection_new_sync (stream,
guid, guid,
G_DBUS_CONNECTION_FLAGS_AUTHENTICATION_SERVER, G_DBUS_CONNECTION_FLAGS_AUTHENTICATION_SERVER |
G_DBUS_CONNECTION_FLAGS_DELAY_MESSAGE_PROCESSING,
NULL, /* GDBusAuthObserver */ NULL, /* GDBusAuthObserver */
NULL, NULL,
&error); &error);
...@@ -250,9 +261,6 @@ test_non_socket (void) ...@@ -250,9 +261,6 @@ test_non_socket (void)
/* make sure we exit along with the parent */ /* make sure we exit along with the parent */
g_dbus_connection_set_exit_on_close (connection, TRUE); g_dbus_connection_set_exit_on_close (connection, TRUE);
/* btw, no need to delay message processing since method
* invocations are delivered via the main loop
*/
error = NULL; error = NULL;
g_dbus_connection_register_object (connection, g_dbus_connection_register_object (connection,
"/pokee", "/pokee",
...@@ -263,6 +271,9 @@ test_non_socket (void) ...@@ -263,6 +271,9 @@ test_non_socket (void)
&error); &error);
g_assert_no_error (error); g_assert_no_error (error);
/* and now start message processing */
g_dbus_connection_start_message_processing (connection);
g_main_loop_run (loop); g_main_loop_run (loop);
g_assert_not_reached (); g_assert_not_reached ();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment