From 3b93dc0dc34008cf25b2b12f6b026b3d9e4ed623 Mon Sep 17 00:00:00 2001
From: lichao <lichao@aiotlink.com>
Date: 星期五, 30 四月 2021 12:48:14 +0800
Subject: [PATCH] guard shm alloc; rm OnWrite,dup lock in shm queue.

---
 src/shm.h |   15 +++++++++++++--
 1 files changed, 13 insertions(+), 2 deletions(-)

diff --git a/src/shm.h b/src/shm.h
index 515d856..cb487df 100644
--- a/src/shm.h
+++ b/src/shm.h
@@ -96,6 +96,7 @@
 class SharedMemory : public mshm_t
 {
 	std::string name_;
+	Mutex *pmutex_ = 0;
 
 	static permissions AllowAll()
 	{
@@ -122,19 +123,29 @@
 	{
 		return construct<T>(name.c_str(), std::nothrow)(std::forward<decltype(params)>(params)...);
 	}
-	void *Alloc(const size_t size) { return allocate(size, std::nothrow); }
+	void *Alloc(const size_t size)
+	{
+		Guard lock(*pmutex_);
+		return allocate(size, std::nothrow);
+	}
 	void Dealloc(void *p)
 	{
+		Guard lock(*pmutex_);
 		if (p) { deallocate(p); }
 	}
 	template <class T>
 	void Dealloc(offset_ptr<T> ptr) { return Dealloc(ptr.get()); }
 
 	template <class T, class... Params>
-	T *New(Params &&...params) { return construct<T>(anonymous_instance, std::nothrow)(std::forward<decltype(params)>(params)...); }
+	T *New(Params &&...params)
+	{
+		Guard lock(*pmutex_);
+		return construct<T>(anonymous_instance, std::nothrow)(std::forward<decltype(params)>(params)...);
+	}
 	template <class T>
 	void Delete(T *p)
 	{
+		Guard lock(*pmutex_);
 		if (p) { destroy_ptr<T>(p); };
 	}
 	template <class T>

--
Gitblit v1.8.0