mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2024-11-10 11:26:16 +01:00
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:
commit
4d12174663
@ -67,7 +67,7 @@ gio_tests = {
|
||||
'sleepy-stream' : {},
|
||||
'socket' : {},
|
||||
'socket-listener' : {},
|
||||
'socket-service' : { 'suite': ['flaky'] },
|
||||
'socket-service' : {},
|
||||
'srvtarget' : {},
|
||||
'task' : {},
|
||||
'vfs' : {},
|
||||
|
@ -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.)
|
||||
*/
|
||||
|
Loading…
Reference in New Issue
Block a user