diff options
author | Maciej S. Szmigiero <mail@maciej.szmigiero.name> | 2022-10-09 18:34:18 +0200 |
---|---|---|
committer | Maciej S. Szmigiero <mail@maciej.szmigiero.name> | 2022-10-11 14:51:41 +0200 |
commit | 3689c50e15b7e67017f961f66605d2de68c08a64 (patch) | |
tree | 6ae53ea2bd9d6105790914f85d3ac57be0f9ea5f /src/gclue-service-manager.c | |
parent | 913c5288263c48928706354f2798367eeb54ccd9 (diff) | |
download | geoclue-3689c50e15b7e67017f961f66605d2de68c08a64.tar.gz |
Make sure signals aren't left connected after handler object is gone
Diffstat (limited to 'src/gclue-service-manager.c')
-rw-r--r-- | src/gclue-service-manager.c | 35 |
1 files changed, 18 insertions, 17 deletions
diff --git a/src/gclue-service-manager.c b/src/gclue-service-manager.c index ba06c35..e038b7c 100644 --- a/src/gclue-service-manager.c +++ b/src/gclue-service-manager.c @@ -228,15 +228,15 @@ complete_get_client (OnClientInfoNewReadyData *data) } g_debug ("Number of connected clients: %u", priv->num_clients); - g_signal_connect (client, - "notify::active", - G_CALLBACK (on_client_notify_active), - data->manager); + g_signal_connect_object (client, + "notify::active", + G_CALLBACK (on_client_notify_active), + data->manager, 0); - g_signal_connect (info, - "peer-vanished", - G_CALLBACK (on_peer_vanished), - data->manager); + g_signal_connect_object (info, + "peer-vanished", + G_CALLBACK (on_peer_vanished), + data->manager, 0); client_created: if (data->reuse_client) @@ -434,6 +434,7 @@ static void add_agent_data_free (AddAgentData *data) { g_clear_pointer (&data->desktop_id, g_free); + g_clear_object (&data->manager); g_slice_free (AddAgentData, data); } @@ -470,10 +471,10 @@ on_agent_proxy_ready (GObject *source_object, g_debug ("New agent for user ID '%u'", user_id); g_hash_table_replace (priv->agents, GINT_TO_POINTER (user_id), agent); - g_signal_connect (data->info, - "peer-vanished", - G_CALLBACK (on_agent_vanished), - data->manager); + g_signal_connect_object (data->info, + "peer-vanished", + G_CALLBACK (on_agent_vanished), + data->manager, 0); gclue_dbus_manager_complete_add_agent (data->manager, data->invocation); @@ -564,7 +565,7 @@ gclue_service_manager_handle_add_agent (GClueDBusManager *manager, peer = g_dbus_method_invocation_get_sender (invocation); data = g_slice_new0 (AddAgentData); - data->manager = manager; + data->manager = g_object_ref (manager); data->invocation = invocation; data->desktop_id = g_strdup (id); gclue_client_info_new_async (peer, @@ -659,10 +660,10 @@ gclue_service_manager_constructed (GObject *object) G_OBJECT_CLASS (gclue_service_manager_parent_class)->constructed (object); priv->locator = gclue_locator_new (GCLUE_ACCURACY_LEVEL_EXACT); - g_signal_connect (G_OBJECT (priv->locator), - "notify::available-accuracy-level", - G_CALLBACK (on_avail_accuracy_level_changed), - object); + g_signal_connect_object (G_OBJECT (priv->locator), + "notify::available-accuracy-level", + G_CALLBACK (on_avail_accuracy_level_changed), + object, 0); on_avail_accuracy_level_changed (G_OBJECT (priv->locator), NULL, object); |