summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2015-08-05 11:34:10 +0200
committerThomas Haller <thaller@redhat.com>2015-08-05 14:40:41 +0200
commit7c169cd5d974c9fbabd40749d9ab5890aa2a4faf (patch)
treeab5a48268bda4b6bea6f9210809dfd1fdcd12754
parenteb950d57662ccfb95db76afd7efed79b7b2acb93 (diff)
downloadNetworkManager-7c169cd5d974c9fbabd40749d9ab5890aa2a4faf.tar.gz
fixup! core: order destruction of singleton instances
Remove the @register_destruction argument from nm_singleton_instance_register() and always register singletons for destruction. For NMPlatform, intentionally leak the instance for now, and fix it later.
-rw-r--r--src/NetworkManagerUtils.h7
-rw-r--r--src/nm-auth-manager.c2
-rw-r--r--src/nm-bus-manager.c2
-rw-r--r--src/nm-config.c2
-rw-r--r--src/platform/nm-platform.c7
5 files changed, 12 insertions, 8 deletions
diff --git a/src/NetworkManagerUtils.h b/src/NetworkManagerUtils.h
index 5ad973bdf8..118534b8b3 100644
--- a/src/NetworkManagerUtils.h
+++ b/src/NetworkManagerUtils.h
@@ -44,11 +44,10 @@ _singleton_instance_weak_ref_cb (gpointer data, \
singleton_instance = NULL; \
} \
static inline void \
-nm_singleton_instance_register (gboolean register_destruction) \
+nm_singleton_instance_register () \
{ \
g_object_weak_ref (G_OBJECT (singleton_instance), _singleton_instance_weak_ref_cb, NULL); \
- if (register_destruction) \
- _nm_singleton_instance_register_destruction (G_OBJECT (singleton_instance)); \
+ _nm_singleton_instance_register_destruction (G_OBJECT (singleton_instance)); \
}
void _nm_singleton_instance_register_destruction (GObject *instance);
@@ -72,7 +71,7 @@ GETTER (void) \
_already_created = TRUE;\
singleton_instance = (g_object_new (GTYPE, ##__VA_ARGS__, NULL)); \
g_assert (singleton_instance); \
- nm_singleton_instance_register (TRUE); \
+ nm_singleton_instance_register (); \
nm_log_dbg (LOGD_CORE, "create %s singleton (%p)", G_STRINGIFY (TYPE), singleton_instance); \
} \
return singleton_instance; \
diff --git a/src/nm-auth-manager.c b/src/nm-auth-manager.c
index fb75fb72b2..298bc096fe 100644
--- a/src/nm-auth-manager.c
+++ b/src/nm-auth-manager.c
@@ -498,7 +498,7 @@ nm_auth_manager_setup (gboolean polkit_enabled)
_LOGD ("set instance");
singleton_instance = self;
- nm_singleton_instance_register (TRUE);
+ nm_singleton_instance_register ();
return self;
}
diff --git a/src/nm-bus-manager.c b/src/nm-bus-manager.c
index fdb93e2636..e604746c18 100644
--- a/src/nm-bus-manager.c
+++ b/src/nm-bus-manager.c
@@ -102,7 +102,7 @@ nm_bus_manager_setup (NMBusManager *instance)
already_setup = TRUE;
singleton_instance = instance;
- nm_singleton_instance_register (TRUE);
+ nm_singleton_instance_register ();
nm_log_dbg (LOGD_CORE, "create %s singleton (%p)", "NMBusManager", singleton_instance);
}
diff --git a/src/nm-config.c b/src/nm-config.c
index 00dee19daf..71ff69be57 100644
--- a/src/nm-config.c
+++ b/src/nm-config.c
@@ -1687,7 +1687,7 @@ nm_config_setup (const NMConfigCmdLineOptions *cli, char **atomic_section_prefix
singleton_instance = nm_config_new (cli, atomic_section_prefixes, error);
if (singleton_instance)
- nm_singleton_instance_register (TRUE);
+ nm_singleton_instance_register ();
return singleton_instance;
}
diff --git a/src/platform/nm-platform.c b/src/platform/nm-platform.c
index 8d19b0301b..6af39050ee 100644
--- a/src/platform/nm-platform.c
+++ b/src/platform/nm-platform.c
@@ -154,7 +154,12 @@ nm_platform_setup (NMPlatform *instance)
singleton_instance = instance;
- nm_singleton_instance_register (FALSE);
+ nm_singleton_instance_register ();
+
+ /* FIXME: intentionally leak the singleton instance of NMPlatform.
+ * We don't yet shut down all singletons properly, so don't destroy
+ * NMPlatform. */
+ g_object_ref (instance);
nm_log_dbg (LOGD_CORE, "setup NMPlatform singleton (%p, %s)", instance, G_OBJECT_TYPE_NAME (instance));
}