소스 검색

Make HeapAllocator thread-safe

Daniele Bartolini 12 년 전
부모
커밋
ebeb2d425a
2개의 변경된 파일10개의 추가작업 그리고 1개의 파일을 삭제
  1. 6 1
      engine/core/mem/HeapAllocator.cpp
  2. 4 0
      engine/core/mem/HeapAllocator.h

+ 6 - 1
engine/core/mem/HeapAllocator.cpp

@@ -49,6 +49,8 @@ HeapAllocator::~HeapAllocator()
 //-----------------------------------------------------------------------------
 void* HeapAllocator::allocate(size_t size, size_t align)
 {
+	ScopedMutex sm(m_mutex);
+
 	size_t actual_size = actual_allocation_size(size, align);
 
 	Header* h = (Header*)malloc(actual_size);
@@ -67,6 +69,8 @@ void* HeapAllocator::allocate(size_t size, size_t align)
 //-----------------------------------------------------------------------------
 void HeapAllocator::deallocate(void* data)
 {
+	ScopedMutex sm(m_mutex);
+
 	if (!data) return;
 
 	Header* h = header(data);
@@ -80,14 +84,15 @@ void HeapAllocator::deallocate(void* data)
 //-----------------------------------------------------------------------------
 size_t HeapAllocator::allocated_size()
 {
+	ScopedMutex sm(m_mutex);
 	return m_allocated_size;
 }
 
 //-----------------------------------------------------------------------------
 size_t HeapAllocator::get_size(void* data)
 {
+	ScopedMutex sm(m_mutex);
 	Header* h = header(data);
-
 	return h->size;
 }
 

+ 4 - 0
engine/core/mem/HeapAllocator.h

@@ -27,6 +27,7 @@ OTHER DEALINGS IN THE SOFTWARE.
 #pragma once
 
 #include "Allocator.h"
+#include "ScopedMutex.h"
 
 namespace crown
 {
@@ -64,6 +65,9 @@ private:
 	void*		data(Header* header, size_t align);
 	void		pad(Header* header, void* data);
 
+private:
+
+	Mutex		m_mutex;
 	size_t		m_allocated_size;
 	uint32_t	m_allocation_count;
 };