diff options
author | Binh-Minh Ribler <bmribler@hdfgroup.org> | 2015-04-06 17:46:54 (GMT) |
---|---|---|
committer | Binh-Minh Ribler <bmribler@hdfgroup.org> | 2015-04-06 17:46:54 (GMT) |
commit | 4275900a7b99b2e23f13df54ba24159960fc86b5 (patch) | |
tree | 716338fc6f597ea0c10c1e6181d63b3349102fae /c++/src/H5DataType.cpp | |
parent | b9e5e2af4e31b0a60c2d2f6421fb1b3cb9aa0564 (diff) | |
download | hdf5-4275900a7b99b2e23f13df54ba24159960fc86b5.zip hdf5-4275900a7b99b2e23f13df54ba24159960fc86b5.tar.gz hdf5-4275900a7b99b2e23f13df54ba24159960fc86b5.tar.bz2 |
[svn-r26737] 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.
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 | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/c++/src/H5DataType.cpp b/c++/src/H5DataType.cpp index a227843..cdcd1e6 100644 --- a/c++/src/H5DataType.cpp +++ b/c++/src/H5DataType.cpp @@ -106,7 +106,7 @@ DataType::DataType( const H5T_class_t type_class, size_t size ) : H5Object() // Jul, 2008 // Added for application convenience. //-------------------------------------------------------------------------- -DataType::DataType(const H5Location& loc, const void* ref, H5R_type_t ref_type, const PropList& plist) : H5Object(), id(H5I_INVALID_HID) +DataType::DataType(const H5Location& loc, const void* ref, H5R_type_t ref_type, const PropList& plist) : H5Object() { id = H5Location::p_dereference(loc.getId(), ref, ref_type, plist, "constructor - by dereference"); } @@ -148,13 +148,18 @@ DataType::DataType(const DataType& original) : H5Object() ///\exception H5::DataTypeIException // Programmer Binh-Minh Ribler - 2000 // 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"); } //-------------------------------------------------------------------------- |