summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLarry Knox <lrknox@hdfgroup.org>2022-05-02 20:23:40 (GMT)
committerGitHub <noreply@github.com>2022-05-02 20:23:40 (GMT)
commit47e3d5e79522d8030a5a455521524a80cd9ef064 (patch)
treefc7afd4b6026a7f1abd0b443a3906b98fc231805
parent974aefb8416d78b0687a54e5f72f21d0ca72ae2d (diff)
downloadhdf5-47e3d5e79522d8030a5a455521524a80cd9ef064.zip
hdf5-47e3d5e79522d8030a5a455521524a80cd9ef064.tar.gz
hdf5-47e3d5e79522d8030a5a455521524a80cd9ef064.tar.bz2
Fix SWMR/refresh bug hidden by library free lists (#1702) (#1711)
-rw-r--r--src/H5Oflush.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/src/H5Oflush.c b/src/H5Oflush.c
index eeba525..5f0ba88 100644
--- a/src/H5Oflush.c
+++ b/src/H5Oflush.c
@@ -280,8 +280,9 @@ done:
herr_t
H5O_refresh_metadata(hid_t oid, H5O_loc_t oloc)
{
- H5VL_object_t *vol_obj = NULL; /* VOL object associated with the ID */
- hbool_t objs_incr = FALSE; /* Whether the object count in the file was incremented */
+ H5VL_object_t *vol_obj = NULL; /* VOL object associated with the ID */
+ hbool_t objs_incr = FALSE; /* Whether the object count in the file was incremented */
+ H5F_t * file = NULL;
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_NOAPI(FAIL)
@@ -294,6 +295,11 @@ H5O_refresh_metadata(hid_t oid, H5O_loc_t oloc)
H5O_shared_t cached_H5O_shared;
H5VL_t * connector = NULL;
+ /* Hold a copy of the object's file pointer, since closing the object will
+ * invalidate the file pointer in the oloc.
+ */
+ file = oloc.file;
+
/* Create empty object location */
obj_loc.oloc = &obj_oloc;
obj_loc.path = &obj_path;
@@ -342,8 +348,8 @@ H5O_refresh_metadata(hid_t oid, H5O_loc_t oloc)
} /* end if */
done:
- if (objs_incr)
- H5F_decr_nopen_objs(oloc.file);
+ if (objs_incr && file)
+ H5F_decr_nopen_objs(file);
FUNC_LEAVE_NOAPI(ret_value);
} /* end H5O_refresh_metadata() */