Revert "QMutexPool: avoid QVarLengthArray of QAtomicPointers"
This reverts commit 4579d966af.
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>
bb10
parent
efd2ea8ea7
commit
b084739b89
|
|
@ -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();
|
||||
}
|
||||
|
||||
/*!
|
||||
|
|
|
|||
|
|
@ -66,7 +66,7 @@ public:
|
|||
~QMutexPool();
|
||||
|
||||
inline QMutex *get(const void *address) {
|
||||
int index = uint(quintptr(address)) % count;
|
||||
int index = uint(quintptr(address)) % mutexes.count();
|
||||
QMutex *m = mutexes[index].load();
|
||||
if (m)
|
||||
return m;
|
||||
|
|
@ -78,8 +78,7 @@ public:
|
|||
|
||||
private:
|
||||
QMutex *createMutex(int index);
|
||||
int count;
|
||||
QAtomicPointer<QMutex> *mutexes;
|
||||
QVarLengthArray<QAtomicPointer<QMutex>, 131> mutexes;
|
||||
QMutex::RecursionMode recursionMode;
|
||||
};
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue