From 81e26fe9b96b295896bb4d5d596072fea19168d2 Mon Sep 17 00:00:00 2001 From: Takatoshi Kondo Date: Sun, 2 Feb 2014 00:00:31 +0000 Subject: [PATCH 1/2] Fixed the free and delete mismatch problem. https://github.com/msgpack/msgpack-c/issues/52 --- src/msgpack/zone.hpp.erb | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/msgpack/zone.hpp.erb b/src/msgpack/zone.hpp.erb index c6f5481a..705dd34c 100644 --- a/src/msgpack/zone.hpp.erb +++ b/src/msgpack/zone.hpp.erb @@ -44,7 +44,17 @@ public: void clear(); void swap(zone& o); - + static void* operator new(std::size_t size) throw(std::bad_alloc) + { + void* p = ::malloc(size); + if (!p) throw std::bad_alloc(); + return p; + } + static void operator delete(void *p) throw() + { + if (!p) return; + ::free(p); + } <%0.upto(GENERATION_LIMIT) {|i|%> template , typename A<%=j%><%}%>> T* allocate(<%=(1..i).map{|j|"A#{j} a#{j}"}.join(', ')%>); From 8eff14db118093e1c8f3c9b05627df4b90f35de2 Mon Sep 17 00:00:00 2001 From: Takatoshi Kondo Date: Sun, 2 Feb 2014 16:22:07 +0000 Subject: [PATCH 2/2] Removed redundant null check. --- src/msgpack/zone.hpp.erb | 1 - 1 file changed, 1 deletion(-) diff --git a/src/msgpack/zone.hpp.erb b/src/msgpack/zone.hpp.erb index 705dd34c..b2c19db0 100644 --- a/src/msgpack/zone.hpp.erb +++ b/src/msgpack/zone.hpp.erb @@ -52,7 +52,6 @@ public: } static void operator delete(void *p) throw() { - if (!p) return; ::free(p); } <%0.upto(GENERATION_LIMIT) {|i|%>