Merge branch '1679-socket-service-flaky' into 'master'

Resolve "socket-service test is flaky"

Closes #1679

See merge request GNOME/glib!687
This commit is contained in:
Michael Catanzaro 2019-02-22 01:33:50 +00:00
commit 4d12174663
2 changed files with 13 additions and 5 deletions

View File

@ -67,7 +67,7 @@ gio_tests = {
'sleepy-stream' : {},
'socket' : {},
'socket-listener' : {},
'socket-service' : { 'suite': ['flaky'] },
'socket-service' : {},
'srvtarget' : {},
'task' : {},
'vfs' : {},

View File

@ -139,6 +139,12 @@ connection_cb (GThreadedSocketService *service,
GObject *source_object,
gpointer user_data)
{
GMainLoop *loop = user_data;
/* Since the connection attempt has come through to be handled, stop the main
* thread waiting for it; this causes the #GSocketService to be stopped. */
g_main_loop_quit (loop);
/* Block until the main thread has dropped its ref to @service, so that we
* will drop the final ref from this thread.
*/
@ -158,7 +164,6 @@ client_connected_cb (GObject *client,
GAsyncResult *result,
gpointer user_data)
{
GMainLoop *loop = user_data;
GSocketConnection *conn;
GError *error = NULL;
@ -166,7 +171,6 @@ client_connected_cb (GObject *client,
g_assert_no_error (error);
g_object_unref (conn);
g_main_loop_quit (loop);
}
static void
@ -195,9 +199,8 @@ test_threaded_712570 (void)
g_assert_no_error (error);
g_object_unref (addr);
g_signal_connect (service, "run", G_CALLBACK (connection_cb), NULL);
loop = g_main_loop_new (NULL, FALSE);
g_signal_connect (service, "run", G_CALLBACK (connection_cb), loop);
client = g_socket_client_new ();
g_socket_client_connect_async (client,
@ -222,6 +225,11 @@ test_threaded_712570 (void)
g_main_context_iteration (NULL, TRUE);
while (G_OBJECT (service)->ref_count > 3);
/* Wait some more iterations, as #GTask results are deferred to the next
* #GMainContext iteration, and propagation of a #GTask result takes an
* additional ref on the source object. */
g_main_context_iteration (NULL, FALSE);
/* Drop our ref, then unlock the mutex and wait for the service to be
* finalized. (Without the fix for 712570 it would hang forever here.)
*/