diff options
author | Dan Winship <danw@gnome.org> | 2013-11-05 14:43:31 -0500 |
---|---|---|
committer | Dan Winship <danw@gnome.org> | 2013-12-03 16:39:37 -0500 |
commit | 37b8983c39d8dcb8402da186dbd3245b019af7a9 (patch) | |
tree | e5d5d12a628b128f22b554afc9a87a20f1b23b37 | |
parent | 6e73f01b6e69f44f8d9da4872fb796b9d80acac1 (diff) | |
download | NetworkManager-37b8983c39d8dcb8402da186dbd3245b019af7a9.tar.gz |
core: make NMSessionMonitor non-refcounted
and ensure that main() frees the singleton before exiting
-rw-r--r-- | src/main.c | 6 | ||||
-rw-r--r-- | src/nm-session-monitor-ck.c | 6 | ||||
-rw-r--r-- | src/nm-session-monitor-null.c | 7 | ||||
-rw-r--r-- | src/nm-session-monitor-systemd.c | 7 | ||||
-rw-r--r-- | src/settings/nm-agent-manager.c | 36 | ||||
-rw-r--r-- | src/settings/nm-settings-connection.c | 1 | ||||
-rw-r--r-- | src/settings/nm-settings.c | 6 |
7 files changed, 25 insertions, 44 deletions
diff --git a/src/main.c b/src/main.c index 3c3adf2c94..0ae0dfe9da 100644 --- a/src/main.c +++ b/src/main.c @@ -54,6 +54,7 @@ #include "nm-policy-hosts.h" #include "nm-config.h" #include "nm-posix-signals.h" +#include "nm-session-monitor.h" #if !defined(NM_DIST_VERSION) # define NM_DIST_VERSION VERSION @@ -319,6 +320,7 @@ main (int argc, char *argv[]) gs_unref_object NMFirewallManager *fw_mgr = NULL; gs_unref_object NMSettings *settings = NULL; gs_unref_object NMConfig *config = NULL; + gs_unref_object NMSessionMonitor *session_monitor = NULL; GError *error = NULL; gboolean wrote_pidfile = FALSE; @@ -581,6 +583,10 @@ main (int argc, char *argv[]) fw_mgr = nm_firewall_manager_get (); g_assert (fw_mgr != NULL); + /* Initialize session monitor */ + session_monitor = nm_session_monitor_get (); + g_assert (session_monitor != NULL); + if (!nm_dbus_manager_get_connection (dbus_mgr)) { #if HAVE_DBUS_GLIB_100 nm_log_warn (LOGD_CORE, "Failed to connect to D-Bus; only private bus is available"); diff --git a/src/nm-session-monitor-ck.c b/src/nm-session-monitor-ck.c index 02e2d06ee0..75e1c92728 100644 --- a/src/nm-session-monitor-ck.c +++ b/src/nm-session-monitor-ck.c @@ -354,10 +354,8 @@ nm_session_monitor_get (void) { static NMSessionMonitor *singleton = NULL; - if (singleton) - return g_object_ref (singleton); - - singleton = NM_SESSION_MONITOR (g_object_new (NM_TYPE_SESSION_MONITOR, NULL)); + if (!singleton) + singleton = NM_SESSION_MONITOR (g_object_new (NM_TYPE_SESSION_MONITOR, NULL)); return singleton; } diff --git a/src/nm-session-monitor-null.c b/src/nm-session-monitor-null.c index beabcf213e..5d8ecaaf1a 100644 --- a/src/nm-session-monitor-null.c +++ b/src/nm-session-monitor-null.c @@ -81,11 +81,8 @@ nm_session_monitor_get (void) { static NMSessionMonitor *singleton = NULL; - if (singleton) - return g_object_ref (singleton); - - singleton = NM_SESSION_MONITOR (g_object_new (NM_TYPE_SESSION_MONITOR, NULL)); - g_assert (singleton); + if (!singleton) + singleton = g_object_new (NM_TYPE_SESSION_MONITOR, NULL); return singleton; } diff --git a/src/nm-session-monitor-systemd.c b/src/nm-session-monitor-systemd.c index f9fb075d11..4d8edab2d2 100644 --- a/src/nm-session-monitor-systemd.c +++ b/src/nm-session-monitor-systemd.c @@ -193,11 +193,8 @@ nm_session_monitor_get (void) { static NMSessionMonitor *singleton = NULL; - if (singleton) - return g_object_ref (singleton); - - singleton = NM_SESSION_MONITOR (g_object_new (NM_TYPE_SESSION_MONITOR, NULL)); - g_assert (singleton); + if (!singleton) + singleton = g_object_new (NM_TYPE_SESSION_MONITOR, NULL); return singleton; } diff --git a/src/settings/nm-agent-manager.c b/src/settings/nm-agent-manager.c index 7fb8aea29a..d63042b5fe 100644 --- a/src/settings/nm-agent-manager.c +++ b/src/settings/nm-agent-manager.c @@ -47,7 +47,6 @@ typedef struct { gboolean disposed; NMDBusManager *dbus_mgr; - NMSessionMonitor *session_monitor; /* Auth chains for checking agent permissions */ GSList *chains; @@ -70,9 +69,7 @@ static guint signals[LAST_SIGNAL] = { 0 }; typedef struct _Request Request; -static void request_add_agent (Request *req, - NMSecretAgent *agent, - NMSessionMonitor *session_monitor); +static void request_add_agent (Request *req, NMSecretAgent *agent); static void request_remove_agent (Request *req, NMSecretAgent *agent, GSList **pending_reqs); @@ -251,7 +248,7 @@ agent_register_permissions_done (NMAuthChain *chain, /* Add this agent to any in-progress secrets requests */ g_hash_table_iter_init (&iter, priv->requests); while (g_hash_table_iter_next (&iter, NULL, (gpointer) &req)) - request_add_agent (req, agent, priv->session_monitor); + request_add_agent (req, agent); } nm_auth_chain_unref (chain); @@ -298,7 +295,7 @@ impl_agent_manager_register_with_capabilities (NMAgentManager *self, sender_uid = nm_auth_subject_get_uid (subject); if ( 0 != sender_uid - && !nm_session_monitor_uid_has_session (priv->session_monitor, + && !nm_session_monitor_uid_has_session (nm_session_monitor_get (), sender_uid, NULL, &local)) { @@ -406,9 +403,7 @@ typedef void (*RequestCompleteFunc) (Request *req, const char *agent_username, GError *error, gpointer user_data); -typedef gboolean (*RequestAddAgentFunc) (Request *req, - NMSecretAgent *agent, - NMSessionMonitor *session_monitor); +typedef gboolean (*RequestAddAgentFunc) (Request *req, NMSecretAgent *agent); typedef void (*RequestNextFunc) (Request *req); typedef void (*RequestCancelFunc) (Request *req); @@ -523,7 +518,6 @@ req_complete_error (Request *req, GError *error) static gint agent_compare_func (NMSecretAgent *a, NMSecretAgent *b, gpointer user_data) { - NMSessionMonitor *session_monitor = NM_SESSION_MONITOR (user_data); gboolean a_active, b_active; if (a && !b) @@ -534,10 +528,10 @@ agent_compare_func (NMSecretAgent *a, NMSecretAgent *b, gpointer user_data) return 1; /* Prefer agents in active sessions */ - a_active = nm_session_monitor_uid_active (session_monitor, + a_active = nm_session_monitor_uid_active (nm_session_monitor_get (), nm_secret_agent_get_owner_uid (a), NULL); - b_active = nm_session_monitor_uid_active (session_monitor, + b_active = nm_session_monitor_uid_active (nm_session_monitor_get (), nm_secret_agent_get_owner_uid (b), NULL); if (a_active && !b_active) @@ -551,9 +545,7 @@ agent_compare_func (NMSecretAgent *a, NMSecretAgent *b, gpointer user_data) } static void -request_add_agent (Request *req, - NMSecretAgent *agent, - NMSessionMonitor *session_monitor) +request_add_agent (Request *req, NMSecretAgent *agent) { uid_t agent_uid; @@ -563,7 +555,7 @@ request_add_agent (Request *req, if (g_slist_find (req->asked, GUINT_TO_POINTER (nm_secret_agent_get_hash (agent)))) return; - if (req->add_agent_callback && !req->add_agent_callback (req, agent, session_monitor)) + if (req->add_agent_callback && !req->add_agent_callback (req, agent)) return; /* If the request should filter agents by UID, do that now */ @@ -584,7 +576,7 @@ request_add_agent (Request *req, req->pending = g_slist_insert_sorted_with_data (req->pending, g_object_ref (agent), (GCompareDataFunc) agent_compare_func, - session_monitor); + NULL); } static void @@ -596,7 +588,7 @@ request_add_agents (NMAgentManager *self, Request *req) g_hash_table_iter_init (&iter, priv->agents); while (g_hash_table_iter_next (&iter, NULL, &data)) - request_add_agent (req, NM_SECRET_AGENT (data), priv->session_monitor); + request_add_agent (req, NM_SECRET_AGENT (data)); } static void @@ -699,9 +691,7 @@ connection_request_free (gpointer data) } static gboolean -connection_request_add_agent (Request *parent, - NMSecretAgent *agent, - NMSessionMonitor *session_monitor) +connection_request_add_agent (Request *parent, NMSecretAgent *agent) { ConnectionRequest *req = (ConnectionRequest *) parent; uid_t agent_uid = nm_secret_agent_get_owner_uid (agent); @@ -709,7 +699,7 @@ connection_request_add_agent (Request *parent, /* Ensure the caller's username exists in the connection's permissions, * or that the permissions is empty (ie, visible by everyone). */ - if (!nm_auth_uid_in_acl (req->connection, session_monitor, agent_uid, NULL)) { + if (!nm_auth_uid_in_acl (req->connection, nm_session_monitor_get (), agent_uid, NULL)) { nm_log_dbg (LOGD_AGENTS, "(%s) agent ignored for secrets request %p/%s (not in ACL)", nm_secret_agent_get_description (agent), parent, parent->detail); @@ -1546,7 +1536,6 @@ nm_agent_manager_get (void) g_assert (singleton); priv = NM_AGENT_MANAGER_GET_PRIVATE (singleton); - priv->session_monitor = nm_session_monitor_get (); priv->dbus_mgr = nm_dbus_manager_get (); nm_dbus_manager_register_object (priv->dbus_mgr, NM_DBUS_PATH_AGENT_MANAGER, singleton); @@ -1588,7 +1577,6 @@ dispose (GObject *object) g_hash_table_destroy (priv->agents); g_hash_table_destroy (priv->requests); - g_object_unref (priv->session_monitor); priv->dbus_mgr = NULL; } diff --git a/src/settings/nm-settings-connection.c b/src/settings/nm-settings-connection.c index 53c606fb62..b4174ceed6 100644 --- a/src/settings/nm-settings-connection.c +++ b/src/settings/nm-settings-connection.c @@ -1969,7 +1969,6 @@ dispose (GObject *object) if (priv->session_changed_id) g_signal_handler_disconnect (priv->session_monitor, priv->session_changed_id); - g_object_unref (priv->session_monitor); g_object_unref (priv->agent_mgr); out: diff --git a/src/settings/nm-settings.c b/src/settings/nm-settings.c index c08ccfb744..ad50db0565 100644 --- a/src/settings/nm-settings.c +++ b/src/settings/nm-settings.c @@ -133,7 +133,6 @@ typedef struct { NMConfig *config; - NMSessionMonitor *session_monitor; GSList *auths; GSList *plugins; @@ -1128,7 +1127,7 @@ nm_settings_add_connection_dbus (NMSettings *self, * or that the permissions is empty (ie, visible by everyone). */ if (!nm_auth_uid_in_acl (connection, - priv->session_monitor, + nm_session_monitor_get (), nm_auth_subject_get_uid (subject), &error_desc)) { error = g_error_new_literal (NM_SETTINGS_ERROR, @@ -1817,8 +1816,6 @@ nm_settings_init (NMSettings *self) priv->connections = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, g_object_unref); - priv->session_monitor = nm_session_monitor_get (); - /* Hold a reference to the agent manager so it stays alive; the only * other holders are NMSettingsConnection objects which are often * transient, and we don't want the agent manager to get destroyed and @@ -1840,7 +1837,6 @@ dispose (GObject *object) priv->dbus_mgr = NULL; - g_object_unref (priv->session_monitor); g_object_unref (priv->agent_mgr); G_OBJECT_CLASS (nm_settings_parent_class)->dispose (object); |