Fix SWMR/refresh bug hidden by library free lists (#1702)
This commit is contained in:
@@ -194,8 +194,9 @@ done:
|
||||
herr_t
|
||||
H5O_refresh_metadata(H5O_loc_t *oloc, hid_t oid)
|
||||
{
|
||||
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)
|
||||
@@ -208,6 +209,11 @@ H5O_refresh_metadata(H5O_loc_t *oloc, hid_t oid)
|
||||
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;
|
||||
@@ -256,8 +262,8 @@ H5O_refresh_metadata(H5O_loc_t *oloc, hid_t oid)
|
||||
} /* 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() */
|
||||
|
||||
Reference in New Issue
Block a user