[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