diff options
author | Binh-Minh Ribler <bmribler@hdfgroup.org> | 2015-04-06 23:47:09 (GMT) |
---|---|---|
committer | Binh-Minh Ribler <bmribler@hdfgroup.org> | 2015-04-06 23:47:09 (GMT) |
commit | 343a52747c234f41da2e007a696786a51f74ad69 (patch) | |
tree | e5e0d34cc44afb19c5d13c89a9b19037f4284a38 /c++/src/H5DataType.cpp | |
parent | 5a810576d55f21ee8a872b904026647358113836 (diff) | |
download | hdf5-343a52747c234f41da2e007a696786a51f74ad69.zip hdf5-343a52747c234f41da2e007a696786a51f74ad69.tar.gz hdf5-343a52747c234f41da2e007a696786a51f74ad69.tar.bz2 |
[svn-r26743] Purpose: Fix daily test failure
Description:
- In DataType::DataType(const PredType& pred_type), using DataType::copy
will invoke DataType::close() unnecessarily, which will produce undefined
behavior. Changed to call H5Tcopy directly, code reuse is not useful in
this case.
- Also, fixed CommonFG::childObjVersion to return expected value outside of
an if/else block.
Merged from trunk r26737.
Platforms tested:
Linux/ppc64 (ostrich)
Linux/64 (platypus)
Linux/32 2.6 (jam)
Diffstat (limited to 'c++/src/H5DataType.cpp')
-rw-r--r-- | c++/src/H5DataType.cpp | 21 |
1 files changed, 13 insertions, 8 deletions
diff --git a/c++/src/H5DataType.cpp b/c++/src/H5DataType.cpp index aed0dd1..714f55f 100644 --- a/c++/src/H5DataType.cpp +++ b/c++/src/H5DataType.cpp @@ -123,7 +123,7 @@ DataType::DataType(const H5Location& loc, const void* ref, H5R_type_t ref_type) // Jul, 2008 // Added for application convenience. //-------------------------------------------------------------------------- -DataType::DataType(const Attribute& attr, const void* ref, H5R_type_t ref_type) : H5Object(), id(H5I_INVALID_HID) +DataType::DataType(const Attribute& attr, const void* ref, H5R_type_t ref_type) : H5Object() { id = H5Location::p_dereference(attr.getId(), ref, ref_type, "constructor - by dereference"); } @@ -141,18 +141,23 @@ DataType::DataType(const DataType& original) : H5Object() //-------------------------------------------------------------------------- // Function: DataType overloaded constructor -///\brief Creates a integer type using a predefined type -///\param pred_type - IN: Predefined datatype +///\brief Creates a DataType instance using a predefined type +///\param pred_type - IN: Predefined type instance ///\exception H5::DataTypeIException -// Programmer Binh-Minh Ribler - 2000 +// Programmer Binh-Minh Ribler - 2015 // Description -// This is so that when a predefined type is passed in, a -// copy of it is made, not just a duplicate of the HDF5 id. +// Copying the type so that when a predefined type is passed in, +// a copy of it is made, not just a duplicate of the HDF5 id. +// Note: calling DataType::copy will invoke DataType::close() +// unnecessarily and will produce undefined behavior. +// -BMR, Apr 2015 //-------------------------------------------------------------------------- DataType::DataType(const PredType& pred_type) : H5Object() { - // use DataType::copy to make a copy of this predefined type - copy(pred_type); + // call C routine to copy the datatype + id = H5Tcopy( pred_type.getId() ); + if( id < 0 ) + throw DataTypeIException("DataType constructor", "H5Tcopy failed"); } //-------------------------------------------------------------------------- |