From 4a065a934f1f6620385edfa717d93b90a8cedf02 Mon Sep 17 00:00:00 2001
From: Pietro Incardona <i-bird@localhost.localdomain>
Date: Tue, 22 Mar 2016 18:22:07 +0100
Subject: [PATCH] Fixing destroy

---
 src/Makefile.am            |  2 +-
 src/memory/BHeapMemory.hpp |  4 ++--
 src/memory/HeapMemory.cpp  | 18 +++++++++++-------
 src/memory/HeapMemory.hpp  |  2 +-
 4 files changed, 15 insertions(+), 11 deletions(-)

diff --git a/src/Makefile.am b/src/Makefile.am
index 7a117da..70ae67d 100755
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -22,7 +22,7 @@ libofpmmemory_se2_a_SOURCES = memory/HeapMemory.cpp $(CUDA_SOURCES) memory/PtrMe
 libofpmmemory_se2_a_CXXFLAGS = $(INCLUDES_PATH) $(BOOST_CPPFLAGS) -I/usr/local/include -DSE_CLASS2
 libofpmmemory_se2_a_CFLAGS = 
 
-nobase_include_HEADERS = memory/ExtPreAlloc.hpp memory/HeapMemory.hpp memory/memory.hpp memory/PreAllocHeapMemory.hpp memory/PtrMemory.hpp \
+nobase_include_HEADERS = memory/ExtPreAlloc.hpp memory/BHeapMemory.hpp  memory/HeapMemory.hpp memory/memory.hpp memory/PreAllocHeapMemory.hpp memory/PtrMemory.hpp \
 Memleak_check.hpp ptr_info.hpp \
 util/se_util.hpp
 
diff --git a/src/memory/BHeapMemory.hpp b/src/memory/BHeapMemory.hpp
index 71a54c6..ec087d8 100644
--- a/src/memory/BHeapMemory.hpp
+++ b/src/memory/BHeapMemory.hpp
@@ -64,7 +64,7 @@ public:
 
 	//! Constructor, we choose a default alignment of 32 for avx
 	BHeapMemory()
-	:HeapMemory()
+	:HeapMemory(),buf_sz(0)
 	{};
 
 	virtual ~BHeapMemory()
@@ -118,7 +118,7 @@ public:
 	 * \return true if the resize operation complete correctly
 	 *
 	 */
-	virtual size_t size()
+	virtual size_t size() const
 	{
 		return buf_sz;
 	}
diff --git a/src/memory/HeapMemory.cpp b/src/memory/HeapMemory.cpp
index 1901fa7..348656a 100644
--- a/src/memory/HeapMemory.cpp
+++ b/src/memory/HeapMemory.cpp
@@ -67,6 +67,10 @@ void HeapMemory::destroy()
 
 	if (dmOrig != NULL)
 		delete [] dmOrig;
+
+	sz = 0;
+	dm = NULL;
+	dmOrig = NULL;
 }
 
 
@@ -166,13 +170,13 @@ size_t HeapMemory::size() const
 bool HeapMemory::resize(size_t sz)
 {
 	// if the allocated memory is enough, do not resize
-	if (sz <= size())
+	if (sz <= HeapMemory::size())
 		return true;
 
 	//! Allocate the device memory if not done yet
 
-	if (size() == 0)
-		return allocate(sz);
+	if (HeapMemory::size() == 0)
+		return HeapMemory::allocate(sz);
 
 	//! Create a new buffer if sz is bigger than the actual size
 	byte * tdm;
@@ -192,16 +196,16 @@ bool HeapMemory::resize(size_t sz)
 	//! copy from the old buffer to the new one
 
 #ifdef SE_CLASS2
-	check_valid(tdm,size());
-	check_valid(dm,size());
+	check_valid(tdm,HeapMemory::size());
+	check_valid(dm,HeapMemory::size());
 #endif
-	memcpy(tdm,dm,size());
+	memcpy(tdm,dm,HeapMemory::size());
 
 	this->sz = sz;
 
 	//! free the old buffer
 
-	destroy();
+	HeapMemory::destroy();
 
 	//! change to the new buffer
 
diff --git a/src/memory/HeapMemory.hpp b/src/memory/HeapMemory.hpp
index 82fba22..01ce5f6 100644
--- a/src/memory/HeapMemory.hpp
+++ b/src/memory/HeapMemory.hpp
@@ -140,7 +140,7 @@ public:
 	virtual ~HeapMemory()
 	{
 		if(ref_cnt == 0)
-			destroy();
+			HeapMemory::destroy();
 		else
 			std::cerr << "Error: " << __FILE__ << " " << __LINE__ << " destroying a live object" << "\n";
 	};
-- 
GitLab