summaryrefslogtreecommitdiff
path: root/libnm-glib/nm-secret-agent.c
diff options
context:
space:
mode:
authorDan Winship <danw@gnome.org>2012-04-23 11:02:48 -0400
committerDan Winship <danw@gnome.org>2012-04-23 16:09:58 -0400
commitbe18dd06cd138be232ff68ec7af19cfcf2f969ed (patch)
tree79142d51b6ada6abde403cdb3095d6e4558cad6f /libnm-glib/nm-secret-agent.c
parent411cb363444177369e55e98d613ae35ae7bddd81 (diff)
downloadNetworkManager-be18dd06cd138be232ff68ec7af19cfcf2f969ed.tar.gz
libnm-glib: NULL out priv fields on dispose()
In some situations, objects might get used after being disposed, so clear out their various priv fields so we don't try to access unreffed objects, freed strings, etc. https://bugzilla.gnome.org/show_bug.cgi?id=674473
Diffstat (limited to 'libnm-glib/nm-secret-agent.c')
-rw-r--r--libnm-glib/nm-secret-agent.c37
1 files changed, 17 insertions, 20 deletions
diff --git a/libnm-glib/nm-secret-agent.c b/libnm-glib/nm-secret-agent.c
index 19f55c0e2d..02f7419b90 100644
--- a/libnm-glib/nm-secret-agent.c
+++ b/libnm-glib/nm-secret-agent.c
@@ -79,8 +79,6 @@ typedef struct {
gboolean auto_register;
gboolean suppress_auto;
gboolean auto_register_id;
-
- gboolean disposed;
} NMSecretAgentPrivate;
enum {
@@ -878,29 +876,28 @@ dispose (GObject *object)
NMSecretAgent *self = NM_SECRET_AGENT (object);
NMSecretAgentPrivate *priv = NM_SECRET_AGENT_GET_PRIVATE (self);
- if (!priv->disposed) {
- priv->disposed = TRUE;
-
- if (priv->registered)
- nm_secret_agent_unregister (self);
-
- if (priv->auto_register_id)
- g_source_remove (priv->auto_register_id);
+ if (priv->registered)
+ nm_secret_agent_unregister (self);
- g_free (priv->identifier);
- g_free (priv->nm_owner);
+ if (priv->auto_register_id) {
+ g_source_remove (priv->auto_register_id);
+ priv->auto_register_id = 0;
+ }
- while (priv->pending_gets)
- get_secrets_info_finalize (self, priv->pending_gets->data);
+ g_free (priv->identifier);
+ priv->identifier = NULL;
+ g_free (priv->nm_owner);
+ priv->nm_owner = NULL;
- if (priv->dbus_proxy)
- g_object_unref (priv->dbus_proxy);
+ while (priv->pending_gets)
+ get_secrets_info_finalize (self, priv->pending_gets->data);
- if (priv->manager_proxy)
- g_object_unref (priv->manager_proxy);
+ g_clear_object (&priv->dbus_proxy);
+ g_clear_object (&priv->manager_proxy);
- if (priv->bus)
- dbus_g_connection_unref (priv->bus);
+ if (priv->bus) {
+ dbus_g_connection_unref (priv->bus);
+ priv->bus = NULL;
}
G_OBJECT_CLASS (nm_secret_agent_parent_class)->dispose (object);