summaryrefslogtreecommitdiffstats
path: root/c++/src
diff options
context:
space:
mode:
authorBinh-Minh Ribler <bmribler@hdfgroup.org>2010-05-06 16:15:05 (GMT)
committerBinh-Minh Ribler <bmribler@hdfgroup.org>2010-05-06 16:15:05 (GMT)
commitec7f4dc603484d18cde1af79c2906c68cec1ad3b (patch)
treec6c2e2f97031a7a63950c338c4ba4d36e1d713b7 /c++/src
parent809a91fad6dbeb1fe08c4e8a194b31e2d50a800e (diff)
downloadhdf5-ec7f4dc603484d18cde1af79c2906c68cec1ad3b.zip
hdf5-ec7f4dc603484d18cde1af79c2906c68cec1ad3b.tar.gz
hdf5-ec7f4dc603484d18cde1af79c2906c68cec1ad3b.tar.bz2
[svn-r18727] Purpose: Fixed bug 1719
Description: Closed a temporarily opened datatype to clean up memory leak, in getTypeClass. Platforms tested: Linux/32 2.6 (jam) FreeBSD/64 6.3 (liberty) SunOS 5.10 (linew)
Diffstat (limited to 'c++/src')
-rw-r--r--c++/src/H5AbstractDs.cpp17
1 files changed, 14 insertions, 3 deletions
diff --git a/c++/src/H5AbstractDs.cpp b/c++/src/H5AbstractDs.cpp
index 19eeb33..9cf1ee8 100644
--- a/c++/src/H5AbstractDs.cpp
+++ b/c++/src/H5AbstractDs.cpp
@@ -81,15 +81,26 @@ H5T_class_t AbstractDs::getTypeClass() const
// Gets the class of the datatype and validate it before returning
H5T_class_t type_class = H5Tget_class(datatype_id);
- if( type_class != H5T_NO_CLASS )
- return( type_class );
- else
+
+ // Close temporary datatype_id
+ herr_t ret_value = H5Tclose(datatype_id);
+ if (ret_value < 0)
+ {
+ if (fromClass() == "DataSet")
+ throw DataTypeIException("DataSet::getTypeClass", "H5Tclose failed");
+ else if (fromClass() == "Attribute")
+ throw DataTypeIException("Attribute::getTypeClass", "H5Tclose failed");
+ }
+
+ // Check on the returned type_class
+ if (type_class == H5T_NO_CLASS)
{
if (fromClass() == "DataSet")
throw DataTypeIException("DataSet::getTypeClass", "H5Tget_class returns H5T_NO_CLASS");
else if (fromClass() == "Attribute")
throw DataTypeIException("Attribute::getTypeClass", "H5Tget_class returns H5T_NO_CLASS");
}
+ return(type_class);
}
//--------------------------------------------------------------------------