summaryrefslogtreecommitdiffstats
path: root/src/H5B2cache.c
diff options
context:
space:
mode:
authorQuincey Koziol <koziol@hdfgroup.org>2009-10-29 14:54:08 (GMT)
committerQuincey Koziol <koziol@hdfgroup.org>2009-10-29 14:54:08 (GMT)
commitac0778592ae832ccd2b3ec4a6ed62d5340d8ea2a (patch)
tree54c6ad6ea49eb560abfa7cdd3e105426b184bf4b /src/H5B2cache.c
parent7abd8c4d3003d56f6564a79dd0eaa4d97604a769 (diff)
downloadhdf5-ac0778592ae832ccd2b3ec4a6ed62d5340d8ea2a.zip
hdf5-ac0778592ae832ccd2b3ec4a6ed62d5340d8ea2a.tar.gz
hdf5-ac0778592ae832ccd2b3ec4a6ed62d5340d8ea2a.tar.bz2
[svn-r17786] Description:
Bring r17749 & 17785 from trunk to 1.8 branch: 17749: Refactor v2 B-tree code to bring it further in line with how the fractal heap code works, to make forthcoming modificaions easier. Also minor tweaks to the fractal heap code to clean it up a bit more also. 17785: Further refactor v2 B-tree code to bring it closer to modern data structure designed in the library, mainly by introducing a H5B2_t type so that the v2 B-tree could be held open, but not require the B-tree header to be protected the whole time. A few other minor tweaks as well. Also, remove unused 'dirty' flag from fractal heap header. Tested on: FreeBSD/32 6.3 (duty) in debug mode FreeBSD/64 6.3 (liberty) w/C++ & FORTRAN, in debug mode Linux/32 2.6 (jam) w/PGI compilers, w/default API=1.8.x, w/C++ & FORTRAN, w/threadsafe, in debug mode Linux/64-amd64 2.6 (smirom) w/Intel compilers, w/default API=1.6.x, w/C++ & FORTRAN, in production mode Solaris/32 2.10 (linew) w/deprecated symbols disabled, w/C++ & FORTRAN, w/szip filter, in production mode Linux/64-ia64 2.6 (cobalt) w/Intel compilers, w/C++ & FORTRAN, in production mode Linux/64-ia64 2.4 (tg-login3) w/parallel, w/FORTRAN, in debug mode Linux/64-amd64 2.6 (abe) w/parallel, w/FORTRAN, in production mode Mac OS X/32 10.6.1 (amazon) in debug mode Mac OS X/32 10.6.1 (amazon) w/C++ & FORTRAN, w/threadsafe, in production mode
Diffstat (limited to 'src/H5B2cache.c')
-rw-r--r--src/H5B2cache.c17
1 files changed, 8 insertions, 9 deletions
diff --git a/src/H5B2cache.c b/src/H5B2cache.c
index 688bc33..0148777 100644
--- a/src/H5B2cache.c
+++ b/src/H5B2cache.c
@@ -167,9 +167,8 @@ H5B2_cache_hdr_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, const void *_cls, voi
HDassert(cls);
/* Allocate new B-tree header and reset cache info */
- if(NULL == (hdr = H5FL_MALLOC(H5B2_hdr_t)))
- HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed")
- HDmemset(&hdr->cache_info, 0, sizeof(H5AC_info_t));
+ if(NULL == (hdr = H5B2_hdr_alloc(f)))
+ HGOTO_ERROR(H5E_BTREE, H5E_CANTALLOC, NULL, "allocation failed for B-tree header")
/* Wrap the local buffer for serialized header info */
if(NULL == (wb = H5WB_wrap(hdr_buf, sizeof(hdr_buf))))
@@ -249,7 +248,8 @@ done:
if(wb && H5WB_unwrap(wb) < 0)
HDONE_ERROR(H5E_BTREE, H5E_CLOSEERROR, NULL, "can't close wrapped buffer")
if(!ret_value && hdr)
- (void)H5B2_cache_hdr_dest(f, hdr);
+ if(H5B2_hdr_free(hdr) < 0)
+ HDONE_ERROR(H5E_BTREE, H5E_CANTRELEASE, NULL, "can't release v2 B-tree header")
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5B2_cache_hdr_load() */ /*lint !e818 Can't make udata a pointer to const */
@@ -404,9 +404,6 @@ H5B2_cache_hdr_dest(H5F_t *f, H5B2_hdr_t *hdr)
if(H5B2_hdr_free(hdr) < 0)
HGOTO_ERROR(H5E_BTREE, H5E_CANTFREE, FAIL, "unable to free v2 B-tree header info")
- /* Free B-tree header info */
- (void)H5FL_FREE(H5B2_hdr_t, hdr);
-
done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5B2_cache_hdr_dest() */
@@ -730,6 +727,7 @@ H5B2_cache_internal_dest(H5F_t *f, H5B2_internal_t *internal)
/*
* Check arguments.
*/
+ HDassert(f);
HDassert(internal);
HDassert(internal->hdr);
@@ -760,7 +758,7 @@ H5B2_cache_internal_dest(H5F_t *f, H5B2_internal_t *internal)
HGOTO_ERROR(H5E_BTREE, H5E_CANTDEC, FAIL, "can't decrement ref. count on B-tree header")
/* Free B-tree internal node info */
- H5FL_FREE(H5B2_internal_t, internal);
+ internal = H5FL_FREE(H5B2_internal_t, internal);
done:
FUNC_LEAVE_NOAPI(ret_value)
@@ -1052,6 +1050,7 @@ H5B2_cache_leaf_dest(H5F_t *f, H5B2_leaf_t *leaf)
/*
* Check arguments.
*/
+ HDassert(f);
HDassert(leaf);
HDassert(leaf->hdr);
@@ -1078,7 +1077,7 @@ H5B2_cache_leaf_dest(H5F_t *f, H5B2_leaf_t *leaf)
HGOTO_ERROR(H5E_BTREE, H5E_CANTDEC, FAIL, "can't decrement ref. count on B-tree header")
/* Free B-tree leaf node info */
- H5FL_FREE(H5B2_leaf_t, leaf);
+ leaf = H5FL_FREE(H5B2_leaf_t, leaf);
done:
FUNC_LEAVE_NOAPI(ret_value)