diff --git a/src/corelib/thread/qmutexpool.cpp b/src/corelib/thread/qmutexpool.cpp index 90b6989467..522fd5eac2 100644 --- a/src/corelib/thread/qmutexpool.cpp +++ b/src/corelib/thread/qmutexpool.cpp @@ -92,11 +92,10 @@ Q_GLOBAL_STATIC_WITH_ARGS(QMutexPool, globalMutexPool, (QMutex::Recursive)) QMutexPool is destructed. */ QMutexPool::QMutexPool(QMutex::RecursionMode recursionMode, int size) - : mutexes(size), recursionMode(recursionMode) + : count(size), + mutexes(new QAtomicPointer[size]()), // (): zero-initialize + recursionMode(recursionMode) { - for (int index = 0; index < mutexes.count(); ++index) { - mutexes[index].store(0); - } } /*! @@ -105,8 +104,8 @@ QMutexPool::QMutexPool(QMutex::RecursionMode recursionMode, int size) */ QMutexPool::~QMutexPool() { - for (int index = 0; index < mutexes.count(); ++index) - delete mutexes[index].load(); + qDeleteAll(mutexes, mutexes + count); + delete[] mutexes; } /*! diff --git a/src/corelib/thread/qmutexpool_p.h b/src/corelib/thread/qmutexpool_p.h index 796e65d960..33e9a52cb7 100644 --- a/src/corelib/thread/qmutexpool_p.h +++ b/src/corelib/thread/qmutexpool_p.h @@ -66,7 +66,7 @@ public: ~QMutexPool(); inline QMutex *get(const void *address) { - int index = uint(quintptr(address)) % mutexes.count(); + int index = uint(quintptr(address)) % count; QMutex *m = mutexes[index].load(); if (m) return m; @@ -78,7 +78,8 @@ public: private: QMutex *createMutex(int index); - QVarLengthArray, 131> mutexes; + int count; + QAtomicPointer *mutexes; QMutex::RecursionMode recursionMode; };