Bug fix FixedSizeMemoryPool
[platform/core/uifw/dali-core.git] / dali / internal / common / fixed-size-memory-pool.cpp
index 8b69193..63e3f4b 100644 (file)
@@ -19,6 +19,7 @@
 #include <dali/internal/common/fixed-size-memory-pool.h>
 
 // INTERNAL HEADERS
+#include <dali/devel-api/threading/mutex.h>
 #include <dali/public-api/common/dali-common.h>
 
 namespace Dali
@@ -74,7 +75,8 @@ struct FixedSizeMemoryPool::Impl
    * @brief Constructor
    */
   Impl( SizeType fixedSize, SizeType initialCapacity, SizeType maximumBlockCapacity )
-  :  mFixedSize( fixedSize ),
+  :  mMutex(),
+     mFixedSize( fixedSize ),
      mMemoryBlocks( initialCapacity * mFixedSize ),
      mMaximumBlockCapacity( maximumBlockCapacity ),
      mCurrentBlock( &mMemoryBlocks ),
@@ -123,6 +125,8 @@ struct FixedSizeMemoryPool::Impl
     mCurrentBlockSize = 0;
   }
 
+  Mutex mMutex;                       ///< Mutex for thread-safe allocation and deallocation
+
   SizeType mFixedSize;                ///< The size of each allocation in bytes
 
   Block mMemoryBlocks;                ///< Linked list of allocated memory blocks
@@ -176,6 +180,19 @@ void FixedSizeMemoryPool::Free( void* memory )
   mImpl->mDeletedObjects = memory;
 }
 
+void* FixedSizeMemoryPool::AllocateThreadSafe()
+{
+  Mutex::ScopedLock lock( mImpl->mMutex );
+  return Allocate();
+}
+
+void FixedSizeMemoryPool::FreeThreadSafe( void* memory )
+{
+  Mutex::ScopedLock lock( mImpl->mMutex );
+  Free( memory );
+}
+
+
 } // namespace Internal
 
 } // namespace Dali