diff options
author | Raymond Lu <songyulu@hdfgroup.org> | 2008-07-22 20:36:31 (GMT) |
---|---|---|
committer | Raymond Lu <songyulu@hdfgroup.org> | 2008-07-22 20:36:31 (GMT) |
commit | 8704820d1c56165fcf930ab21adebea0a48c664f (patch) | |
tree | b74991b3c84c1a6d52e1003c7668863b1fd3dfb4 /c++/src/H5DataType.cpp | |
parent | 717388ea0683ff9db970cd8f8998ba9b94d62cf0 (diff) | |
download | hdf5-8704820d1c56165fcf930ab21adebea0a48c664f.zip hdf5-8704820d1c56165fcf930ab21adebea0a48c664f.tar.gz hdf5-8704820d1c56165fcf930ab21adebea0a48c664f.tar.bz2 |
[svn-r15395] When an attribute was opened twice and data was written with one of the handles,
the file didn't have the data. It happened because each handle had its own
object structure, and the empty one overwrote the data with fill value. This is
fixed by making some attribute information like the data be shared in the
attribute structure.
Tested on smirom, kagiso, and linew.
Diffstat (limited to 'c++/src/H5DataType.cpp')
-rw-r--r-- | c++/src/H5DataType.cpp | 17 |
1 files changed, 4 insertions, 13 deletions
diff --git a/c++/src/H5DataType.cpp b/c++/src/H5DataType.cpp index 592d800..9575823 100644 --- a/c++/src/H5DataType.cpp +++ b/c++/src/H5DataType.cpp @@ -717,9 +717,6 @@ void DataType::setId(const hid_t new_id) } // reset object's id to the given id id = new_id; - - // increment the reference counter of the new id - incRefCount(); } //-------------------------------------------------------------------------- @@ -738,8 +735,10 @@ void DataType::close() { throw DataTypeIException(inMemFunc("close"), "H5Tclose failed"); } - // reset the id because the datatype that it represents is now closed - id = 0; + // reset the id when the datatype that it represents is no longer + // referenced + if (getCounter() == 0) + id = 0; } } @@ -755,19 +754,11 @@ void DataType::close() //-------------------------------------------------------------------------- DataType::~DataType() { - int counter = getCounter(id); - if (counter > 1) - { - decRefCount(id); - } - else if (counter == 1) - { try { close(); } catch (Exception close_error) { cerr << inMemFunc("~DataType - ") << close_error.getDetailMsg() << endl; } - } } #ifndef H5_NO_NAMESPACE } // end namespace |