summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMaciej S. Szmigiero <mail@maciej.szmigiero.name>2022-10-09 18:34:18 +0200
committerMaciej S. Szmigiero <mail@maciej.szmigiero.name>2022-10-11 14:51:41 +0200
commit3689c50e15b7e67017f961f66605d2de68c08a64 (patch)
tree6ae53ea2bd9d6105790914f85d3ac57be0f9ea5f
parent913c5288263c48928706354f2798367eeb54ccd9 (diff)
downloadgeoclue-3689c50e15b7e67017f961f66605d2de68c08a64.tar.gz
Make sure signals aren't left connected after handler object is gone
-rw-r--r--src/gclue-modem-gps.c8
-rw-r--r--src/gclue-modem-manager.c19
-rw-r--r--src/gclue-service-client.c8
-rw-r--r--src/gclue-service-manager.c35
-rw-r--r--src/gclue-wifi.c16
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)