From 7168283871952e19b7831f4c2caedc0d629ed455 Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Tue, 11 Aug 2015 11:28:39 +0200 Subject: [PATCH] settings: let NMSettingsConnection own reference to nm_session_monitor_get() This way, the lifetime of the session monitor is guaranteed to exceed the lifetime of it's user -- the NMSettingsConnection. --- src/settings/nm-settings-connection.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/settings/nm-settings-connection.c b/src/settings/nm-settings-connection.c index 31ddcbf12e..3a9667fc2b 100644 --- a/src/settings/nm-settings-connection.c +++ b/src/settings/nm-settings-connection.c @@ -111,6 +111,7 @@ typedef struct { gboolean removed; NMAgentManager *agent_mgr; + NMSessionMonitor *session_monitor; guint session_changed_id; NMSettingsConnectionFlags flags; @@ -333,7 +334,7 @@ nm_settings_connection_recheck_visibility (NMSettingsConnection *self) continue; if (!nm_session_monitor_user_to_uid (user, &uid)) continue; - if (!nm_session_monitor_session_exists (nm_session_monitor_get (), uid, FALSE)) + if (!nm_session_monitor_session_exists (priv->session_monitor, uid, FALSE)) continue; set_visible (self, TRUE); @@ -2325,7 +2326,8 @@ nm_settings_connection_init (NMSettingsConnection *self) priv->visible = FALSE; priv->ready = TRUE; - priv->session_changed_id = nm_session_monitor_connect (nm_session_monitor_get (), session_changed_cb, self); + priv->session_monitor = g_object_ref (nm_session_monitor_get ()); + priv->session_changed_id = nm_session_monitor_connect (priv->session_monitor, session_changed_cb, self); priv->agent_mgr = g_object_ref (nm_agent_manager_get ()); @@ -2387,9 +2389,10 @@ dispose (GObject *object) set_visible (self, FALSE); - if (priv->session_changed_id) { - nm_session_monitor_disconnect (nm_session_monitor_get (), priv->session_changed_id); + if (priv->session_monitor) { + nm_session_monitor_disconnect (priv->session_monitor, priv->session_changed_id); priv->session_changed_id = 0; + g_clear_object (&priv->session_monitor); } g_clear_object (&priv->agent_mgr);