diff --git a/gio/tests/gdbus-peer.c b/gio/tests/gdbus-peer.c index 770c6978b..d7d345f93 100644 --- a/gio/tests/gdbus-peer.c +++ b/gio/tests/gdbus-peer.c @@ -437,53 +437,9 @@ static gpointer service_thread_func (gpointer user_data) { PeerData *data = user_data; - GDBusAuthObserver *observer, *o; - GError *error; - GDBusServerFlags f; - gchar *a, *g; - gboolean b; g_main_context_push_thread_default (data->service_context); - error = NULL; - observer = g_dbus_auth_observer_new (); - server = g_dbus_server_new_sync (tmp_address, - G_DBUS_SERVER_FLAGS_NONE, - test_guid, - observer, - NULL, /* cancellable */ - &error); - g_assert_no_error (error); - - g_signal_connect (server, - "new-connection", - G_CALLBACK (on_new_connection), - data); - g_signal_connect (observer, - "authorize-authenticated-peer", - G_CALLBACK (on_authorize_authenticated_peer), - data); - - g_assert_cmpint (g_dbus_server_get_flags (server), ==, G_DBUS_SERVER_FLAGS_NONE); - g_assert_cmpstr (g_dbus_server_get_guid (server), ==, test_guid); - g_object_get (server, - "flags", &f, - "address", &a, - "guid", &g, - "active", &b, - "authentication-observer", &o, - NULL); - g_assert_cmpint (f, ==, G_DBUS_SERVER_FLAGS_NONE); - g_assert_cmpstr (a, ==, tmp_address); - g_assert_cmpstr (g, ==, test_guid); - g_assert (!b); - g_assert (o == observer); - g_free (a); - g_free (g); - g_object_unref (o); - - g_object_unref (observer); - g_dbus_server_start (server); run_service_loop (data->service_context); @@ -733,6 +689,54 @@ do_test_peer (void) g_clear_error (&error); g_assert (c == NULL); + g_main_context_push_thread_default (data.service_context); + { + GDBusAuthObserver *observer, *o; + GDBusServerFlags f; + gchar *a, *g; + gboolean b; + + error = NULL; + observer = g_dbus_auth_observer_new (); + server = g_dbus_server_new_sync (tmp_address, + G_DBUS_SERVER_FLAGS_NONE, + test_guid, + observer, + NULL, /* cancellable */ + &error); + g_assert_no_error (error); + + g_signal_connect (server, + "new-connection", + G_CALLBACK (on_new_connection), + &data); + g_signal_connect (observer, + "authorize-authenticated-peer", + G_CALLBACK (on_authorize_authenticated_peer), + &data); + + g_assert_cmpint (g_dbus_server_get_flags (server), ==, G_DBUS_SERVER_FLAGS_NONE); + g_assert_cmpstr (g_dbus_server_get_guid (server), ==, test_guid); + g_object_get (server, + "flags", &f, + "address", &a, + "guid", &g, + "active", &b, + "authentication-observer", &o, + NULL); + g_assert_cmpint (f, ==, G_DBUS_SERVER_FLAGS_NONE); + g_assert_cmpstr (a, ==, tmp_address); + g_assert_cmpstr (g, ==, test_guid); + g_assert (!b); + g_assert (o == observer); + g_free (a); + g_free (g); + g_object_unref (o); + + g_object_unref (observer); + } + g_main_context_pop_thread_default (data.service_context); + /* bring up a server - we run the server in a different thread to avoid deadlocks */ service_thread = g_thread_new ("test_peer", service_thread_func, @@ -1229,25 +1233,9 @@ static gpointer dmp_thread_func (gpointer user_data) { DmpData *data = user_data; - GError *error; - gchar *guid; g_main_context_push_thread_default (data->context); - error = NULL; - guid = g_dbus_generate_guid (); - data->server = g_dbus_server_new_sync (tmp_address, - G_DBUS_SERVER_FLAGS_NONE, - guid, - NULL, /* GDBusAuthObserver */ - NULL, /* GCancellable */ - &error); - g_assert_no_error (error); - g_signal_connect (data->server, - "new-connection", - G_CALLBACK (dmp_on_new_connection), - data); - g_dbus_server_start (data->server); data->loop = g_main_loop_new (data->context, FALSE); @@ -1256,7 +1244,6 @@ dmp_thread_func (gpointer user_data) g_dbus_server_stop (data->server); g_main_context_pop_thread_default (data->context); - g_free (guid); return NULL; } @@ -1276,10 +1263,27 @@ delayed_message_processing (void) data = g_new0 (DmpData, 1); data->context = g_main_context_new (); + g_main_context_push_thread_default (data->context); + { + error = NULL; + data->server = g_dbus_server_new_sync (tmp_address, + G_DBUS_SERVER_FLAGS_NONE, + test_guid, + NULL, /* GDBusAuthObserver */ + NULL, /* GCancellable */ + &error); + g_assert_no_error (error); + g_signal_connect (data->server, + "new-connection", + G_CALLBACK (dmp_on_new_connection), + data); + } + g_main_context_pop_thread_default (data->context); + service_thread = g_thread_new ("dmp", dmp_thread_func, data); - while (data->server == NULL || !g_dbus_server_is_active (data->server)) + while (!g_dbus_server_is_active (data->server)) g_thread_yield (); for (n = 0; n < 5; n++) @@ -1366,31 +1370,9 @@ static gpointer nonce_tcp_service_thread_func (gpointer user_data) { PeerData *data = user_data; - GDBusAuthObserver *observer; - GError *error; g_main_context_push_thread_default (data->service_context); - error = NULL; - observer = g_dbus_auth_observer_new (); - server = g_dbus_server_new_sync ("nonce-tcp:", - G_DBUS_SERVER_FLAGS_NONE, - test_guid, - observer, - NULL, /* cancellable */ - &error); - g_assert_no_error (error); - - g_signal_connect (server, - "new-connection", - G_CALLBACK (nonce_tcp_on_new_connection), - data); - g_signal_connect (observer, - "authorize-authenticated-peer", - G_CALLBACK (nonce_tcp_on_authorize_authenticated_peer), - data); - g_object_unref (observer); - g_dbus_server_start (server); run_service_loop (data->service_context); @@ -1426,6 +1408,33 @@ test_nonce_tcp (void) error = NULL; server = NULL; + + g_main_context_push_thread_default (data.service_context); + { + GDBusAuthObserver *observer; + + error = NULL; + observer = g_dbus_auth_observer_new (); + server = g_dbus_server_new_sync ("nonce-tcp:", + G_DBUS_SERVER_FLAGS_NONE, + test_guid, + observer, + NULL, /* cancellable */ + &error); + g_assert_no_error (error); + + g_signal_connect (server, + "new-connection", + G_CALLBACK (nonce_tcp_on_new_connection), + &data); + g_signal_connect (observer, + "authorize-authenticated-peer", + G_CALLBACK (nonce_tcp_on_authorize_authenticated_peer), + &data); + g_object_unref (observer); + } + g_main_context_pop_thread_default (data.service_context); + service_thread = g_thread_new ("nonce-tcp-service", nonce_tcp_service_thread_func, &data); @@ -1576,24 +1585,9 @@ static gpointer tcp_anonymous_service_thread_func (gpointer user_data) { PeerData *data = user_data; - GError *error; g_main_context_push_thread_default (data->service_context); - error = NULL; - server = g_dbus_server_new_sync ("tcp:", - G_DBUS_SERVER_FLAGS_AUTHENTICATION_ALLOW_ANONYMOUS, - test_guid, - NULL, /* GDBusObserver* */ - NULL, /* GCancellable* */ - &error); - g_assert_no_error (error); - - g_signal_connect (server, - "new-connection", - G_CALLBACK (tcp_anonymous_on_new_connection), - data); - g_dbus_server_start (server); run_service_loop (data->service_context); @@ -1620,6 +1614,24 @@ test_tcp_anonymous (void) test_guid = g_dbus_generate_guid (); loop = g_main_loop_new (NULL, FALSE); + g_main_context_push_thread_default (data.service_context); + { + error = NULL; + server = g_dbus_server_new_sync ("tcp:", + G_DBUS_SERVER_FLAGS_AUTHENTICATION_ALLOW_ANONYMOUS, + test_guid, + NULL, /* GDBusObserver* */ + NULL, /* GCancellable* */ + &error); + g_assert_no_error (error); + + g_signal_connect (server, + "new-connection", + G_CALLBACK (tcp_anonymous_on_new_connection), + &data); + } + g_main_context_pop_thread_default (data.service_context); + service_thread = g_thread_new ("tcp-anon-service", tcp_anonymous_service_thread_func, &data); @@ -1732,37 +1744,14 @@ codegen_on_new_connection (GDBusServer *server, static gpointer codegen_service_thread_func (gpointer user_data) { - PeerData *peer_data = user_data; - ExampleAnimal *animal; - GError *error = NULL; + PeerData *data = user_data; g_main_context_push_thread_default (data->service_context); - /* Create the animal in the right thread context */ - animal = example_animal_skeleton_new (); - - /* Handle Poke() D-Bus method invocations on the .Animal interface */ - g_signal_connect (animal, "handle-poke", - G_CALLBACK (codegen_on_animal_poke), - NULL); /* user_data */ - - codegen_server = g_dbus_server_new_sync (tmp_address, - G_DBUS_SERVER_FLAGS_NONE, - test_guid, - NULL, /* observer */ - NULL, /* cancellable */ - &error); - g_assert_no_error (error); g_dbus_server_start (codegen_server); - g_signal_connect (codegen_server, "new-connection", - G_CALLBACK (codegen_on_new_connection), - animal); - run_service_loop (data->service_context); - g_object_unref (animal); - g_main_context_pop_thread_default (data->service_context); teardown_service_loop (); @@ -1792,6 +1781,7 @@ codegen_test_peer (void) GError *error = NULL; GVariant *value; const gchar *s; + ExampleAnimal *animal; memset (&data, '\0', sizeof (PeerData)); data.service_context = g_main_context_new (); @@ -1802,6 +1792,30 @@ codegen_test_peer (void) setup_test_address (); /* bring up a server - we run the server in a different thread to avoid deadlocks */ + g_main_context_push_thread_default (data.service_context); + { + /* Create the animal in the right thread context */ + animal = example_animal_skeleton_new (); + + /* Handle Poke() D-Bus method invocations on the .Animal interface */ + g_signal_connect (animal, "handle-poke", + G_CALLBACK (codegen_on_animal_poke), + NULL); /* user_data */ + + codegen_server = g_dbus_server_new_sync (tmp_address, + G_DBUS_SERVER_FLAGS_NONE, + test_guid, + NULL, /* observer */ + NULL, /* cancellable */ + &error); + g_assert_no_error (error); + + g_signal_connect (codegen_server, "new-connection", + G_CALLBACK (codegen_on_new_connection), + animal); + } + g_main_context_pop_thread_default (data.service_context); + service_thread = g_thread_new ("codegen_test_peer", codegen_service_thread_func, NULL); @@ -1907,6 +1921,7 @@ codegen_test_peer (void) teardown_test_address (); + g_object_unref (animal); g_main_loop_unref (loop); g_free (test_guid); g_main_context_unref (data.service_context);