[clfft] 07/74: addressing the memory leaks as reported #119

Ghislain Vaillant ghisvail-guest at moszumanska.debian.org
Thu Jan 14 19:52:12 UTC 2016


This is an automated email from the git hooks/post-receive script.

ghisvail-guest pushed a commit to branch debian/sid
in repository clfft.

commit 5dba1a1cf1234da8b1a27aac50530e84ba7e83bb
Author: bragadeesh <bragadeesh.natarajan at amd>
Date:   Wed Nov 11 15:59:27 2015 -0800

    addressing the memory leaks as reported #119
---
 src/library/fft_binary_lookup.cpp | 56 ++++++++++++++++++++++++++++++++++++---
 src/library/fft_binary_lookup.h   |  5 ++--
 src/library/plan.h                |  6 +++++
 src/library/repo.h                | 14 +++++-----
 4 files changed, 69 insertions(+), 12 deletions(-)

diff --git a/src/library/fft_binary_lookup.cpp b/src/library/fft_binary_lookup.cpp
index 7a26b6c..b85b87e 100644
--- a/src/library/fft_binary_lookup.cpp
+++ b/src/library/fft_binary_lookup.cpp
@@ -159,8 +159,17 @@ FFTBinaryLookup::FFTBinaryLookup(const clfftGenerators gen, const clfftPlanHandl
 
 FFTBinaryLookup::~FFTBinaryLookup()
 {
-    delete [] this->m_binary;
-    delete [] this->m_signature;
+	if (this->m_binary != NULL)
+	{
+		delete[] this->m_binary;
+		this->m_binary = 0;
+	}
+
+	if (this->m_signature != NULL)
+	{
+		delete[] this->m_signature;
+		this->m_signature = 0;
+	}
 }
 
 FFTBinaryLookup::Variant::Variant()
@@ -175,10 +184,37 @@ FFTBinaryLookup::Variant::Variant(VariantKind kind, char * data, size_t size)
     memcpy(this->m_data, data, size);
 }
 
+FFTBinaryLookup::Variant::Variant(const Variant &obj)
+	: m_kind(obj.m_kind), m_size(obj.m_size)
+{
+	this->m_data = new char[this->m_size];
+	memcpy(this->m_data, obj.m_data, m_size);
+}
+
+FFTBinaryLookup::Variant &FFTBinaryLookup::Variant::operator=(const Variant &obj)
+{
+	if (this->m_data != NULL)
+	{
+		delete[] this->m_data;
+		this->m_data = 0;
+	}
+
+	m_kind = obj.m_kind;
+	m_size = obj.m_size;
+
+	this->m_data = new char[this->m_size];
+	memcpy(this->m_data, obj.m_data, m_size);
+
+	return *this;
+}
+
 FFTBinaryLookup::Variant::~Variant()
 {
-	// if(this->m_data)
-	// 	delete [] this->m_data;
+	if (this->m_data != NULL)
+	{
+		delete[] this->m_data;
+		this->m_data = 0;
+	}
 }
 
 void FFTBinaryLookup::variantInt(int num)
@@ -245,6 +281,12 @@ void FFTBinaryLookup::finalizeVariant()
 
     this->m_header.signature_size = whole_variant_size_in_bytes;
 
+	if (this->m_signature != NULL)
+	{
+		delete[] this->m_signature;
+		this->m_signature = 0;
+	}
+
     this->m_signature = new char[whole_variant_size_in_bytes];
     char * current_address = this->m_signature;
     for(size_t i=0 ; i<this->m_variants.size() ; ++i)
@@ -303,6 +345,12 @@ bool FFTBinaryLookup::loadBinaryAndSignature(std::ifstream &file)
     }
 
     {
+		if (this->m_signature != NULL)
+		{
+			delete[] this->m_signature;
+			this->m_signature = 0;
+		}
+
         this->m_signature = new char [this->m_header.signature_size];
         const std::istream& res = file.read((char*)this->m_signature, this->m_header.signature_size);
 
diff --git a/src/library/fft_binary_lookup.h b/src/library/fft_binary_lookup.h
index 5775f89..19081f3 100644
--- a/src/library/fft_binary_lookup.h
+++ b/src/library/fft_binary_lookup.h
@@ -238,6 +238,9 @@ private:
     {
         Variant();
         Variant(VariantKind kind, char * data, size_t size);
+		Variant(const Variant &obj);
+		Variant &operator=(const Variant &obj);
+
 
         ~Variant();
 
@@ -245,8 +248,6 @@ private:
         size_t      m_size;
         char *      m_data;
         
-        static char * serialize(VariantKind kind, char * data, size_t size);
-        static Variant unserialize(char * data);
     };
 
     // Cache entry, useful to abstract Windows and linux 
diff --git a/src/library/plan.h b/src/library/plan.h
index ef7937f..bb4d689 100644
--- a/src/library/plan.h
+++ b/src/library/plan.h
@@ -526,6 +526,12 @@ public:
 	~FFTPlan ()
 	{
 		ReleaseBuffers ();
+
+		if (action != NULL)
+		{
+			delete action;
+			action = 0;
+		}
 	}
 };
 
diff --git a/src/library/repo.h b/src/library/repo.h
index ffe102e..df274ef 100644
--- a/src/library/repo.h
+++ b/src/library/repo.h
@@ -43,9 +43,10 @@ class	FFTRepo
         const FFTKernelSignatureHeader * data;
         cl_context context;
 		cl_device_id device;
+		bool dataIsPrivate;
 
         FFTRepoKey(clfftGenerators gen_, const FFTKernelSignatureHeader * data_, cl_context context_, cl_device_id device_)
-            : gen(gen_), data(data_), context(context_), device(device_)
+            : gen(gen_), data(data_), context(context_), device(device_), dataIsPrivate(false)
         {
 
         }
@@ -55,16 +56,17 @@ class	FFTRepo
             char * tmp = new char[data->datasize];
             ::memcpy(tmp, data, data->datasize);
             this->data = (FFTKernelSignatureHeader*) tmp;
+			dataIsPrivate = true;
         }
 
         void deleteData()
         {
-            if (this->data)
+            if ( dataIsPrivate && (this->data != NULL) )
             {
-                delete this->data;
-            }
-
-            this->data = NULL;
+				char *tmp = (char *)(this->data);
+                delete[] tmp;
+				this->data = 0;
+            }            
         }
 
         bool operator<(const FFTRepoKey & b) const

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-science/packages/clfft.git



More information about the debian-science-commits mailing list