diff options
| author | Thiago Macieira <thiago.macieira@intel.com> | 2016-05-14 11:17:48 -0700 |
|---|---|---|
| committer | Jani Heikkinen <jani.heikkinen@qt.io> | 2016-05-24 17:54:54 +0000 |
| commit | b084739b89fbd32047d454075daf147073926f18 (patch) | |
| tree | d81459990206c05dbb514c0fdf1659604ad57193 /src/corelib/thread/qmutexpool.cpp | |
| parent | efd2ea8ea720833f9602154221d9654aea1f2e6f (diff) | |
| download | qtbase-b084739b89fbd32047d454075daf147073926f18.tar.gz | |
Revert "QMutexPool: avoid QVarLengthArray of QAtomicPointers"
This reverts commit 4579d966af2e5d4ba229f13312eeb2f921406038.
This causes a miscompilation with ICC 16 on Windows (MSVC 2015 ABI): the
vector created by new[] with () in:
mutexes(new QAtomicPointer<QMutex>[size]()), // (): zero-initialize
does not actually zero-initialize (see disassembly in the bug
report). This is definitely a compiler bug.
Since we plan on removing QMutexPool in Qt 5.8 anyway, let's just revert
the patch.
Task-number: QTBUG-53360
Change-Id: I06bae9392f534e45b3f1ffff144e823b747e7962
Reviewed-by: Kai Koehne <kai.koehne@qt.io>
Diffstat (limited to 'src/corelib/thread/qmutexpool.cpp')
| -rw-r--r-- | src/corelib/thread/qmutexpool.cpp | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/src/corelib/thread/qmutexpool.cpp b/src/corelib/thread/qmutexpool.cpp index 522fd5eac2..90b6989467 100644 --- a/src/corelib/thread/qmutexpool.cpp +++ b/src/corelib/thread/qmutexpool.cpp @@ -92,10 +92,11 @@ Q_GLOBAL_STATIC_WITH_ARGS(QMutexPool, globalMutexPool, (QMutex::Recursive)) QMutexPool is destructed. */ QMutexPool::QMutexPool(QMutex::RecursionMode recursionMode, int size) - : count(size), - mutexes(new QAtomicPointer<QMutex>[size]()), // (): zero-initialize - recursionMode(recursionMode) + : mutexes(size), recursionMode(recursionMode) { + for (int index = 0; index < mutexes.count(); ++index) { + mutexes[index].store(0); + } } /*! @@ -104,8 +105,8 @@ QMutexPool::QMutexPool(QMutex::RecursionMode recursionMode, int size) */ QMutexPool::~QMutexPool() { - qDeleteAll(mutexes, mutexes + count); - delete[] mutexes; + for (int index = 0; index < mutexes.count(); ++index) + delete mutexes[index].load(); } /*! |
