QDBusMetaTypeId: replace a volatile bool with an atomic int
authorMarc Mutz <marc.mutz@kdab.com>
Fri, 24 Aug 2012 07:47:55 +0000 (09:47 +0200)
committerThe Qt Project <gerrit-noreply@qt-project.org>
Sat, 22 Sep 2012 17:19:41 +0000 (19:19 +0200)
Since there is no non-atomic data that is protected by 'initialized'
anymore, the read from, and the store to, 'initialized' may now have
relaxed memory ordering.

Change-Id: I58004e782d9fd93122efb31fa5b30ee160646d99
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
src/dbus/qdbusmetatype.cpp

index d8ee0b3..31b57d1 100644 (file)
@@ -91,11 +91,11 @@ inline static void registerHelper(T * = 0)
 
 void QDBusMetaTypeId::init()
 {
-    static volatile bool initialized = false;
+    static QBasicAtomicInt initialized = Q_BASIC_ATOMIC_INITIALIZER(false);
 
     // reentrancy is not a problem since everything else is locked on their own
     // set the guard variable at the end
-    if (!initialized) {
+    if (!initialized.load()) {
         // register our types with QtCore (calling qMetaTypeId<T>() does this implicitly)
         (void)message();
         (void)argument();
@@ -135,7 +135,7 @@ void QDBusMetaTypeId::init()
         qDBusRegisterMetaType<QList<QDBusUnixFileDescriptor> >();
 #endif
 
-        initialized = true;
+        initialized.store(true);
     }
 }