diff options
author | Binh-Minh Ribler <bmribler@hdfgroup.org> | 2008-07-18 20:49:32 (GMT) |
---|---|---|
committer | Binh-Minh Ribler <bmribler@hdfgroup.org> | 2008-07-18 20:49:32 (GMT) |
commit | d6dc8a4dfd95ea0e6b3b6d9cfbb8ea5aad4c19d3 (patch) | |
tree | c025346989add6028cfa41893f0641171b22663d /c++/src/H5DataSet.cpp | |
parent | 99e21e85c94327b6a525aa87a6d11547fc944f41 (diff) | |
download | hdf5-d6dc8a4dfd95ea0e6b3b6d9cfbb8ea5aad4c19d3.zip hdf5-d6dc8a4dfd95ea0e6b3b6d9cfbb8ea5aad4c19d3.tar.gz hdf5-d6dc8a4dfd95ea0e6b3b6d9cfbb8ea5aad4c19d3.tar.bz2 |
[svn-r15386] Purpose: Fix bug
Description:
A bug in reference counter was exposed when Ray fixed H5Awrite in
the main library. ::setId() called incRefCount when it shouldn't.
Made sure that id's reference counter is manually incremented
properly in copy constructor and operator= only. The main library
handles the rest.
Platforms tested:
SunOS 5.10 (linew)
Linux 2.6 (kagiso)
FreeBSD (duty)
Diffstat (limited to 'c++/src/H5DataSet.cpp')
-rw-r--r-- | c++/src/H5DataSet.cpp | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/c++/src/H5DataSet.cpp b/c++/src/H5DataSet.cpp index be80949..5ee84b1 100644 --- a/c++/src/H5DataSet.cpp +++ b/c++/src/H5DataSet.cpp @@ -69,11 +69,10 @@ DataSet::DataSet(const hid_t existing_id) : AbstractDs(), H5Object() ///\param original - IN: DataSet instance to copy // Programmer Binh-Minh Ribler - 2000 //-------------------------------------------------------------------------- -DataSet::DataSet(const DataSet& original) : AbstractDs(original), H5Object() +DataSet::DataSet(const DataSet& original) : AbstractDs(original), H5Object(original) { id = original.getId(); incRefCount(); // increment number of references to this id - } //-------------------------------------------------------------------------- @@ -559,7 +558,7 @@ void DataSet::setId(const hid_t new_id) id = new_id; // increment the reference counter of the new id - incRefCount(); + //incRefCount(); } //-------------------------------------------------------------------------- @@ -578,8 +577,10 @@ void DataSet::close() { throw DataSetIException("DataSet::close", "H5Dclose failed"); } - // reset the id because the dataset that it represents is now closed - id = 0; + // reset the id when the dataset that it represents is no longer + // referenced + if (getCounter() == 0) + id = 0; } } |