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 | |
parent | 913c5288263c48928706354f2798367eeb54ccd9 (diff) | |
download | geoclue-3689c50e15b7e67017f961f66605d2de68c08a64.tar.gz |
Make sure signals aren't left connected after handler object is gone
-rw-r--r-- | src/gclue-modem-gps.c | 8 | ||||
-rw-r--r-- | src/gclue-modem-manager.c | 19 | ||||
-rw-r--r-- | src/gclue-service-client.c | 8 | ||||
-rw-r--r-- | src/gclue-service-manager.c | 35 | ||||
-rw-r--r-- | src/gclue-wifi.c | 16 |
5 files changed, 44 insertions, 42 deletions
diff --git a/src/gclue-modem-gps.c b/src/gclue-modem-gps.c index ce4967a..c258eda 100644 --- a/src/gclue-modem-gps.c +++ b/src/gclue-modem-gps.c @@ -168,10 +168,10 @@ gclue_modem_gps_init (GClueModemGPS *source) source); threshold = gclue_location_source_get_time_threshold (GCLUE_LOCATION_SOURCE (source)); - g_signal_connect (threshold, - "notify::value", - G_CALLBACK (on_time_threshold_changed), - source); + g_signal_connect_object (threshold, + "notify::value", + G_CALLBACK (on_time_threshold_changed), + source, 0); } static void diff --git a/src/gclue-modem-manager.c b/src/gclue-modem-manager.c index b81f553..de7e6be 100644 --- a/src/gclue-modem-manager.c +++ b/src/gclue-modem-manager.c @@ -816,7 +816,8 @@ on_manager_new_ready (GObject *modem_object, GAsyncResult *res, gpointer user_data) { - GClueModemManagerPrivate *priv = GCLUE_MODEM_MANAGER (user_data)->priv; + GClueModemManager *manager = GCLUE_MODEM_MANAGER (user_data); + GClueModemManagerPrivate *priv = manager->priv; GList *objects, *node; GError *error = NULL; @@ -842,15 +843,15 @@ on_manager_new_ready (GObject *modem_object, } g_list_free_full (objects, g_object_unref); - g_signal_connect (G_OBJECT (priv->manager), - "object-added", - G_CALLBACK (on_mm_object_added), - user_data); + g_signal_connect_object (G_OBJECT (priv->manager), + "object-added", + G_CALLBACK (on_mm_object_added), + manager, 0); - g_signal_connect (G_OBJECT (priv->manager), - "object-removed", - G_CALLBACK (on_mm_object_removed), - user_data); + g_signal_connect_object (G_OBJECT (priv->manager), + "object-removed", + G_CALLBACK (on_mm_object_removed), + manager, 0); } static void diff --git a/src/gclue-service-client.c b/src/gclue-service-client.c index 8f0b353..768c1e6 100644 --- a/src/gclue-service-client.c +++ b/src/gclue-service-client.c @@ -262,10 +262,10 @@ start_client (GClueServiceClient *client, GClueAccuracyLevel accuracy_level) gclue_dbus_client_set_active (GCLUE_DBUS_CLIENT (client), TRUE); priv->locator = gclue_locator_new (accuracy_level); gclue_locator_set_time_threshold (priv->locator, priv->time_threshold); - g_signal_connect (priv->locator, - "notify::location", - G_CALLBACK (on_locator_location_changed), - client); + g_signal_connect_object (priv->locator, + "notify::location", + G_CALLBACK (on_locator_location_changed), + client, 0); gclue_location_source_start (GCLUE_LOCATION_SOURCE (priv->locator)); } 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); diff --git a/src/gclue-wifi.c b/src/gclue-wifi.c index 3055545..6318827 100644 --- a/src/gclue-wifi.c +++ b/src/gclue-wifi.c @@ -1019,14 +1019,14 @@ gclue_wifi_constructed (GObject *object) goto refresh_n_exit; } - g_signal_connect (priv->supplicant, - "interface-added", - G_CALLBACK (on_interface_added), - wifi); - g_signal_connect (priv->supplicant, - "interface-removed", - G_CALLBACK (on_interface_removed), - wifi); + g_signal_connect_object (priv->supplicant, + "interface-added", + G_CALLBACK (on_interface_added), + wifi, 0); + g_signal_connect_object (priv->supplicant, + "interface-removed", + G_CALLBACK (on_interface_removed), + wifi, 0); interfaces = wpa_supplicant_get_interfaces (priv->supplicant); if (interfaces != NULL && interfaces[0] != NULL) |