From 3a9e9cc075ee8f6e34c77587ca47cdfada2c7a6f Mon Sep 17 00:00:00 2001 From: Vesa Date: Sun, 24 Aug 2014 14:42:09 +0300 Subject: [PATCH] Use ReadWriteLock for the pools container instead of Mutex --- include/MemoryManager.h | 3 ++- src/core/MemoryManager.cpp | 6 +++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/include/MemoryManager.h b/include/MemoryManager.h index 5ff2d34ff..aa154baff 100644 --- a/include/MemoryManager.h +++ b/include/MemoryManager.h @@ -29,6 +29,7 @@ #include #include #include +#include #include #include "MemoryHelper.h" @@ -96,7 +97,7 @@ public: private: static MemoryPoolVector s_memoryPools; - static QMutex s_poolMutex; + static QReadWriteLock s_poolMutex; static PointerInfoMap s_pointerInfo; static QMutex s_pointerMutex; diff --git a/src/core/MemoryManager.cpp b/src/core/MemoryManager.cpp index 83a7942ae..0464a40d8 100644 --- a/src/core/MemoryManager.cpp +++ b/src/core/MemoryManager.cpp @@ -30,7 +30,7 @@ MemoryPoolVector MemoryManager::s_memoryPools; -QMutex MemoryManager::s_poolMutex; +QReadWriteLock MemoryManager::s_poolMutex; PointerInfoMap MemoryManager::s_pointerInfo; QMutex MemoryManager::s_pointerMutex; @@ -56,7 +56,7 @@ void * MemoryManager::alloc( size_t size ) MemoryPoolVector::iterator it = s_memoryPools.begin(); - s_poolMutex.lock(); + s_poolMutex.lockForRead(); while( it != s_memoryPools.end() && !ptr ) { ptr = ( *it ).getChunks( requiredChunks ); @@ -129,7 +129,7 @@ int MemoryManager::extend( int chunks ) MemoryPool m ( chunks ); m.m_pool = MemoryHelper::alignedMalloc( chunks * MM_CHUNK_SIZE ); - s_poolMutex.lock(); + s_poolMutex.lockForWrite(); s_memoryPools.append( m ); int i = s_memoryPools.size() - 1; s_poolMutex.unlock();