diff options
author | Neil Fortner <nfortne2@hdfgroup.org> | 2010-09-15 15:29:38 (GMT) |
---|---|---|
committer | Neil Fortner <nfortne2@hdfgroup.org> | 2010-09-15 15:29:38 (GMT) |
commit | cb9a804f82bfe32451b4033d8a421efc60e5521e (patch) | |
tree | 333cc7049904dbf78df9d1c9ec146022f4e32eb3 /src | |
parent | 96c26d2b17f28af6a25a7cd61449b1bac06b996d (diff) | |
download | hdf5-cb9a804f82bfe32451b4033d8a421efc60e5521e.zip hdf5-cb9a804f82bfe32451b4033d8a421efc60e5521e.tar.gz hdf5-cb9a804f82bfe32451b4033d8a421efc60e5521e.tar.bz2 |
[svn-r19386] Purpose: Fix assertion failure caused by fractal heap header file pointer
Description:
The fractal heap header structure keeps a pointer to the file associated with
it. However, it is possible for that file pointer to be closed while the
header is still in cache (through the shared file pointer). Previously, the
header's file pointer was not updated and subsequently pointed to an invalid
file structure. Modified fractal heap code to update the file pointer every
time the header is accessed.
Tested: jam, linew, amani (h5committest)
Diffstat (limited to 'src')
-rw-r--r-- | src/H5HF.c | 6 | ||||
-rw-r--r-- | src/H5HFhdr.c | 3 |
2 files changed, 3 insertions, 6 deletions
@@ -859,9 +859,6 @@ HDfprintf(stderr, "%s; After iterator reset fh->hdr->rc = %Zu\n", FUNC, fh->hdr- if(NULL == (hdr = H5HF_hdr_protect(fh->f, dxpl_id, heap_addr, H5AC_WRITE))) HGOTO_ERROR(H5E_HEAP, H5E_CANTPROTECT, FAIL, "unable to protect fractal heap header") - /* Set the shared heap header's file context for this operation */ - hdr->f = fh->f; - /* Delete heap, starting with header (unprotects header) */ if(H5HF_hdr_delete(hdr, dxpl_id) < 0) HGOTO_ERROR(H5E_HEAP, H5E_CANTDELETE, FAIL, "unable to delete fractal heap") @@ -913,9 +910,6 @@ HDfprintf(stderr, "%s: fh_addr = %a\n", FUNC, fh_addr); if(hdr->file_rc) hdr->pending_delete = TRUE; else { - /* Set the shared heap header's file context for this operation */ - hdr->f = f; - /* Delete heap now, starting with header (unprotects header) */ if(H5HF_hdr_delete(hdr, dxpl_id) < 0) HGOTO_ERROR(H5E_HEAP, H5E_CANTDELETE, FAIL, "unable to delete fractal heap") diff --git a/src/H5HFhdr.c b/src/H5HFhdr.c index e678d74..684c171 100644 --- a/src/H5HFhdr.c +++ b/src/H5HFhdr.c @@ -552,6 +552,9 @@ H5HF_hdr_protect(H5F_t *f, hid_t dxpl_id, haddr_t addr, H5AC_protect_t rw) /* Set the header's address */ hdr->heap_addr = addr; + /* Update header's file pointer */ + hdr->f = f; + /* Set the return value */ ret_value = hdr; |