mirror of
https://github.com/HDFGroup/hdf5.git
synced 2025-04-12 17:31:09 +08:00
[svn-r7467] Purpose:
Code cleanup Description: Patch up a few places where the metadata cache could ask for a read lock instead of a write lock and other minor code cleanups. Platforms tested: FreeBSD 4.9 (sleipnir) too minor to need h5committest Misc. update:
This commit is contained in:
parent
1a8d15116a
commit
987e281c8a
42
src/H5B.c
42
src/H5B.c
@ -619,6 +619,9 @@ H5B_find(H5F_t *f, hid_t dxpl_id, const H5B_class_t *type, haddr_t addr, void *u
|
||||
H5B_t *bt = NULL;
|
||||
unsigned idx=0, lt = 0, rt; /* Final, left & right key indices */
|
||||
int cmp = 1; /* Key comparison value */
|
||||
int level; /* Level of B-tree node */
|
||||
haddr_t child; /* Address of child to recurse to */
|
||||
void *nkey1, *nkey2; /* Native keys of child */
|
||||
int ret_value = SUCCEED; /* Return value */
|
||||
|
||||
FUNC_ENTER_NOAPI(H5B_find, FAIL)
|
||||
@ -637,7 +640,7 @@ H5B_find(H5F_t *f, hid_t dxpl_id, const H5B_class_t *type, haddr_t addr, void *u
|
||||
* Perform a binary search to locate the child which contains
|
||||
* the thing for which we're searching.
|
||||
*/
|
||||
if (NULL == (bt = H5AC_protect(f, dxpl_id, H5AC_BT, addr, type, udata, H5AC_WRITE)))
|
||||
if (NULL == (bt = H5AC_protect(f, dxpl_id, H5AC_BT, addr, type, udata, H5AC_READ)))
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTLOAD, FAIL, "unable to load B-tree node")
|
||||
rt = bt->nchildren;
|
||||
|
||||
@ -660,16 +663,28 @@ H5B_find(H5F_t *f, hid_t dxpl_id, const H5B_class_t *type, haddr_t addr, void *u
|
||||
* Follow the link to the subtree or to the data node.
|
||||
*/
|
||||
assert(idx < bt->nchildren);
|
||||
if (bt->level > 0) {
|
||||
if (H5B_find(f, dxpl_id, type, bt->child[idx], udata) < 0)
|
||||
|
||||
/* Retrieve the rest of the B-tree information, so we can unlock it before recursing */
|
||||
level = bt->level;
|
||||
child = bt->child[idx];
|
||||
nkey1=bt->key[idx].nkey;
|
||||
nkey2=bt->key[idx+1].nkey;
|
||||
|
||||
if (H5AC_unprotect(f, dxpl_id, H5AC_BT, addr, bt, FALSE) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_PROTECT, FAIL, "unable to release B-tree node")
|
||||
|
||||
bt = NULL; /* Make certain future references will be caught */
|
||||
|
||||
if (level > 0) {
|
||||
if (H5B_find(f, dxpl_id, type, child, udata) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_NOTFOUND, FAIL, "key not found in subtree")
|
||||
} else {
|
||||
if ((type->found) (f, dxpl_id, bt->child[idx], bt->key[idx].nkey, udata, bt->key[idx+1].nkey) < 0)
|
||||
if ((type->found) (f, dxpl_id, child, nkey1, udata, nkey2) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_NOTFOUND, FAIL, "key not found in leaf node")
|
||||
}
|
||||
|
||||
done:
|
||||
if (bt && H5AC_unprotect(f, dxpl_id, H5AC_BT, addr, bt, FALSE) < 0 && ret_value>=0)
|
||||
if (bt && H5AC_unprotect(f, dxpl_id, H5AC_BT, addr, bt, FALSE) < 0)
|
||||
HDONE_ERROR(H5E_BTREE, H5E_PROTECT, FAIL, "unable to release node")
|
||||
|
||||
FUNC_LEAVE_NOAPI(ret_value)
|
||||
@ -835,7 +850,7 @@ H5B_split(H5F_t *f, hid_t dxpl_id, const H5B_class_t *type, H5B_t *old_bt, haddr
|
||||
old_bt->right = *new_addr_p;
|
||||
|
||||
done:
|
||||
if (new_bt && H5AC_unprotect(f, dxpl_id, H5AC_BT, *new_addr_p, new_bt, FALSE) < 0 && ret_value>=0)
|
||||
if (new_bt && H5AC_unprotect(f, dxpl_id, H5AC_BT, *new_addr_p, new_bt, FALSE) < 0)
|
||||
HDONE_ERROR(H5E_BTREE, H5E_PROTECT, FAIL, "unable to release B-tree node")
|
||||
|
||||
FUNC_LEAVE_NOAPI(ret_value)
|
||||
@ -1269,7 +1284,7 @@ H5B_insert_helper(H5F_t *f, hid_t dxpl_id, haddr_t addr, const H5B_class_t *type
|
||||
uint8_t *rt_key, hbool_t *rt_key_changed,
|
||||
haddr_t *new_node_p/*out*/)
|
||||
{
|
||||
H5B_t *bt = NULL, *twin = NULL, *tmp_bt = NULL;
|
||||
H5B_t *bt = NULL, *twin = NULL;
|
||||
unsigned lt = 0, idx = 0, rt; /* Left, final & right index values */
|
||||
int cmp = -1; /* Key comparison value */
|
||||
haddr_t child_addr = HADDR_UNDEF;
|
||||
@ -1487,6 +1502,8 @@ H5B_insert_helper(H5F_t *f, hid_t dxpl_id, haddr_t addr, const H5B_class_t *type
|
||||
ret_value = H5B_INS_NOOP;
|
||||
|
||||
} else if (H5B_INS_LEFT == my_ins || H5B_INS_RIGHT == my_ins) {
|
||||
H5B_t *tmp_bt;
|
||||
|
||||
/*
|
||||
* If this node is full then split it before inserting the new child.
|
||||
*/
|
||||
@ -1948,7 +1965,7 @@ H5B_remove_helper(H5F_t *f, hid_t dxpl_id, haddr_t addr, const H5B_class_t *type
|
||||
}
|
||||
|
||||
done:
|
||||
if (bt && H5AC_unprotect(f, dxpl_id, H5AC_BT, addr, bt, FALSE)<0 && ret_value>=0)
|
||||
if (bt && H5AC_unprotect(f, dxpl_id, H5AC_BT, addr, bt, FALSE)<0)
|
||||
HDONE_ERROR(H5E_BTREE, H5E_PROTECT, H5B_INS_ERROR, "unable to release node")
|
||||
|
||||
FUNC_LEAVE_NOAPI(ret_value)
|
||||
@ -2091,14 +2108,9 @@ H5B_delete(H5F_t *f, hid_t dxpl_id, const H5B_class_t *type, haddr_t addr, void
|
||||
if (H5MF_xfree(f, H5FD_MEM_BTREE, dxpl_id, addr, sizeof_node)<0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTFREE, FAIL, "unable to free B-tree node")
|
||||
|
||||
/* Release node in metadata cache */
|
||||
if (H5AC_unprotect(f, dxpl_id, H5AC_BT, addr, bt, TRUE)<0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_PROTECT, FAIL, "unable to release B-tree node in cache")
|
||||
bt=NULL; /* Make certain future references will be caught */
|
||||
|
||||
done:
|
||||
if (bt && H5AC_unprotect(f, dxpl_id, H5AC_BT, addr, bt, FALSE)<0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_PROTECT, FAIL, "unable to release B-tree node in cache")
|
||||
if (bt && H5AC_unprotect(f, dxpl_id, H5AC_BT, addr, bt, TRUE)<0)
|
||||
HDONE_ERROR(H5E_BTREE, H5E_PROTECT, FAIL, "unable to release B-tree node in cache")
|
||||
|
||||
FUNC_LEAVE_NOAPI(ret_value)
|
||||
} /* end H5B_delete() */
|
||||
|
@ -820,7 +820,7 @@ H5G_node_found(H5F_t *f, hid_t dxpl_id, haddr_t addr, const void UNUSED *_lt_key
|
||||
/*
|
||||
* Load the symbol table node for exclusive access.
|
||||
*/
|
||||
if (NULL == (sn = H5AC_protect(f, dxpl_id, H5AC_SNODE, addr, NULL, NULL, H5AC_WRITE)))
|
||||
if (NULL == (sn = H5AC_protect(f, dxpl_id, H5AC_SNODE, addr, NULL, NULL, H5AC_READ)))
|
||||
HGOTO_ERROR(H5E_SYM, H5E_CANTLOAD, FAIL, "unable to protect symbol table node");
|
||||
|
||||
/* Get base address of heap */
|
||||
@ -847,15 +847,15 @@ H5G_node_found(H5F_t *f, hid_t dxpl_id, haddr_t addr, const void UNUSED *_lt_key
|
||||
|
||||
if (bt_udata->operation==H5G_OPER_FIND)
|
||||
/*
|
||||
* The caller is querying the symbol entry. Return just a pointer to
|
||||
* the entry. The pointer is valid until the next call to H5AC.
|
||||
* The caller is querying the symbol entry, copy it into the UDATA
|
||||
* entry field. (Hmm... should this use H5G_ent_copy()? - QAK)
|
||||
*/
|
||||
bt_udata->ent = sn->entry[idx];
|
||||
else
|
||||
HGOTO_ERROR(H5E_SYM, H5E_UNSUPPORTED, FAIL, "internal erorr (unknown symbol find operation)");
|
||||
|
||||
done:
|
||||
if (sn && H5AC_unprotect(f, dxpl_id, H5AC_SNODE, addr, sn, FALSE) < 0 && ret_value>=0)
|
||||
if (sn && H5AC_unprotect(f, dxpl_id, H5AC_SNODE, addr, sn, FALSE) < 0)
|
||||
HDONE_ERROR(H5E_SYM, H5E_PROTECT, FAIL, "unable to release symbol table node");
|
||||
|
||||
FUNC_LEAVE_NOAPI(ret_value);
|
||||
@ -1035,7 +1035,7 @@ H5G_node_insert(H5F_t *f, hid_t dxpl_id, haddr_t addr, void UNUSED *_lt_key,
|
||||
insert_into->nsyms += 1;
|
||||
|
||||
done:
|
||||
if (sn && H5AC_unprotect(f, dxpl_id, H5AC_SNODE, addr, sn, FALSE) < 0 && ret_value!=H5B_INS_ERROR)
|
||||
if (sn && H5AC_unprotect(f, dxpl_id, H5AC_SNODE, addr, sn, FALSE) < 0)
|
||||
HDONE_ERROR(H5E_SYM, H5E_PROTECT, H5B_INS_ERROR, "unable to release symbol table node");
|
||||
|
||||
FUNC_LEAVE_NOAPI(ret_value);
|
||||
@ -1235,7 +1235,7 @@ H5G_node_remove(H5F_t *f, hid_t dxpl_id, haddr_t addr, void *_lt_key/*in,out*/,
|
||||
} /* end else */
|
||||
|
||||
done:
|
||||
if (sn && H5AC_unprotect(f, dxpl_id, H5AC_SNODE, addr, sn, FALSE)<0 && ret_value!=H5B_INS_ERROR)
|
||||
if (sn && H5AC_unprotect(f, dxpl_id, H5AC_SNODE, addr, sn, FALSE)<0)
|
||||
HDONE_ERROR(H5E_SYM, H5E_PROTECT, H5B_INS_ERROR, "unable to release symbol table node");
|
||||
|
||||
FUNC_LEAVE_NOAPI(ret_value);
|
||||
@ -1333,8 +1333,8 @@ H5G_node_iterate (H5F_t *f, hid_t dxpl_id, void UNUSED *_lt_key, haddr_t addr,
|
||||
done:
|
||||
if (sn && H5AC_unprotect(f, dxpl_id, H5AC_SNODE, addr, sn, FALSE) != SUCCEED)
|
||||
HDONE_ERROR(H5E_SYM, H5E_PROTECT, H5B_ITER_ERROR, "unable to release object header");
|
||||
|
||||
name_off = H5MM_xfree (name_off);
|
||||
|
||||
FUNC_LEAVE_NOAPI(ret_value);
|
||||
}
|
||||
|
||||
@ -1377,12 +1377,10 @@ H5G_node_sumup(H5F_t *f, hid_t dxpl_id, void UNUSED *_lt_key, haddr_t addr,
|
||||
|
||||
*num_objs += sn->nsyms;
|
||||
|
||||
if (H5AC_unprotect(f, dxpl_id, H5AC_SNODE, addr, sn, FALSE) != SUCCEED)
|
||||
HGOTO_ERROR(H5E_SYM, H5E_PROTECT, H5B_ITER_ERROR, "unable to release object header");
|
||||
|
||||
sn=NULL; /* Make certain future references will be caught */
|
||||
|
||||
done:
|
||||
if (sn && H5AC_unprotect(f, dxpl_id, H5AC_SNODE, addr, sn, FALSE) != SUCCEED)
|
||||
HDONE_ERROR(H5E_SYM, H5E_PROTECT, H5B_ITER_ERROR, "unable to release object header");
|
||||
|
||||
FUNC_LEAVE_NOAPI(ret_value);
|
||||
}
|
||||
|
||||
@ -1438,12 +1436,10 @@ H5G_node_name(H5F_t *f, hid_t dxpl_id, void UNUSED *_lt_key, haddr_t addr,
|
||||
bt_udata->num_objs += sn->nsyms;
|
||||
}
|
||||
|
||||
if (H5AC_unprotect(f, dxpl_id, H5AC_SNODE, addr, sn, FALSE) != SUCCEED)
|
||||
HGOTO_ERROR(H5E_SYM, H5E_PROTECT, H5B_ITER_ERROR, "unable to release object header");
|
||||
|
||||
sn=NULL; /* Make certain future references will be caught */
|
||||
|
||||
done:
|
||||
if (sn && H5AC_unprotect(f, dxpl_id, H5AC_SNODE, addr, sn, FALSE) != SUCCEED)
|
||||
HDONE_ERROR(H5E_SYM, H5E_PROTECT, H5B_ITER_ERROR, "unable to release object header");
|
||||
|
||||
FUNC_LEAVE_NOAPI(ret_value);
|
||||
}
|
||||
|
||||
@ -1491,12 +1487,10 @@ H5G_node_type(H5F_t *f, hid_t dxpl_id, void UNUSED *_lt_key, haddr_t addr,
|
||||
bt_udata->num_objs += sn->nsyms;
|
||||
}
|
||||
|
||||
if (H5AC_unprotect(f, dxpl_id, H5AC_SNODE, addr, sn, FALSE) != SUCCEED)
|
||||
HGOTO_ERROR(H5E_SYM, H5E_PROTECT, H5B_ITER_ERROR, "unable to release object header");
|
||||
|
||||
sn=NULL; /* Make certain future references will be caught */
|
||||
|
||||
done:
|
||||
if (sn && H5AC_unprotect(f, dxpl_id, H5AC_SNODE, addr, sn, FALSE) != SUCCEED)
|
||||
HDONE_ERROR(H5E_SYM, H5E_PROTECT, H5B_ITER_ERROR, "unable to release object header");
|
||||
|
||||
FUNC_LEAVE_NOAPI(ret_value);
|
||||
}
|
||||
|
||||
@ -1574,9 +1568,6 @@ H5G_node_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr, FILE * stream, int indent,
|
||||
H5G_ent_debug(f, dxpl_id, sn->entry + i, stream, indent, fwidth, heap);
|
||||
}
|
||||
|
||||
H5AC_unprotect(f, dxpl_id, H5AC_SNODE, addr, sn, FALSE);
|
||||
sn = NULL;
|
||||
|
||||
done:
|
||||
if (sn && H5AC_unprotect(f, dxpl_id, H5AC_SNODE, addr, sn, FALSE) < 0)
|
||||
HDONE_ERROR(H5E_SYM, H5E_PROTECT, FAIL, "unable to release symbol table node");
|
||||
|
42
src/H5HG.c
42
src/H5HG.c
@ -788,12 +788,10 @@ H5HG_peek (H5F_t *f, hid_t dxpl_id, H5HG_t *hobj)
|
||||
}
|
||||
}
|
||||
|
||||
if (H5AC_unprotect(f, dxpl_id, H5AC_GHEAP, hobj->addr, heap, FALSE) != SUCCEED)
|
||||
HGOTO_ERROR(H5E_HEAP, H5E_PROTECT, FAIL, "unable to release object header");
|
||||
|
||||
heap=NULL;
|
||||
|
||||
done:
|
||||
if (heap && H5AC_unprotect(f, dxpl_id, H5AC_GHEAP, hobj->addr, heap, FALSE)<0)
|
||||
HDONE_ERROR(H5E_HEAP, H5E_PROTECT, NULL, "unable to release object header");
|
||||
|
||||
FUNC_LEAVE_NOAPI(ret_value);
|
||||
}
|
||||
#endif /* NOT_YET */
|
||||
@ -861,18 +859,11 @@ H5HG_read (H5F_t *f, hid_t dxpl_id, H5HG_t *hobj, void *object/*out*/)
|
||||
}
|
||||
}
|
||||
|
||||
if (H5AC_unprotect(f, dxpl_id, H5AC_GHEAP, hobj->addr, heap, FALSE) != SUCCEED) {
|
||||
heap = NULL;
|
||||
HGOTO_ERROR(H5E_HEAP, H5E_PROTECT, NULL, "unable to release object header");
|
||||
}
|
||||
|
||||
heap = NULL;
|
||||
|
||||
/* Set return value */
|
||||
ret_value=object;
|
||||
|
||||
done:
|
||||
if (heap && H5AC_unprotect(f, dxpl_id, H5AC_GHEAP, hobj->addr, heap, FALSE) != SUCCEED)
|
||||
if (heap && H5AC_unprotect(f, dxpl_id, H5AC_GHEAP, hobj->addr, heap, FALSE)<0)
|
||||
HDONE_ERROR(H5E_HEAP, H5E_PROTECT, NULL, "unable to release object header");
|
||||
|
||||
FUNC_LEAVE_NOAPI(ret_value);
|
||||
@ -913,25 +904,26 @@ H5HG_link (H5F_t *f, hid_t dxpl_id, H5HG_t *hobj, int adjust)
|
||||
if (0==(f->intent & H5F_ACC_RDWR))
|
||||
HGOTO_ERROR (H5E_HEAP, H5E_WRITEERROR, FAIL, "no write intent on file");
|
||||
|
||||
/* Load the heap */
|
||||
if (NULL == (heap = H5AC_protect(f, dxpl_id, H5AC_GHEAP, hobj->addr, NULL, NULL, H5AC_WRITE)))
|
||||
HGOTO_ERROR(H5E_HEAP, H5E_CANTLOAD, FAIL, "unable to load heap");
|
||||
if(adjust!=0) {
|
||||
/* Load the heap */
|
||||
if (NULL == (heap = H5AC_protect(f, dxpl_id, H5AC_GHEAP, hobj->addr, NULL, NULL, H5AC_WRITE)))
|
||||
HGOTO_ERROR(H5E_HEAP, H5E_CANTLOAD, FAIL, "unable to load heap");
|
||||
|
||||
assert (hobj->idx>0 && hobj->idx<heap->nalloc);
|
||||
assert (heap->obj[hobj->idx].begin);
|
||||
if (heap->obj[hobj->idx].nrefs+adjust<0)
|
||||
HGOTO_ERROR (H5E_HEAP, H5E_BADRANGE, FAIL, "new link count would be out of range");
|
||||
if (heap->obj[hobj->idx].nrefs+adjust>H5HG_MAXLINK)
|
||||
HGOTO_ERROR (H5E_HEAP, H5E_BADVALUE, FAIL, "new link count would be out of range");
|
||||
heap->obj[hobj->idx].nrefs += adjust;
|
||||
if (adjust)
|
||||
assert (hobj->idx>0 && hobj->idx<heap->nalloc);
|
||||
assert (heap->obj[hobj->idx].begin);
|
||||
if (heap->obj[hobj->idx].nrefs+adjust<0)
|
||||
HGOTO_ERROR (H5E_HEAP, H5E_BADRANGE, FAIL, "new link count would be out of range");
|
||||
if (heap->obj[hobj->idx].nrefs+adjust>H5HG_MAXLINK)
|
||||
HGOTO_ERROR (H5E_HEAP, H5E_BADVALUE, FAIL, "new link count would be out of range");
|
||||
heap->obj[hobj->idx].nrefs += adjust;
|
||||
heap->cache_info.dirty = TRUE;
|
||||
} /* end if */
|
||||
|
||||
/* Set return value */
|
||||
ret_value=heap->obj[hobj->idx].nrefs;
|
||||
|
||||
done:
|
||||
if (heap && H5AC_unprotect(f, dxpl_id, H5AC_GHEAP, hobj->addr, heap, FALSE) != SUCCEED && ret_value != FAIL)
|
||||
if (heap && H5AC_unprotect(f, dxpl_id, H5AC_GHEAP, hobj->addr, heap, FALSE)<0)
|
||||
HDONE_ERROR(H5E_HEAP, H5E_PROTECT, FAIL, "unable to release object header");
|
||||
|
||||
FUNC_LEAVE_NOAPI(ret_value);
|
||||
|
@ -131,11 +131,9 @@ H5HG_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr, FILE *stream, int indent,
|
||||
}
|
||||
}
|
||||
|
||||
if (H5AC_unprotect(f, dxpl_id, H5AC_GHEAP, addr, h, FALSE) != SUCCEED)
|
||||
HGOTO_ERROR(H5E_HEAP, H5E_PROTECT, FAIL, "unable to release object header");
|
||||
|
||||
h = NULL;
|
||||
|
||||
done:
|
||||
if (h && H5AC_unprotect(f, dxpl_id, H5AC_GHEAP, addr, h, FALSE) != SUCCEED)
|
||||
HDONE_ERROR(H5E_HEAP, H5E_PROTECT, FAIL, "unable to release object header");
|
||||
|
||||
FUNC_LEAVE_NOAPI(ret_value);
|
||||
}
|
||||
|
29
src/H5HL.c
29
src/H5HL.c
@ -639,15 +639,13 @@ H5HL_read(H5F_t *f, hid_t dxpl_id, haddr_t addr, size_t offset, size_t size, voi
|
||||
HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed");
|
||||
HDmemcpy(buf, heap->chunk + H5HL_SIZEOF_HDR(f) + offset, size);
|
||||
|
||||
if (H5AC_unprotect(f, dxpl_id, H5AC_LHEAP, addr, heap, FALSE) != SUCCEED)
|
||||
HGOTO_ERROR(H5E_HEAP, H5E_PROTECT, NULL, "unable to release object header");
|
||||
|
||||
heap=NULL;
|
||||
|
||||
/* Set return value */
|
||||
ret_value=buf;
|
||||
|
||||
done:
|
||||
if (heap && H5AC_unprotect(f, dxpl_id, H5AC_LHEAP, addr, heap, FALSE) != SUCCEED)
|
||||
HDONE_ERROR(H5E_HEAP, H5E_PROTECT, NULL, "unable to release object header");
|
||||
|
||||
FUNC_LEAVE_NOAPI(ret_value);
|
||||
}
|
||||
#endif /* NOT_YET */
|
||||
@ -704,12 +702,10 @@ H5HL_peek(H5F_t *f, hid_t dxpl_id, haddr_t addr, size_t offset)
|
||||
/* Set return value */
|
||||
ret_value = heap->chunk + H5HL_SIZEOF_HDR(f) + offset;
|
||||
|
||||
if (H5AC_unprotect(f, dxpl_id, H5AC_LHEAP, addr, heap, FALSE) != SUCCEED)
|
||||
HGOTO_ERROR(H5E_HEAP, H5E_PROTECT, NULL, "unable to release object header");
|
||||
|
||||
heap=NULL;
|
||||
|
||||
done:
|
||||
if (heap && H5AC_unprotect(f, dxpl_id, H5AC_LHEAP, addr, heap, FALSE) != SUCCEED)
|
||||
HDONE_ERROR(H5E_HEAP, H5E_PROTECT, NULL, "unable to release object header");
|
||||
|
||||
FUNC_LEAVE_NOAPI(ret_value);
|
||||
}
|
||||
|
||||
@ -907,7 +903,7 @@ H5HL_insert(H5F_t *f, hid_t dxpl_id, haddr_t addr, size_t buf_size, const void *
|
||||
ret_value=offset;
|
||||
|
||||
done:
|
||||
if (heap && H5AC_unprotect(f, dxpl_id, H5AC_LHEAP, addr, heap, FALSE) != SUCCEED && ret_value != (size_t)(-1))
|
||||
if (heap && H5AC_unprotect(f, dxpl_id, H5AC_LHEAP, addr, heap, FALSE) != SUCCEED)
|
||||
HDONE_ERROR(H5E_HEAP, H5E_PROTECT, (size_t)(-1), "unable to release object header");
|
||||
|
||||
FUNC_LEAVE_NOAPI(ret_value);
|
||||
@ -1101,7 +1097,7 @@ H5HL_remove(H5F_t *f, hid_t dxpl_id, haddr_t addr, size_t offset, size_t size)
|
||||
heap->freelist = fl;
|
||||
|
||||
done:
|
||||
if (heap && H5AC_unprotect(f, dxpl_id, H5AC_LHEAP, addr, heap, FALSE) != SUCCEED && ret_value != FAIL)
|
||||
if (heap && H5AC_unprotect(f, dxpl_id, H5AC_LHEAP, addr, heap, FALSE) != SUCCEED)
|
||||
HDONE_ERROR(H5E_HEAP, H5E_PROTECT, FAIL, "unable to release object header");
|
||||
|
||||
FUNC_LEAVE_NOAPI(ret_value);
|
||||
@ -1167,15 +1163,8 @@ H5HL_delete(H5F_t *f, hid_t dxpl_id, haddr_t addr)
|
||||
HGOTO_ERROR(H5E_HEAP, H5E_CANTFREE, FAIL, "unable to free local heap data");
|
||||
} /* end else */
|
||||
|
||||
/* Release the local heap metadata from the cache */
|
||||
if (H5AC_unprotect(f, dxpl_id, H5AC_LHEAP, addr, heap, TRUE)<0) {
|
||||
heap = NULL;
|
||||
HGOTO_ERROR(H5E_HEAP, H5E_PROTECT, FAIL, "unable to release local heap");
|
||||
}
|
||||
heap = NULL;
|
||||
|
||||
done:
|
||||
if (heap && H5AC_unprotect(f, dxpl_id, H5AC_LHEAP, addr, heap, FALSE)<0 && ret_value<0)
|
||||
if (heap && H5AC_unprotect(f, dxpl_id, H5AC_LHEAP, addr, heap, TRUE)<0)
|
||||
HDONE_ERROR(H5E_HEAP, H5E_PROTECT, FAIL, "unable to release local heap");
|
||||
|
||||
FUNC_LEAVE_NOAPI(ret_value);
|
||||
|
@ -168,14 +168,11 @@ H5HL_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr, FILE * stream, int indent, int
|
||||
HDfputc('\n', stream);
|
||||
}
|
||||
|
||||
if (H5AC_unprotect(f, dxpl_id, H5AC_LHEAP, addr, h, FALSE) != SUCCEED)
|
||||
HGOTO_ERROR(H5E_OHDR, H5E_PROTECT, FAIL, "unable to release object header");
|
||||
|
||||
h = NULL;
|
||||
|
||||
done:
|
||||
if (h && H5AC_unprotect(f, dxpl_id, H5AC_LHEAP, addr, h, FALSE) != SUCCEED)
|
||||
HDONE_ERROR(H5E_OHDR, H5E_PROTECT, FAIL, "unable to release object header");
|
||||
H5MM_xfree(marker);
|
||||
|
||||
done:
|
||||
FUNC_LEAVE_NOAPI(ret_value);
|
||||
}
|
||||
|
||||
|
44
src/H5O.c
44
src/H5O.c
@ -1245,7 +1245,7 @@ H5O_link(H5G_entry_t *ent, int adjust, hid_t dxpl_id)
|
||||
ret_value = oh->nlink;
|
||||
|
||||
done:
|
||||
if (oh && H5AC_unprotect(ent->file, dxpl_id, H5AC_OHDR, ent->header, oh, deleted) < 0 && ret_value>=0)
|
||||
if (oh && H5AC_unprotect(ent->file, dxpl_id, H5AC_OHDR, ent->header, oh, deleted) < 0)
|
||||
HDONE_ERROR(H5E_OHDR, H5E_PROTECT, FAIL, "unable to release object header");
|
||||
|
||||
FUNC_LEAVE_NOAPI(ret_value);
|
||||
@ -1335,20 +1335,18 @@ H5O_count_real (H5G_entry_t *ent, const H5O_class_t *type, hid_t dxpl_id)
|
||||
if (NULL == (oh = H5AC_protect(ent->file, dxpl_id, H5AC_OHDR, ent->header, NULL, NULL, H5AC_READ)))
|
||||
HGOTO_ERROR (H5E_OHDR, H5E_CANTLOAD, FAIL, "unable to load object header");
|
||||
|
||||
for (u=acc=0; u<oh->nmesgs; u++) {
|
||||
/* Loop over all messages, counting the ones of the type looked for */
|
||||
for (u=acc=0; u<oh->nmesgs; u++)
|
||||
if (oh->mesg[u].type==type)
|
||||
acc++;
|
||||
}
|
||||
|
||||
if (H5AC_unprotect(ent->file, dxpl_id, H5AC_OHDR, ent->header, oh, FALSE) != SUCCEED)
|
||||
HGOTO_ERROR(H5E_OHDR, H5E_PROTECT, FAIL, "unable to release object header");
|
||||
|
||||
oh=NULL;
|
||||
|
||||
/* Set return value */
|
||||
ret_value=acc;
|
||||
|
||||
done:
|
||||
if (oh && H5AC_unprotect(ent->file, dxpl_id, H5AC_OHDR, ent->header, oh, FALSE) != SUCCEED)
|
||||
HDONE_ERROR(H5E_OHDR, H5E_PROTECT, FAIL, "unable to release object header");
|
||||
|
||||
FUNC_LEAVE_NOAPI(ret_value);
|
||||
} /* end H5O_count_real() */
|
||||
|
||||
@ -1447,15 +1445,13 @@ H5O_exists_real(H5G_entry_t *ent, const H5O_class_t *type, int sequence, hid_t d
|
||||
break;
|
||||
}
|
||||
|
||||
if (H5AC_unprotect(ent->file, dxpl_id, H5AC_OHDR, ent->header, oh, FALSE) != SUCCEED)
|
||||
HGOTO_ERROR(H5E_OHDR, H5E_PROTECT, FAIL, "unable to release object header");
|
||||
|
||||
oh=NULL;
|
||||
|
||||
/* Set return value */
|
||||
ret_value=(sequence<0);
|
||||
|
||||
done:
|
||||
if (oh && H5AC_unprotect(ent->file, dxpl_id, H5AC_OHDR, ent->header, oh, FALSE) != SUCCEED)
|
||||
HDONE_ERROR(H5E_OHDR, H5E_PROTECT, FAIL, "unable to release object header");
|
||||
|
||||
FUNC_LEAVE_NOAPI(ret_value);
|
||||
} /* end H5O_exists_real() */
|
||||
|
||||
@ -1572,7 +1568,7 @@ H5O_read_real(H5G_entry_t *ent, const H5O_class_t *type, int sequence, void *mes
|
||||
HGOTO_ERROR(H5E_OHDR, H5E_NOTFOUND, NULL, "unable to find message in object header");
|
||||
|
||||
/* copy the message to the user-supplied buffer */
|
||||
if (NULL == (oh = H5AC_protect(ent->file, dxpl_id, H5AC_OHDR, ent->header, NULL, NULL, H5AC_WRITE)))
|
||||
if (NULL == (oh = H5AC_protect(ent->file, dxpl_id, H5AC_OHDR, ent->header, NULL, NULL, H5AC_READ)))
|
||||
HGOTO_ERROR(H5E_OHDR, H5E_CANTLOAD, NULL, "unable to load object header");
|
||||
if (oh->mesg[idx].flags & H5O_FLAG_SHARED) {
|
||||
/*
|
||||
@ -1615,7 +1611,7 @@ H5O_read_real(H5G_entry_t *ent, const H5O_class_t *type, int sequence, void *mes
|
||||
}
|
||||
|
||||
done:
|
||||
if (oh && H5AC_unprotect(ent->file, dxpl_id, H5AC_OHDR, ent->header, oh, FALSE) < 0 && ret_value!=NULL)
|
||||
if (oh && H5AC_unprotect(ent->file, dxpl_id, H5AC_OHDR, ent->header, oh, FALSE) < 0)
|
||||
HDONE_ERROR(H5E_OHDR, H5E_PROTECT, NULL, "unable to release object header");
|
||||
|
||||
FUNC_LEAVE_NOAPI(ret_value);
|
||||
@ -1658,7 +1654,7 @@ H5O_find_in_ohdr(H5F_t *f, hid_t dxpl_id, haddr_t addr, const H5O_class_t **type
|
||||
assert(type_p);
|
||||
|
||||
/* Load the object header */
|
||||
if (NULL == (oh = H5AC_protect(f, dxpl_id, H5AC_OHDR, addr, NULL, NULL, H5AC_WRITE)))
|
||||
if (NULL == (oh = H5AC_protect(f, dxpl_id, H5AC_OHDR, addr, NULL, NULL, H5AC_READ)))
|
||||
HGOTO_ERROR(H5E_OHDR, H5E_CANTLOAD, UFAIL, "unable to load object header");
|
||||
|
||||
/* Scan through the messages looking for the right one */
|
||||
@ -1697,7 +1693,7 @@ H5O_find_in_ohdr(H5F_t *f, hid_t dxpl_id, haddr_t addr, const H5O_class_t **type
|
||||
ret_value=u;
|
||||
|
||||
done:
|
||||
if (oh && H5AC_unprotect(f, dxpl_id, H5AC_OHDR, addr, oh, FALSE) != SUCCEED && ret_value != UFAIL)
|
||||
if (oh && H5AC_unprotect(f, dxpl_id, H5AC_OHDR, addr, oh, FALSE) != SUCCEED)
|
||||
HDONE_ERROR(H5E_OHDR, H5E_PROTECT, UFAIL, "unable to release object header");
|
||||
|
||||
FUNC_LEAVE_NOAPI(ret_value);
|
||||
@ -1947,7 +1943,7 @@ H5O_modify_real(H5G_entry_t *ent, const H5O_class_t *type, int overwrite,
|
||||
ret_value = sequence;
|
||||
|
||||
done:
|
||||
if (oh && H5AC_unprotect(ent->file, dxpl_id, H5AC_OHDR, ent->header, oh, FALSE) < 0 && ret_value!=FAIL)
|
||||
if (oh && H5AC_unprotect(ent->file, dxpl_id, H5AC_OHDR, ent->header, oh, FALSE) < 0)
|
||||
HDONE_ERROR(H5E_OHDR, H5E_PROTECT, FAIL, "unable to release object header");
|
||||
|
||||
FUNC_LEAVE_NOAPI(ret_value);
|
||||
@ -2030,7 +2026,7 @@ H5O_unprotect(H5G_entry_t *ent, H5O_t *oh, hid_t dxpl_id)
|
||||
assert(oh);
|
||||
|
||||
if (H5AC_unprotect(ent->file, dxpl_id, H5AC_OHDR, ent->header, oh, FALSE) < 0)
|
||||
HDONE_ERROR(H5E_OHDR, H5E_PROTECT, FAIL, "unable to release object header");
|
||||
HGOTO_ERROR(H5E_OHDR, H5E_PROTECT, FAIL, "unable to release object header");
|
||||
|
||||
oh = NULL;
|
||||
|
||||
@ -2321,7 +2317,7 @@ H5O_touch(H5G_entry_t *ent, hbool_t force, hid_t dxpl_id)
|
||||
HGOTO_ERROR(H5E_OHDR, H5E_CANTINIT, FAIL, "unable to update object modificaton time");
|
||||
|
||||
done:
|
||||
if (oh && H5AC_unprotect(ent->file, dxpl_id, H5AC_OHDR, ent->header, oh, FALSE)<0 && ret_value>=0)
|
||||
if (oh && H5AC_unprotect(ent->file, dxpl_id, H5AC_OHDR, ent->header, oh, FALSE)<0)
|
||||
HDONE_ERROR(H5E_OHDR, H5E_PROTECT, FAIL, "unable to release object header");
|
||||
|
||||
FUNC_LEAVE_NOAPI(ret_value);
|
||||
@ -2581,7 +2577,7 @@ H5O_remove_real(H5G_entry_t *ent, const H5O_class_t *type, int sequence, hid_t d
|
||||
HGOTO_ERROR(H5E_OHDR, H5E_CANTINIT, FAIL, "unable to remove constant message(s)");
|
||||
|
||||
done:
|
||||
if (oh && H5AC_unprotect(ent->file, dxpl_id, H5AC_OHDR, ent->header, oh, FALSE) < 0 && ret_value>=0)
|
||||
if (oh && H5AC_unprotect(ent->file, dxpl_id, H5AC_OHDR, ent->header, oh, FALSE) < 0)
|
||||
HDONE_ERROR(H5E_OHDR, H5E_PROTECT, FAIL, "unable to release object header");
|
||||
|
||||
FUNC_LEAVE_NOAPI(ret_value);
|
||||
@ -3171,7 +3167,7 @@ H5O_delete(H5F_t *f, hid_t dxpl_id, haddr_t addr)
|
||||
HGOTO_ERROR(H5E_OHDR, H5E_CANTDELETE, FAIL, "can't delete object from file");
|
||||
|
||||
done:
|
||||
if (oh && H5AC_unprotect(f, dxpl_id, H5AC_OHDR, addr, oh, TRUE)<0 && ret_value>=0)
|
||||
if (oh && H5AC_unprotect(f, dxpl_id, H5AC_OHDR, addr, oh, TRUE)<0)
|
||||
HDONE_ERROR(H5E_OHDR, H5E_PROTECT, FAIL, "unable to release object header");
|
||||
|
||||
FUNC_LEAVE_NOAPI(ret_value);
|
||||
@ -3345,7 +3341,7 @@ H5O_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr, FILE *stream, int indent, int f
|
||||
assert(indent >= 0);
|
||||
assert(fwidth >= 0);
|
||||
|
||||
if (NULL == (oh = H5AC_protect(f, dxpl_id, H5AC_OHDR, addr, NULL, NULL, H5AC_WRITE)))
|
||||
if (NULL == (oh = H5AC_protect(f, dxpl_id, H5AC_OHDR, addr, NULL, NULL, H5AC_READ)))
|
||||
HGOTO_ERROR(H5E_OHDR, H5E_CANTLOAD, FAIL, "unable to load object header");
|
||||
|
||||
/* debug */
|
||||
@ -3485,7 +3481,7 @@ H5O_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr, FILE *stream, int indent, int f
|
||||
HDfprintf(stream, "*** TOTAL SIZE DOES NOT MATCH ALLOCATED SIZE!\n");
|
||||
|
||||
done:
|
||||
if (oh && H5AC_unprotect(f, dxpl_id, H5AC_OHDR, addr, oh, FALSE) < 0 && ret_value>=0)
|
||||
if (oh && H5AC_unprotect(f, dxpl_id, H5AC_OHDR, addr, oh, FALSE) < 0)
|
||||
HDONE_ERROR(H5E_OHDR, H5E_PROTECT, FAIL, "unable to release object header");
|
||||
|
||||
FUNC_LEAVE_NOAPI(ret_value);
|
||||
|
Loading…
x
Reference in New Issue
Block a user