mirror of
https://github.com/HDFGroup/hdf5.git
synced 2025-02-11 16:01:00 +08:00
[svn-r8625] Purpose:
Code optimization Description: Avoid pushing errors on error stack when an object is not found in a B-tree. Sometimes we are just checking if the object exists before we insert it into the B-tree and the higher levels in the library should be responsible for determining if not finding the object in B-tree is really an error. Platforms tested: Solaris 2.7 (arabica) FreeBSD 4.10 (sleipnir) w/parallel too minor to require h5committest
This commit is contained in:
parent
8957d31809
commit
67a1ff05db
32
src/H5B.c
32
src/H5B.c
@ -624,10 +624,10 @@ H5B_clear(H5F_t *f, H5B_t *bt, hbool_t destroy)
|
||||
|
||||
if (destroy)
|
||||
if (H5B_dest(f, bt) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTFREE, FAIL, "unable to destroy B-tree node");
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTFREE, FAIL, "unable to destroy B-tree node")
|
||||
|
||||
done:
|
||||
FUNC_LEAVE_NOAPI(ret_value);
|
||||
FUNC_LEAVE_NOAPI(ret_value)
|
||||
} /* end H5B_clear() */
|
||||
|
||||
|
||||
@ -659,7 +659,7 @@ H5B_size(H5F_t *f, H5B_t *bt)
|
||||
assert(bt->type);
|
||||
|
||||
ret_value = H5B_nodesize(f, bt->type, NULL, bt->sizeof_rkey);
|
||||
FUNC_LEAVE_NOAPI(ret_value);
|
||||
FUNC_LEAVE_NOAPI(ret_value)
|
||||
}
|
||||
|
||||
|
||||
@ -733,7 +733,15 @@ H5B_find(H5F_t *f, hid_t dxpl_id, const H5B_class_t *type, haddr_t addr, void *u
|
||||
}
|
||||
}
|
||||
if (cmp)
|
||||
/* Note: don't push error on stack, leave that to next higher level,
|
||||
* since many times the B-tree is searched in order to determine
|
||||
* if an object exists in the B-tree or not. -QAK
|
||||
*/
|
||||
#ifdef OLD_WAY
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_NOTFOUND, FAIL, "B-tree key not found")
|
||||
#else /* OLD_WAY */
|
||||
HGOTO_DONE(FAIL)
|
||||
#endif /* OLD_WAY */
|
||||
|
||||
/*
|
||||
* Follow the link to the subtree or to the data node.
|
||||
@ -753,10 +761,26 @@ H5B_find(H5F_t *f, hid_t dxpl_id, const H5B_class_t *type, haddr_t addr, void *u
|
||||
|
||||
if (level > 0) {
|
||||
if (H5B_find(f, dxpl_id, type, child, udata) < 0)
|
||||
/* Note: don't push error on stack, leave that to next higher level,
|
||||
* since many times the B-tree is searched in order to determine
|
||||
* if an object exists in the B-tree or not. -QAK
|
||||
*/
|
||||
#ifdef OLD_WAY
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_NOTFOUND, FAIL, "key not found in subtree")
|
||||
#else /* OLD_WAY */
|
||||
HGOTO_DONE(FAIL)
|
||||
#endif /* OLD_WAY */
|
||||
} else {
|
||||
if ((type->found) (f, dxpl_id, child, nkey1, udata, nkey2) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_NOTFOUND, FAIL, "key not found in leaf node")
|
||||
/* Note: don't push error on stack, leave that to next higher level,
|
||||
* since many times the B-tree is searched in order to determine
|
||||
* if an object exists in the B-tree or not. -QAK
|
||||
*/
|
||||
#ifdef OLD_WAY
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_NOTFOUND, FAIL, "key not found in leaf node")
|
||||
#else /* OLD_WAY */
|
||||
HGOTO_DONE(FAIL)
|
||||
#endif /* OLD_WAY */
|
||||
}
|
||||
|
||||
done:
|
||||
|
@ -1440,8 +1440,10 @@ H5D_istore_lock(H5F_t *f, const H5D_dxpl_cache_t *dxpl_cache, hid_t dxpl_id,
|
||||
} else {
|
||||
H5D_fill_value_t fill_status;
|
||||
|
||||
#ifdef OLD_WAY
|
||||
/* Clear the error stack from not finding the chunk on disk */
|
||||
H5E_clear(NULL);
|
||||
#endif /* OLD_WAY */
|
||||
|
||||
/* Chunk size on disk isn't [likely] the same size as the final chunk
|
||||
* size in memory, so allocate memory big enough. */
|
||||
@ -2031,9 +2033,17 @@ H5D_istore_get_addr(H5F_t *f, hid_t dxpl_id, const H5O_layout_t *layout,
|
||||
|
||||
/* Go get the chunk information */
|
||||
if (H5B_find (f, dxpl_id, H5B_ISTORE, layout->u.chunk.addr, udata)<0) {
|
||||
/* Note: don't push error on stack, leave that to next higher level,
|
||||
* since many times the B-tree is searched in order to determine
|
||||
* if a chunk exists in the B-tree or not. -QAK
|
||||
*/
|
||||
#ifdef OLD_WAY
|
||||
H5E_clear(NULL);
|
||||
|
||||
HGOTO_ERROR(H5E_BTREE,H5E_NOTFOUND,HADDR_UNDEF,"Can't locate chunk info");
|
||||
#else /* OLD_WAY */
|
||||
HGOTO_DONE(HADDR_UNDEF)
|
||||
#endif /* OLD_WAY */
|
||||
} /* end if */
|
||||
|
||||
/* Success! Set the return value */
|
||||
|
Loading…
Reference in New Issue
Block a user