mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2026-05-02 06:08:02 +02:00
modem-manager: keep track of the signals added to the 'GDBusObjectManagerClient'
Make sure we cleanup all the signals when we remove our internal reference to the 'MMManager' object.
This commit is contained in:
parent
d953aad17a
commit
03c1e40e66
1 changed files with 51 additions and 13 deletions
|
|
@ -54,6 +54,9 @@ struct _NMModemManagerPrivate {
|
|||
guint modem_manager_1_poke_id;
|
||||
gboolean old_modem_manager_found;
|
||||
gboolean new_modem_manager_found;
|
||||
guint modem_manager_1_name_owner_changed_id;
|
||||
guint modem_manager_1_object_added_id;
|
||||
guint modem_manager_1_object_removed_id;
|
||||
#endif
|
||||
|
||||
/* Common */
|
||||
|
|
@ -410,6 +413,37 @@ nm_modem_manager_name_owner_changed (NMDBusManager *dbus_mgr,
|
|||
|
||||
#if WITH_MODEM_MANAGER_1
|
||||
|
||||
static void
|
||||
modem_manager_1_clear_signals (NMModemManager *self)
|
||||
{
|
||||
if (!self->priv->modem_manager_1)
|
||||
return;
|
||||
|
||||
if (self->priv->modem_manager_1_name_owner_changed_id) {
|
||||
if (g_signal_handler_is_connected (self->priv->modem_manager_1,
|
||||
self->priv->modem_manager_1_name_owner_changed_id))
|
||||
g_signal_handler_disconnect (self->priv->modem_manager_1,
|
||||
self->priv->modem_manager_1_name_owner_changed_id);
|
||||
self->priv->modem_manager_1_name_owner_changed_id = 0;
|
||||
}
|
||||
|
||||
if (self->priv->modem_manager_1_object_added_id) {
|
||||
if (g_signal_handler_is_connected (self->priv->modem_manager_1,
|
||||
self->priv->modem_manager_1_object_added_id))
|
||||
g_signal_handler_disconnect (self->priv->modem_manager_1,
|
||||
self->priv->modem_manager_1_object_added_id);
|
||||
self->priv->modem_manager_1_object_added_id = 0;
|
||||
}
|
||||
|
||||
if (self->priv->modem_manager_1_object_removed_id) {
|
||||
if (g_signal_handler_is_connected (self->priv->modem_manager_1,
|
||||
self->priv->modem_manager_1_object_removed_id))
|
||||
g_signal_handler_disconnect (self->priv->modem_manager_1,
|
||||
self->priv->modem_manager_1_object_removed_id);
|
||||
self->priv->modem_manager_1_object_removed_id = 0;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
clear_modem_manager_1_support (NMModemManager *self)
|
||||
{
|
||||
|
|
@ -418,6 +452,7 @@ clear_modem_manager_1_support (NMModemManager *self)
|
|||
self->priv->modem_manager_1_poke_id = 0;
|
||||
}
|
||||
|
||||
modem_manager_1_clear_signals (self);
|
||||
g_clear_object (&self->priv->modem_manager_1);
|
||||
g_clear_object (&self->priv->dbus_connection);
|
||||
}
|
||||
|
|
@ -613,19 +648,22 @@ manager_new_ready (GObject *source,
|
|||
/* If we found the old MM, abort */
|
||||
clear_modem_manager_1_support (self);
|
||||
} else {
|
||||
g_signal_connect (self->priv->modem_manager_1,
|
||||
"notify::name-owner",
|
||||
G_CALLBACK (modem_manager_1_name_owner_changed),
|
||||
self);
|
||||
g_signal_connect (self->priv->modem_manager_1,
|
||||
"object-added",
|
||||
G_CALLBACK (modem_object_added),
|
||||
self);
|
||||
g_signal_connect (self->priv->modem_manager_1,
|
||||
"object-removed",
|
||||
G_CALLBACK (modem_object_removed),
|
||||
self);
|
||||
|
||||
/* Setup signals in the GDBusObjectManagerClient */
|
||||
self->priv->modem_manager_1_name_owner_changed_id =
|
||||
g_signal_connect (self->priv->modem_manager_1,
|
||||
"notify::name-owner",
|
||||
G_CALLBACK (modem_manager_1_name_owner_changed),
|
||||
self);
|
||||
self->priv->modem_manager_1_object_added_id =
|
||||
g_signal_connect (self->priv->modem_manager_1,
|
||||
"object-added",
|
||||
G_CALLBACK (modem_object_added),
|
||||
self);
|
||||
self->priv->modem_manager_1_object_removed_id =
|
||||
g_signal_connect (self->priv->modem_manager_1,
|
||||
"object-removed",
|
||||
G_CALLBACK (modem_object_removed),
|
||||
self);
|
||||
/* Poke the MMManager! */
|
||||
modem_manager_1_poke (self);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue