Prechádzať zdrojové kódy

Make ScratchAllocator thread-safe

Daniele Bartolini 10 rokov pred
rodič
commit
ece5e6c8ad
1 zmenil súbory, kde vykonal 11 pridanie a 4 odobranie
  1. 11 4
      src/core/memory/memory.cpp

+ 11 - 4
src/core/memory/memory.cpp

@@ -190,6 +190,7 @@ namespace memory
 	// allocator to allocate memory instead.
 	class ScratchAllocator : public Allocator
 	{
+		Mutex _mutex;
 		Allocator &_backing;
 
 		// Start and end of the ring buffer.
@@ -227,8 +228,10 @@ namespace memory
 			return p >= _free || p < _allocate;
 		}
 
-		virtual void *allocate(u32 size, u32 align)
+		void *allocate(u32 size, u32 align)
 		{
+			ScopedMutex sm(_mutex);
+
 			CE_ASSERT(align % 4 == 0, "Must be 4-byte aligned");
 			size = ((size + 3)/4)*4;
 
@@ -256,8 +259,10 @@ namespace memory
 			return data;
 		}
 
-		virtual void deallocate(void *p)
+		void deallocate(void *p)
 		{
+			ScopedMutex sm(_mutex);
+
 			if (!p)
 				return;
 
@@ -283,14 +288,16 @@ namespace memory
 			}
 		}
 
-		virtual u32 allocated_size(const void *p)
+		u32 allocated_size(const void *p)
 		{
+			ScopedMutex sm(_mutex);
 			Header* h = header(p);
 			return h->size - u32((char*)p - (char*)h);
 		}
 
-		virtual u32 total_allocated()
+		u32 total_allocated()
 		{
+			ScopedMutex sm(_mutex);
 			return u32(_end - _begin);
 		}
 	};