Commit f25c3f27 authored by Philip Withnall's avatar Philip Withnall

tests: Fix unlikely race in socket-service test

It’s occasionally possible for the cancellation of the service to happen
before connection_cb() gets scheduled in the other thread. The
locking/unlocking order of mutex_712570 requires:
 • test_threaded_712570(): lock mutex
 • test_threaded_712570(): start wait loop
 • connection_cb(): lock mutex
 • test_threaded_socket_service_finalize(): unlock mutex
 • test_threaded_712570(): end wait loop
 • test_threaded_712570(): unlock mutex

Fix that by quitting the main loop once connection_cb() has been called
(i.e. once the server thread has received the incoming connection
request), rather than just after the client thread (main thread) has
sent a connection request.
Signed-off-by: Philip Withnall's avatarPhilip Withnall <withnall@endlessm.com>

Helps: #1679
parent 2aea9c84
......@@ -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,
......
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