A volatile bool read/store is documented on MSVC to have acquire/release
semantics, respectively, but that doesn't need to be true for MinGW, so
use explicit memory ordering.
Apply the same fix to the Unix implementation, too.
Change-Id: Ica466cec50beed830aafa4e3384d82f02e1a47e8
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Shane Kearns <shane.kearns@accenture.com>
#include "qiodevice.h"
#include <qbytearray.h>
#include <qlibrary.h>
+#include <qbasicatomic.h>
#include <qurl.h>
#include <qfile.h>
#include <private/qmutexpool_p.h>
#endif
// Load res_init on demand.
- static volatile bool triedResolve = false;
- if (!triedResolve) {
+ static QBasicAtomicInt triedResolve = Q_BASIC_ATOMIC_INITIALIZER(false);
+ if (!triedResolve.loadAcquire()) {
QMutexLocker locker(QMutexPool::globalInstanceGet(&local_res_init));
- if (!triedResolve) {
+ if (!triedResolve.load()) {
resolveLibrary();
- triedResolve = true;
+ triedResolve.storeRelease(true);
}
}
#include <ws2tcpip.h>
#include <private/qsystemlibrary_p.h>
#include <qmutex.h>
+#include <qbasicatomic.h>
#include <qurl.h>
#include <private/qmutexpool_p.h>
QWindowsSockInit winSock;
// Load res_init on demand.
- static volatile bool triedResolve = false;
- if (!triedResolve) {
+ static QBasicAtomicInt triedResolve = Q_BASIC_ATOMIC_INITIALIZER(false);
+ if (!triedResolve.loadAcquire()) {
QMutexLocker locker(QMutexPool::globalInstanceGet(&local_getaddrinfo));
- if (!triedResolve) {
+ if (!triedResolve.load()) {
resolveLibrary();
- triedResolve = true;
+ triedResolve.storeRelease(true);
}
}