From e87f3dd558a96c6ebedd03a8ac8acb91cb5e1be8 Mon Sep 17 00:00:00 2001 From: Binh-Minh Ribler Date: Thu, 6 May 2010 12:00:29 -0500 Subject: [svn-r18728] 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) --- c++/src/H5AbstractDs.cpp | 17 ++++++++++++++--- 1 file 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); } //-------------------------------------------------------------------------- -- cgit v0.12