summaryrefslogtreecommitdiffstats
path: root/c++/src/H5DataSet.cpp
diff options
context:
space:
mode:
authorBinh-Minh Ribler <bmribler@hdfgroup.org>2008-07-18 20:49:32 (GMT)
committerBinh-Minh Ribler <bmribler@hdfgroup.org>2008-07-18 20:49:32 (GMT)
commitd6dc8a4dfd95ea0e6b3b6d9cfbb8ea5aad4c19d3 (patch)
treec025346989add6028cfa41893f0641171b22663d /c++/src/H5DataSet.cpp
parent99e21e85c94327b6a525aa87a6d11547fc944f41 (diff)
downloadhdf5-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.cpp11
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;
}
}