diff options
author | Thomas Haller <thaller@redhat.com> | 2015-02-16 15:36:55 +0100 |
---|---|---|
committer | Thomas Haller <thaller@redhat.com> | 2015-02-16 16:09:40 +0100 |
commit | 80700b5d889cf4d96eec56f0e6f9157036c2d70c (patch) | |
tree | 58a2cd826cdd8399544d16b61ae13c1568e0d1a8 | |
parent | 5e74891b58688a19c43fb8e50880166d94a4e901 (diff) | |
download | NetworkManager-80700b5d889cf4d96eec56f0e6f9157036c2d70c.tar.gz |
dbus-manager: refactor singleton getter dropping g_once_init_enter()
The class itself is not thread-safe, so no need for guarding
the creation with g_once_init_*().
Also, assert against multiple creation and log a line when
creating the singleton. The getter is now more similar to what
is created by NM_DEFINE_SINGLETON_GETTER().
-rw-r--r-- | src/nm-dbus-manager.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/src/nm-dbus-manager.c b/src/nm-dbus-manager.c index e29c23dc21..65ba8803c8 100644 --- a/src/nm-dbus-manager.c +++ b/src/nm-dbus-manager.c @@ -80,19 +80,20 @@ static void object_destroyed (NMDBusManager *self, gpointer object); NM_DEFINE_SINGLETON_DESTRUCTOR (NMDBusManager); NM_DEFINE_SINGLETON_WEAK_REF (NMDBusManager); +static char singleton_already_created = FALSE; NMDBusManager * nm_dbus_manager_get (void) { - static gsize once = 0; - - if (g_once_init_enter (&once)) { - singleton_instance = (NMDBusManager *) g_object_new (NM_TYPE_DBUS_MANAGER, NULL); + if (G_UNLIKELY (!singleton_instance)) { + g_assert (!singleton_already_created); + singleton_already_created = TRUE; + singleton_instance = g_object_new (NM_TYPE_DBUS_MANAGER, NULL); g_assert (singleton_instance); nm_singleton_instance_weak_ref_register (); + nm_log_dbg (LOGD_CORE, "create %s singleton (%p)", "NMDBusManager", singleton_instance); if (!nm_dbus_manager_init_bus (singleton_instance)) start_reconnection_timeout (singleton_instance); - g_once_init_leave (&once, 1); } return singleton_instance; } |