diff options
author | Binh-Minh Ribler <bmribler@hdfgroup.org> | 2010-05-06 16:15:05 (GMT) |
---|---|---|
committer | Binh-Minh Ribler <bmribler@hdfgroup.org> | 2010-05-06 16:15:05 (GMT) |
commit | ec7f4dc603484d18cde1af79c2906c68cec1ad3b (patch) | |
tree | c6c2e2f97031a7a63950c338c4ba4d36e1d713b7 | |
parent | 809a91fad6dbeb1fe08c4e8a194b31e2d50a800e (diff) | |
download | hdf5-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)
-rw-r--r-- | c++/src/H5AbstractDs.cpp | 17 |
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); } //-------------------------------------------------------------------------- |