diff options
| author | Michael Biebl <biebl@debian.org> | 2015-12-24 00:24:58 +0100 |
|---|---|---|
| committer | Michael Biebl <biebl@debian.org> | 2015-12-24 00:24:58 +0100 |
| commit | 54f6333410ffd570e62717d9e77c5c987175e397 (patch) | |
| tree | d0698cc29d0f53c0b6d2c68d35ee2e9d72153948 /src/settings | |
| parent | a6ece1a2aa19a6268335c87d4fdef20123dd04a5 (diff) | |
Imported Upstream version 1.0.10 upstream/1.0.10
Diffstat (limited to 'src/settings')
| -rw-r--r-- | src/settings/nm-agent-manager.c | 84 | ||||
| -rw-r--r-- | src/settings/nm-inotify-helper.c | 43 | ||||
| -rw-r--r-- | src/settings/nm-settings-connection.c | 2 | ||||
| -rw-r--r-- | src/settings/nm-settings.c | 2 |
4 files changed, 67 insertions, 64 deletions
diff --git a/src/settings/nm-agent-manager.c b/src/settings/nm-agent-manager.c index c694ad6f..8d9252a5 100644 --- a/src/settings/nm-agent-manager.c +++ b/src/settings/nm-agent-manager.c @@ -50,9 +50,8 @@ G_DEFINE_TYPE (NMAgentManager, nm_agent_manager, G_TYPE_OBJECT) NMAgentManagerPrivate)) typedef struct { - gboolean disposed; - NMDBusManager *dbus_mgr; + NMAuthManager *auth_mgr; /* Auth chains for checking agent permissions */ GSList *chains; @@ -1559,35 +1558,7 @@ authority_changed_cb (NMAuthManager *auth_manager, NMAgentManager *self) /*************************************************************/ -NMAgentManager * -nm_agent_manager_get (void) -{ - static NMAgentManager *singleton = NULL; - NMAgentManagerPrivate *priv; - - if (singleton) - return g_object_ref (singleton); - - singleton = (NMAgentManager *) g_object_new (NM_TYPE_AGENT_MANAGER, NULL); - g_assert (singleton); - - priv = NM_AGENT_MANAGER_GET_PRIVATE (singleton); - priv->dbus_mgr = nm_dbus_manager_get (); - - nm_dbus_manager_register_object (priv->dbus_mgr, NM_DBUS_PATH_AGENT_MANAGER, singleton); - - g_signal_connect (priv->dbus_mgr, - NM_DBUS_MANAGER_NAME_OWNER_CHANGED, - G_CALLBACK (name_owner_changed_cb), - singleton); - - g_signal_connect (nm_auth_manager_get (), - NM_AUTH_MANAGER_SIGNAL_CHANGED, - G_CALLBACK (authority_changed_cb), - singleton); - - return singleton; -} +NM_DEFINE_SINGLETON_GETTER (NMAgentManager, nm_agent_manager_get, NM_TYPE_AGENT_MANAGER); static void nm_agent_manager_init (NMAgentManager *self) @@ -1602,23 +1573,57 @@ nm_agent_manager_init (NMAgentManager *self) } static void -dispose (GObject *object) +constructed (GObject *object) { NMAgentManagerPrivate *priv = NM_AGENT_MANAGER_GET_PRIVATE (object); - if (!priv->disposed) { - priv->disposed = TRUE; + G_OBJECT_CLASS (nm_agent_manager_parent_class)->constructed (object); - g_signal_handlers_disconnect_by_func (nm_auth_manager_get (), - G_CALLBACK (authority_changed_cb), - object); + priv->dbus_mgr = g_object_ref (nm_dbus_manager_get ()); + priv->auth_mgr = g_object_ref (nm_auth_manager_get ()); + + nm_dbus_manager_register_object (priv->dbus_mgr, NM_DBUS_PATH_AGENT_MANAGER, object); - g_slist_free_full (priv->chains, (GDestroyNotify) nm_auth_chain_unref); + g_signal_connect (priv->dbus_mgr, + NM_DBUS_MANAGER_NAME_OWNER_CHANGED, + G_CALLBACK (name_owner_changed_cb), + object); + + g_signal_connect (priv->auth_mgr, + NM_AUTH_MANAGER_SIGNAL_CHANGED, + G_CALLBACK (authority_changed_cb), + object); +} +static void +dispose (GObject *object) +{ + NMAgentManagerPrivate *priv = NM_AGENT_MANAGER_GET_PRIVATE (object); + + g_slist_free_full (priv->chains, (GDestroyNotify) nm_auth_chain_unref); + priv->chains = NULL; + + if (priv->agents) { g_hash_table_destroy (priv->agents); + priv->agents = NULL; + } + if (priv->requests) { g_hash_table_destroy (priv->requests); + priv->requests = NULL; + } - priv->dbus_mgr = NULL; + if (priv->auth_mgr) { + g_signal_handlers_disconnect_by_func (priv->auth_mgr, + G_CALLBACK (authority_changed_cb), + object); + g_clear_object (&priv->auth_mgr); + } + if (priv->dbus_mgr) { + g_signal_handlers_disconnect_by_func (priv->dbus_mgr, + G_CALLBACK (name_owner_changed_cb), + object); + nm_dbus_manager_unregister_object (priv->dbus_mgr, object); + g_clear_object (&priv->dbus_mgr); } G_OBJECT_CLASS (nm_agent_manager_parent_class)->dispose (object); @@ -1632,6 +1637,7 @@ nm_agent_manager_class_init (NMAgentManagerClass *agent_manager_class) g_type_class_add_private (agent_manager_class, sizeof (NMAgentManagerPrivate)); /* virtual methods */ + object_class->constructed = constructed; object_class->dispose = dispose; /* Signals */ diff --git a/src/settings/nm-inotify-helper.c b/src/settings/nm-inotify-helper.c index 41f0268d..3732e77a 100644 --- a/src/settings/nm-inotify-helper.c +++ b/src/settings/nm-inotify-helper.c @@ -24,6 +24,7 @@ #include <string.h> #include <sys/inotify.h> #include <glib.h> +#include <errno.h> #include "nm-inotify-helper.h" #include "nm-logging.h" @@ -55,9 +56,10 @@ nm_inotify_helper_add_watch (NMInotifyHelper *self, const char *path) { NMInotifyHelperPrivate *priv = NM_INOTIFY_HELPER_GET_PRIVATE (self); int wd; - guint32 refcount; + guint refcount; - g_return_val_if_fail (priv->ifd >= 0, -1); + if (priv->ifd < 0) + return -1; /* We only care about modifications since we're just trying to get change * notifications on hardlinks. @@ -78,9 +80,10 @@ void nm_inotify_helper_remove_watch (NMInotifyHelper *self, int wd) { NMInotifyHelperPrivate *priv = NM_INOTIFY_HELPER_GET_PRIVATE (self); - guint32 refcount; + guint refcount; - g_return_if_fail (priv->ifd >= 0); + if (priv->ifd < 0) + return; refcount = GPOINTER_TO_UINT (g_hash_table_lookup (priv->wd_refs, GINT_TO_POINTER (wd))); if (!refcount) @@ -128,7 +131,9 @@ init_inotify (NMInotifyHelper *self) priv->ifd = inotify_init (); if (priv->ifd == -1) { - nm_log_warn (LOGD_SETTINGS, "couldn't initialize inotify"); + int errsv = errno; + + nm_log_warn (LOGD_SETTINGS, "couldn't initialize inotify: %s (%d)", strerror (errsv), errsv); return FALSE; } @@ -145,24 +150,7 @@ init_inotify (NMInotifyHelper *self) return TRUE; } -NMInotifyHelper * -nm_inotify_helper_get (void) -{ - static NMInotifyHelper *singleton_instance = NULL; - - if (!singleton_instance) { - singleton_instance = (NMInotifyHelper *) g_object_new (NM_TYPE_INOTIFY_HELPER, NULL); - - if (!init_inotify (singleton_instance)) { - g_clear_object (&singleton_instance); - return NULL; - } - } else - g_object_ref (singleton_instance); - - g_assert (singleton_instance); - return singleton_instance; -} +NM_DEFINE_SINGLETON_GETTER (NMInotifyHelper, nm_inotify_helper_get, NM_TYPE_INOTIFY_HELPER); static void nm_inotify_helper_init (NMInotifyHelper *self) @@ -173,6 +161,14 @@ nm_inotify_helper_init (NMInotifyHelper *self) } static void +constructed (GObject *object) +{ + G_OBJECT_CLASS (nm_inotify_helper_parent_class)->constructed (object); + + init_inotify (NM_INOTIFY_HELPER (object)); +} + +static void finalize (GObject *object) { NMInotifyHelperPrivate *priv = NM_INOTIFY_HELPER_GET_PRIVATE (object); @@ -193,6 +189,7 @@ nm_inotify_helper_class_init (NMInotifyHelperClass *klass) g_type_class_add_private (klass, sizeof (NMInotifyHelperPrivate)); /* Virtual methods */ + object_class->constructed = constructed; object_class->finalize = finalize; /* Signals */ diff --git a/src/settings/nm-settings-connection.c b/src/settings/nm-settings-connection.c index da5384c0..1fa19237 100644 --- a/src/settings/nm-settings-connection.c +++ b/src/settings/nm-settings-connection.c @@ -2282,7 +2282,7 @@ nm_settings_connection_init (NMSettingsConnection *self) G_CALLBACK (session_changed_cb), self); - priv->agent_mgr = nm_agent_manager_get (); + priv->agent_mgr = g_object_ref (nm_agent_manager_get ()); priv->seen_bssids = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL); diff --git a/src/settings/nm-settings.c b/src/settings/nm-settings.c index 4d7d697d..f20bc71b 100644 --- a/src/settings/nm-settings.c +++ b/src/settings/nm-settings.c @@ -1922,7 +1922,7 @@ nm_settings_init (NMSettings *self) * transient, and we don't want the agent manager to get destroyed and * recreated often. */ - priv->agent_mgr = nm_agent_manager_get (); + priv->agent_mgr = g_object_ref (nm_agent_manager_get ()); g_signal_connect (priv->agent_mgr, "agent-registered", G_CALLBACK (secret_agent_registered), self); } |