summaryrefslogtreecommitdiffstats
path: root/src/H5EAhdr.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/H5EAhdr.c')
-rw-r--r--src/H5EAhdr.c19
1 files changed, 10 insertions, 9 deletions
diff --git a/src/H5EAhdr.c b/src/H5EAhdr.c
index b8d3334..d3cd260 100644
--- a/src/H5EAhdr.c
+++ b/src/H5EAhdr.c
@@ -478,7 +478,7 @@ H5EA__hdr_incr(H5EA_hdr_t *hdr))
/* Mark header as un-evictable when something is depending on it */
if(hdr->rc == 0)
- if(H5AC_pin_protected_entry(hdr->f, hdr) < 0)
+ if(H5AC_pin_protected_entry(hdr) < 0)
H5E_THROW(H5E_CANTPIN, "unable to pin extensible array header")
/* Increment reference count on shared header */
@@ -516,7 +516,7 @@ H5EA__hdr_decr(H5EA_hdr_t *hdr))
/* Mark header as evictable again when nothing depend on it */
if(hdr->rc == 0) {
HDassert(hdr->file_rc == 0);
- if(H5AC_unpin_entry(hdr->f, hdr) < 0)
+ if(H5AC_unpin_entry(hdr) < 0)
H5E_THROW(H5E_CANTUNPIN, "unable to unpin extensible array header")
} /* end if */
@@ -603,7 +603,7 @@ H5EA__hdr_modified(H5EA_hdr_t *hdr))
HDassert(hdr->f);
/* Mark header as dirty in cache */
- if(H5AC_mark_pinned_or_protected_entry_dirty(hdr->f, hdr) < 0)
+ if(H5AC_mark_pinned_or_protected_entry_dirty(hdr) < 0)
H5E_THROW(H5E_CANTMARKDIRTY, "unable to mark extensible array header as dirty")
CATCH
@@ -628,6 +628,9 @@ BEGIN_FUNC(PKG, ERR,
herr_t, SUCCEED, FAIL,
H5EA__hdr_delete(H5EA_hdr_t *hdr, hid_t dxpl_id))
+ /* Local variables */
+ unsigned cache_flags = H5AC__NO_FLAGS_SET; /* Flags for unprotecting header */
+
/* Sanity check */
HDassert(hdr);
HDassert(!hdr->file_rc);
@@ -656,15 +659,13 @@ HDfprintf(stderr, "%s: hdr->idx_blk_addr = %a\n", FUNC, hdr->idx_blk_addr);
H5E_THROW(H5E_CANTDELETE, "unable to delete extensible array index block")
} /* end if */
- /* Finished deleting header */
- if(H5AC_unprotect(hdr->f, dxpl_id, H5AC_EARRAY_HDR, hdr->addr, hdr, H5AC__DIRTIED_FLAG | H5AC__DELETED_FLAG | H5AC__FREE_FILE_SPACE_FLAG) < 0)
- H5E_THROW(H5E_CANTUNPROTECT, "unable to release extensible array header")
- hdr = NULL;
+ /* Set flags to finish deleting header on unprotect */
+ cache_flags |= H5AC__DIRTIED_FLAG | H5AC__DELETED_FLAG | H5AC__FREE_FILE_SPACE_FLAG;
CATCH
- /* Unprotect the header, if an error occurred */
- if(hdr && H5AC_unprotect(hdr->f, dxpl_id, H5AC_EARRAY_HDR, hdr->addr, hdr, H5AC__NO_FLAGS_SET) < 0)
+ /* Unprotect the header, deleting it if an error hasn't occurred */
+ if(H5AC_unprotect(hdr->f, dxpl_id, H5AC_EARRAY_HDR, hdr->addr, hdr, cache_flags) < 0)
H5E_THROW(H5E_CANTUNPROTECT, "unable to release extensible array header")
END_FUNC(PKG) /* end H5EA__hdr_delete() */