From 37ac96cb558b2092ca31747f5cabe3d8bc317ffa Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Mon, 27 Nov 2017 09:07:28 +0100 Subject: [PATCH] policy: use "agent-registered" signal directly from NMAgentManager instead of NMSettings (cherry picked from commit 46af70b508cdb19ce8fd6eafd01575d39124ed0e) --- src/nm-policy.c | 16 +++++++++++++--- src/settings/nm-settings.c | 30 ------------------------------ src/settings/nm-settings.h | 1 - 3 files changed, 13 insertions(+), 34 deletions(-) diff --git a/src/nm-policy.c b/src/nm-policy.c index cd055f1563..1a8dedc2d6 100644 --- a/src/nm-policy.c +++ b/src/nm-policy.c @@ -44,6 +44,7 @@ #include "nm-manager.h" #include "settings/nm-settings.h" #include "settings/nm-settings-connection.h" +#include "settings/nm-agent-manager.h" #include "nm-dhcp4-config.h" #include "nm-dhcp6-config.h" #include "nm-config.h" @@ -67,6 +68,8 @@ typedef struct { NMFirewallManager *firewall_manager; CList pending_activation_checks; + NMAgentManager *agent_mgr; + GHashTable *devices; GHashTable *pending_active_connections; @@ -2374,8 +2377,7 @@ secret_agent_registered (NMSettings *settings, NMSecretAgent *agent, gpointer user_data) { - NMPolicyPrivate *priv = user_data; - NMPolicy *self = _PRIV_TO_SELF (priv); + NMPolicy *self = NM_POLICY (user_data); /* The registered secret agent may provide some missing secrets. Thus we * reset retries count here and schedule activation, so that the @@ -2520,6 +2522,8 @@ constructed (GObject *object) _LOGT (LOGD_DNS, "hostname-original: set to %s%s%s", NM_PRINT_FMT_QUOTE_STRING (priv->orig_hostname)); + priv->agent_mgr = g_object_ref (nm_agent_manager_get ()); + priv->firewall_manager = g_object_ref (nm_firewall_manager_get ()); g_signal_connect (priv->firewall_manager, NM_FIREWALL_MANAGER_STATE_CHANGED, G_CALLBACK (firewall_state_changed), self); @@ -2544,7 +2548,8 @@ constructed (GObject *object) g_signal_connect (priv->settings, NM_SETTINGS_SIGNAL_CONNECTION_UPDATED, (GCallback) connection_updated, priv); g_signal_connect (priv->settings, NM_SETTINGS_SIGNAL_CONNECTION_REMOVED, (GCallback) connection_removed, priv); g_signal_connect (priv->settings, NM_SETTINGS_SIGNAL_CONNECTION_VISIBILITY_CHANGED, (GCallback) connection_visibility_changed, priv); - g_signal_connect (priv->settings, NM_SETTINGS_SIGNAL_AGENT_REGISTERED, (GCallback) secret_agent_registered, priv); + + g_signal_connect (priv->agent_mgr, NM_AGENT_MANAGER_AGENT_REGISTERED, G_CALLBACK (secret_agent_registered), self); G_OBJECT_CLASS (nm_policy_parent_class)->constructed (object); @@ -2593,6 +2598,11 @@ dispose (GObject *object) g_clear_object (&priv->firewall_manager); } + if (priv->agent_mgr) { + g_signal_handlers_disconnect_by_func (priv->agent_mgr, secret_agent_registered, self); + g_clear_object (&priv->agent_mgr); + } + if (priv->dns_manager) { nm_clear_g_signal_handler (priv->dns_manager, &priv->config_changed_id); g_clear_object (&priv->dns_manager); diff --git a/src/settings/nm-settings.c b/src/settings/nm-settings.c index c29419e7b4..081997058f 100644 --- a/src/settings/nm-settings.c +++ b/src/settings/nm-settings.c @@ -128,7 +128,6 @@ enum { CONNECTION_UPDATED, CONNECTION_REMOVED, CONNECTION_VISIBILITY_CHANGED, - AGENT_REGISTERED, NEW_CONNECTION, /* exported, not used internally */ LAST_SIGNAL }; @@ -878,18 +877,6 @@ connection_removed (NMSettingsConnection *connection, gpointer user_data) g_object_unref (connection); } -static void -secret_agent_registered (NMAgentManager *agent_mgr, - NMSecretAgent *agent, - gpointer user_data) -{ - /* Re-emit for listeners like NMPolicy */ - g_signal_emit (NM_SETTINGS (user_data), - signals[AGENT_REGISTERED], - 0, - agent); -} - #define NM_DBUS_SERVICE_OPENCONNECT "org.freedesktop.NetworkManager.openconnect" #define NM_OPENCONNECT_KEY_GATEWAY "gateway" #define NM_OPENCONNECT_KEY_COOKIE "cookie" @@ -1888,16 +1875,8 @@ nm_settings_init (NMSettings *self) priv->connections = g_hash_table_new_full (nm_str_hash, g_str_equal, NULL, g_object_unref); - /* 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 - * recreated often. - */ priv->agent_mgr = g_object_ref (nm_agent_manager_get ()); - priv->config = g_object_ref (nm_config_get ()); - - g_signal_connect (priv->agent_mgr, NM_AGENT_MANAGER_AGENT_REGISTERED, G_CALLBACK (secret_agent_registered), self); } NMSettings * @@ -2022,15 +2001,6 @@ nm_settings_class_init (NMSettingsClass *class) g_cclosure_marshal_VOID__OBJECT, G_TYPE_NONE, 1, NM_TYPE_SETTINGS_CONNECTION); - signals[AGENT_REGISTERED] = - g_signal_new (NM_SETTINGS_SIGNAL_AGENT_REGISTERED, - G_OBJECT_CLASS_TYPE (object_class), - G_SIGNAL_RUN_FIRST, - 0, NULL, NULL, - g_cclosure_marshal_VOID__OBJECT, - G_TYPE_NONE, 1, NM_TYPE_SECRET_AGENT); - - signals[NEW_CONNECTION] = g_signal_new ("new-connection", G_OBJECT_CLASS_TYPE (object_class), diff --git a/src/settings/nm-settings.h b/src/settings/nm-settings.h index 0e01f6b5fd..cbd8afa9c3 100644 --- a/src/settings/nm-settings.h +++ b/src/settings/nm-settings.h @@ -47,7 +47,6 @@ #define NM_SETTINGS_SIGNAL_CONNECTION_UPDATED "connection-updated" #define NM_SETTINGS_SIGNAL_CONNECTION_REMOVED "connection-removed" #define NM_SETTINGS_SIGNAL_CONNECTION_VISIBILITY_CHANGED "connection-visibility-changed" -#define NM_SETTINGS_SIGNAL_AGENT_REGISTERED "agent-registered" /** * NMConnectionFilterFunc: