summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorRaymond Lu <songyulu@hdfgroup.org>2007-11-05 22:13:43 (GMT)
committerRaymond Lu <songyulu@hdfgroup.org>2007-11-05 22:13:43 (GMT)
commitf877f94c13de1df96866aa420496f2c0a9fab60d (patch)
tree79b382ff5bab009122eb3c4f4711fa92283caabd /src
parentf0124823867f2ce6a807c396a71ef28156c53ed7 (diff)
downloadhdf5-f877f94c13de1df96866aa420496f2c0a9fab60d.zip
hdf5-f877f94c13de1df96866aa420496f2c0a9fab60d.tar.gz
hdf5-f877f94c13de1df96866aa420496f2c0a9fab60d.tar.bz2
[svn-r14238] Bug fix: It's reported by the CGNS people. When an external link was opened twice, the library
had some trouble to close in the end. The problem came from the field "holding_file" of H5O_loc_t. It's used to indicate special links like external links. The fix is to turn it off whenever H5O_open is called. Later the caller function should turn it on when it needs to. Tested on kagiso, linew, and smirom.
Diffstat (limited to 'src')
-rw-r--r--src/H5A.c6
-rw-r--r--src/H5L.c3
-rw-r--r--src/H5O.c14
-rw-r--r--src/H5Oprivate.h2
4 files changed, 15 insertions, 10 deletions
diff --git a/src/H5A.c b/src/H5A.c
index 4a09fde..8e464af 100644
--- a/src/H5A.c
+++ b/src/H5A.c
@@ -223,8 +223,7 @@ H5Acreate2(hid_t loc_id, const char *attr_name, hid_t type_id, hid_t space_id,
hid_t ret_value; /* Return value */
FUNC_ENTER_API(H5Acreate2, FAIL)
- H5TRACE6("i", "i*siiii", loc_id, attr_name, type_id, space_id,
- acpl_id, aapl_id);
+ H5TRACE6("i", "i*siiii", loc_id, attr_name, type_id, space_id, acpl_id, aapl_id);
/* check arguments */
if(H5I_ATTR == H5I_get_type(loc_id))
@@ -1869,8 +1868,7 @@ H5Aiterate2(hid_t loc_id, H5_index_t idx_type, H5_iter_order_t order,
herr_t ret_value; /* Return value */
FUNC_ENTER_API(H5Aiterate2, FAIL)
- H5TRACE6("e", "iIiIo*hx*x", loc_id, idx_type, order, idx, op,
- op_data);
+ H5TRACE6("e", "iIiIo*hx*x", loc_id, idx_type, order, idx, op, op_data);
/* check arguments */
if(H5I_ATTR == H5I_get_type(loc_id))
diff --git a/src/H5L.c b/src/H5L.c
index 78a78f2..020f7c2 100644
--- a/src/H5L.c
+++ b/src/H5L.c
@@ -1152,8 +1152,7 @@ H5Literate(hid_t grp_id, H5_index_t idx_type, H5_iter_order_t order,
herr_t ret_value; /* Return value */
FUNC_ENTER_API(H5Literate, FAIL)
- H5TRACE6("e", "iIiIo*hx*x", grp_id, idx_type, order, idx_p, op,
- op_data);
+ H5TRACE6("e", "iIiIo*hx*x", grp_id, idx_type, order, idx_p, op, op_data);
/* Check arguments */
id_type = H5I_get_type(grp_id);
diff --git a/src/H5O.c b/src/H5O.c
index 15cafc5..94435f5 100644
--- a/src/H5O.c
+++ b/src/H5O.c
@@ -1051,10 +1051,15 @@ done:
* Programmer: Robb Matzke
* Monday, January 5, 1998
*
+ * Modification:
+ * Raymond Lu
+ * 5 November 2007
+ * Turn off the holding file variable if it's on. When it's
+ * needed, the caller will turn it on again.
*-------------------------------------------------------------------------
*/
herr_t
-H5O_open(const H5O_loc_t *loc)
+H5O_open(H5O_loc_t *loc)
{
herr_t ret_value = SUCCEED; /* Return value */
@@ -1069,8 +1074,11 @@ H5O_open(const H5O_loc_t *loc)
HDfprintf(H5DEBUG(O), "> %a\n", loc->addr);
#endif
- /* Increment open-lock counters */
- loc->file->nopen_objs++;
+ /* Turn off the variable for holding file or increment open-lock counters */
+ if(loc->holding_file)
+ loc->holding_file = FALSE;
+ else
+ loc->file->nopen_objs++;
done:
FUNC_LEAVE_NOAPI(ret_value)
diff --git a/src/H5Oprivate.h b/src/H5Oprivate.h
index 06c5ebf..31738a9 100644
--- a/src/H5Oprivate.h
+++ b/src/H5Oprivate.h
@@ -533,7 +533,7 @@ struct H5P_genplist_t;
H5_DLL herr_t H5O_init(void);
H5_DLL herr_t H5O_create(H5F_t *f, hid_t dxpl_id, size_t size_hint,
hid_t ocpl_id, H5O_loc_t *loc/*out*/);
-H5_DLL herr_t H5O_open(const H5O_loc_t *loc);
+H5_DLL herr_t H5O_open(H5O_loc_t *loc);
H5_DLL herr_t H5O_close(H5O_loc_t *loc);
H5_DLL int H5O_link(const H5O_loc_t *loc, int adjust, hid_t dxpl_id);
H5_DLL struct H5O_t *H5O_protect(H5O_loc_t *loc, hid_t dxpl_id);