summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xconfigure2
-rw-r--r--src/CMakeLists.txt2
-rw-r--r--src/H5EApkg.h14
-rw-r--r--src/H5HL.c904
-rw-r--r--src/H5HLcache.c582
-rw-r--r--src/H5HLdbg.c128
-rw-r--r--src/H5HLint.c330
-rw-r--r--src/H5HLpkg.h106
-rw-r--r--src/H5HLprivate.h45
-rw-r--r--src/H5HLpublic.h2
-rw-r--r--src/Makefile.am2
-rw-r--r--src/Makefile.in55
12 files changed, 919 insertions, 1253 deletions
diff --git a/configure b/configure
index 9216956..437323a 100755
--- a/configure
+++ b/configure
@@ -1,5 +1,5 @@
#! /bin/sh
-# From configure.in Id: configure.in 22105 2012-03-21 15:10:17Z koziol .
+# From configure.in Id: configure.in 22254 2012-04-06 02:57:06Z koziol .
# Guess values for system-dependent variables and create Makefiles.
# Generated by GNU Autoconf 2.68 for HDF5 1.9.113-FA_a5.
#
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 0182fea..6c166da 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -333,7 +333,9 @@ SET (H5HL_SRCS
${HDF5_SRC_DIR}/H5HL.c
${HDF5_SRC_DIR}/H5HLcache.c
${HDF5_SRC_DIR}/H5HLdbg.c
+ ${HDF5_SRC_DIR}/H5HLdblk.c
${HDF5_SRC_DIR}/H5HLint.c
+ ${HDF5_SRC_DIR}/H5HLprfx.c
)
SET (H5HL_HDRS
${HDF5_SRC_DIR}/H5HLpkg.h
diff --git a/src/H5EApkg.h b/src/H5EApkg.h
index c9c79ba..c157671 100644
--- a/src/H5EApkg.h
+++ b/src/H5EApkg.h
@@ -79,15 +79,15 @@
+ 1 /* Log2(Max. # of elements in data block page) - i.e. # of bits needed to store max. # of elements in data block page */ \
\
/* Extensible Array statistics fields */ \
- + (h)->sizeof_size /* Number of super blocks created */ \
- + (h)->sizeof_size /* Size of super blocks created */ \
- + (h)->sizeof_size /* Number of data blocks created */ \
- + (h)->sizeof_size /* Size of data blocks created */ \
- + (h)->sizeof_size /* Max. index set */ \
- + (h)->sizeof_size /* Number of elements 'realized' */ \
+ + (h)->sizeof_size /* Number of super blocks created */ \
+ + (h)->sizeof_size /* Size of super blocks created */ \
+ + (h)->sizeof_size /* Number of data blocks created */ \
+ + (h)->sizeof_size /* Size of data blocks created */ \
+ + (h)->sizeof_size /* Max. index set */ \
+ + (h)->sizeof_size /* Number of elements 'realized' */ \
\
/* Extensible Array Header specific fields */ \
- + (h)->sizeof_addr /* File address of index block */ \
+ + (h)->sizeof_addr /* File address of index block */ \
)
/* Size of the extensible array index block on disk */
diff --git a/src/H5HL.c b/src/H5HL.c
index b1b5b24..3f1047c 100644
--- a/src/H5HL.c
+++ b/src/H5HL.c
@@ -15,12 +15,12 @@
/*-------------------------------------------------------------------------
*
- * Created: H5HL.c
- * Jul 16 1997
- * Robb Matzke <matzke@llnl.gov>
+ * Created: H5HL.c
+ * Jul 16 1997
+ * Robb Matzke <matzke@llnl.gov>
*
- * Purpose: Heap functions for the local heaps used by symbol
- * tables to store names (among other things).
+ * Purpose: Heap functions for the local heaps used by symbol
+ * tables to store names (among other things).
*
*-------------------------------------------------------------------------
*/
@@ -35,18 +35,18 @@
/***********/
/* Headers */
/***********/
-#include "H5private.h" /* Generic Functions */
-#include "H5Eprivate.h" /* Error handling */
-#include "H5Fprivate.h" /* File access */
-#include "H5HLpkg.h" /* Local Heaps */
-#include "H5MFprivate.h" /* File memory management */
+#include "H5private.h" /* Generic Functions */
+#include "H5Eprivate.h" /* Error handling */
+#include "H5Fprivate.h" /* File access */
+#include "H5HLpkg.h" /* Local Heaps */
+#include "H5MFprivate.h" /* File memory management */
/****************/
/* Local Macros */
/****************/
-#define H5HL_MIN_HEAP 128 /* Minimum size to reduce heap buffer to */
+#define H5HL_MIN_HEAP 128 /* Minimum size to reduce heap buffer to */
/******************/
@@ -63,8 +63,9 @@
/* Local Prototypes */
/********************/
-static H5HL_free_t *H5HL_remove_free(H5HL_t *heap, H5HL_free_t *fl);
-static herr_t H5HL_minimize_heap_space(H5F_t *f, hid_t dxpl_id, H5HL_t *heap);
+static H5HL_free_t *H5HL__remove_free(H5HL_t *heap, H5HL_free_t *fl);
+static herr_t H5HL__minimize_heap_space(H5F_t *f, hid_t dxpl_id, H5HL_t *heap);
+static herr_t H5HL__dirty(H5HL_t *heap);
/*********************/
@@ -90,35 +91,30 @@ H5FL_BLK_DEFINE(lheap_chunk);
/*-------------------------------------------------------------------------
- * Function: H5HL_create
+ * Function: H5HL_create
*
- * Purpose: Creates a new heap data structure on disk and caches it
- * in memory. SIZE_HINT is a hint for the initial size of the
- * data area of the heap. If size hint is invalid then a
- * reasonable (but probably not optimal) size will be chosen.
- * If the heap ever has to grow, then REALLOC_HINT is the
- * minimum amount by which the heap will grow.
+ * Purpose: Creates a new heap data structure on disk and caches it
+ * in memory. SIZE_HINT is a hint for the initial size of the
+ * data area of the heap. If size hint is invalid then a
+ * reasonable (but probably not optimal) size will be chosen.
*
- * Return: Success: Non-negative. The file address of new heap is
- * returned through the ADDR argument.
+ * Return: Success: SUCCEED. The file address of new heap is
+ * returned through the ADDR argument.
+ * Failure: FAIL. addr_p will be HADDR_UNDEF.
*
- * Failure: Negative
- *
- * Programmer: Robb Matzke
- * matzke@llnl.gov
- * Jul 16 1997
+ * Programmer: Robb Matzke
+ * matzke@llnl.gov
+ * Jul 16 1997
*
*-------------------------------------------------------------------------
*/
-herr_t
-H5HL_create(H5F_t *f, hid_t dxpl_id, size_t size_hint, haddr_t *addr_p/*out*/)
-{
- H5HL_t *heap = NULL; /* Heap created */
- H5HL_prfx_t *prfx = NULL; /* Heap prefix */
- hsize_t total_size; /* Total heap size on disk */
- herr_t ret_value = SUCCEED; /* Return value */
+BEGIN_FUNC(PRIV, ERR,
+herr_t, SUCCEED, FAIL,
+H5HL_create(H5F_t *f, hid_t dxpl_id, size_t size_hint, haddr_t *addr_p/*out*/))
- FUNC_ENTER_NOAPI(FAIL)
+ H5HL_t *heap = NULL; /* Heap created */
+ H5HL_prfx_t *prfx = NULL; /* Heap prefix */
+ hsize_t total_size; /* Total heap size on disk */
/* check arguments */
HDassert(f);
@@ -126,17 +122,17 @@ H5HL_create(H5F_t *f, hid_t dxpl_id, size_t size_hint, haddr_t *addr_p/*out*/)
/* Adjust size hint as necessary */
if(size_hint && size_hint < H5HL_SIZEOF_FREE(f))
- size_hint = H5HL_SIZEOF_FREE(f);
+ size_hint = H5HL_SIZEOF_FREE(f);
size_hint = H5HL_ALIGN(size_hint);
/* Allocate new heap structure */
- if(NULL == (heap = H5HL_new(H5F_SIZEOF_SIZE(f), H5F_SIZEOF_ADDR(f), H5HL_SIZEOF_HDR(f))))
- HGOTO_ERROR(H5E_HEAP, H5E_CANTALLOC, FAIL, "can't allocate new heap struct")
+ if(NULL == (heap = H5HL__new(H5F_SIZEOF_SIZE(f), H5F_SIZEOF_ADDR(f), H5HL_SIZEOF_HDR(f))))
+ H5E_THROW(H5E_CANTALLOC, "can't allocate new heap struct");
/* Allocate file space */
total_size = heap->prfx_size + size_hint;
if(HADDR_UNDEF == (heap->prfx_addr = H5MF_alloc(f, H5FD_MEM_LHEAP, dxpl_id, total_size)))
- HGOTO_ERROR(H5E_HEAP, H5E_CANTALLOC, FAIL, "unable to allocate file memory")
+ H5E_THROW(H5E_CANTALLOC, "unable to allocate file memory");
/* Initialize info */
heap->single_cache_obj = TRUE;
@@ -144,168 +140,56 @@ H5HL_create(H5F_t *f, hid_t dxpl_id, size_t size_hint, haddr_t *addr_p/*out*/)
heap->dblk_size = size_hint;
if(size_hint)
if(NULL == (heap->dblk_image = H5FL_BLK_CALLOC(lheap_chunk, size_hint)))
- HGOTO_ERROR(H5E_HEAP, H5E_CANTALLOC, FAIL, "memory allocation failed")
+ H5E_THROW(H5E_CANTALLOC, "memory allocation failed");
/* free list */
if(size_hint) {
- if(NULL == (heap->freelist = H5FL_MALLOC(H5HL_free_t)))
- HGOTO_ERROR(H5E_HEAP, H5E_CANTALLOC, FAIL, "memory allocation failed")
- heap->freelist->offset = 0;
- heap->freelist->size = size_hint;
- heap->freelist->prev = heap->freelist->next = NULL;
+ if(NULL == (heap->freelist = H5FL_MALLOC(H5HL_free_t)))
+ H5E_THROW(H5E_CANTALLOC, "memory allocation failed");
+ heap->freelist->offset = 0;
+ heap->freelist->size = size_hint;
+ heap->freelist->prev = heap->freelist->next = NULL;
heap->free_block = 0;
} /* end if */
else {
- heap->freelist = NULL;
+ heap->freelist = NULL;
heap->free_block = H5HL_FREE_NULL;
} /* end else */
/* Allocate the heap prefix */
- if(NULL == (prfx = H5HL_prfx_new(heap)))
- HGOTO_ERROR(H5E_HEAP, H5E_CANTALLOC, FAIL, "memory allocation failed")
+ if(NULL == (prfx = H5HL__prfx_new(heap)))
+ H5E_THROW(H5E_CANTALLOC, "memory allocation failed");
/* Add to cache */
- if(H5AC_insert_entry(f, dxpl_id, H5AC_LHEAP_PRFX, heap->prfx_addr, prfx, H5AC__NO_FLAGS_SET) < 0)
- HGOTO_ERROR(H5E_HEAP, H5E_CANTINIT, FAIL, "unable to cache local heap prefix")
+ if(FAIL == H5AC_insert_entry(f, dxpl_id, H5AC_LHEAP_PRFX, heap->prfx_addr, prfx, H5AC__NO_FLAGS_SET))
+ H5E_THROW(H5E_CANTINIT, "unable to cache local heap prefix");
/* Set address to return */
*addr_p = heap->prfx_addr;
-done:
+CATCH
if(ret_value < 0) {
+ *addr_p = HADDR_UNDEF;
if(prfx) {
- if(H5HL_prfx_dest(prfx) < 0)
- HDONE_ERROR(H5E_HEAP, H5E_CANTFREE, FAIL, "unable to destroy local heap prefix")
+ if(FAIL == H5HL__prfx_dest(prfx))
+ H5E_THROW(H5E_CANTFREE, "unable to destroy local heap prefix");
} /* end if */
else {
if(heap) {
if(H5F_addr_defined(heap->prfx_addr))
- if(H5MF_xfree(f, H5FD_MEM_LHEAP, dxpl_id, heap->prfx_addr, total_size) < 0)
- HDONE_ERROR(H5E_HEAP, H5E_CANTFREE, FAIL, "can't release heap data?")
- if(H5HL_dest(heap) < 0)
- HDONE_ERROR(H5E_HEAP, H5E_CANTFREE, FAIL, "unable to destroy local heap")
+ if(FAIL == H5MF_xfree(f, H5FD_MEM_LHEAP, dxpl_id, heap->prfx_addr, total_size))
+ H5E_THROW(H5E_CANTFREE, "can't release heap data?");
+ if(FAIL == H5HL__dest(heap))
+ H5E_THROW(H5E_CANTFREE, "unable to destroy local heap");
} /* end if */
} /* end else */
} /* end if */
- FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5HL_create() */
+END_FUNC(PRIV) /* end H5HL_create() */
/*-------------------------------------------------------------------------
- * Function: H5HL_dblk_realloc
- *
- * Purpose: Reallocate data block for heap
- *
- * Return: Success: Non-negative
- * Failure: Negative
- *
- * Programmer: Quincey Koziol
- * koziol@hdfgroup.org
- * Oct 12 2008
- *
- *-------------------------------------------------------------------------
- */
-static herr_t
-H5HL_dblk_realloc(H5F_t *f, hid_t dxpl_id, H5HL_t *heap, size_t new_heap_size)
-{
- H5HL_dblk_t *dblk; /* Local heap data block */
- haddr_t old_addr; /* Old location of heap data block */
- haddr_t new_addr; /* New location of heap data block */
- size_t old_heap_size; /* Old size of heap data block */
- herr_t ret_value = SUCCEED; /* Return value */
-
- FUNC_ENTER_NOAPI_NOINIT
-
- /* check arguments */
- HDassert(heap);
- HDassert(new_heap_size > 0);
-
- /* Release old space on disk */
- old_addr = heap->dblk_addr;
- old_heap_size = heap->dblk_size;
- H5_CHECK_OVERFLOW(old_heap_size, size_t, hsize_t);
- if(H5MF_xfree(f, H5FD_MEM_LHEAP, dxpl_id, old_addr, (hsize_t)old_heap_size) < 0)
- HGOTO_ERROR(H5E_HEAP, H5E_CANTFREE, FAIL, "can't release old heap data?")
-
- /* Allocate new space on disk */
- H5_CHECK_OVERFLOW(new_heap_size, size_t, hsize_t);
- if(HADDR_UNDEF == (new_addr = H5MF_alloc(f, H5FD_MEM_LHEAP, dxpl_id, (hsize_t)new_heap_size)))
- HGOTO_ERROR(H5E_HEAP, H5E_CANTALLOC, FAIL, "unable to allocate file space for heap")
-
- /* Update heap info*/
- heap->dblk_addr = new_addr;
- heap->dblk_size = new_heap_size;
-
- /* Check if heap data block actually moved in the file */
- if(H5F_addr_eq(old_addr, new_addr)) {
- /* Check if heap data block is contiguous w/prefix */
- if(heap->single_cache_obj) {
- /* Sanity check */
- HDassert(H5F_addr_eq(heap->prfx_addr + heap->prfx_size, old_addr));
- HDassert(heap->prfx);
-
- /* Resize the heap prefix in the cache */
- if(H5AC_resize_entry(heap->prfx, (size_t)(heap->prfx_size + new_heap_size)) < 0)
- HGOTO_ERROR(H5E_HEAP, H5E_CANTRESIZE, FAIL, "unable to resize heap in cache")
- } /* end if */
- else {
- /* Sanity check */
- HDassert(H5F_addr_ne(heap->prfx_addr + heap->prfx_size, old_addr));
- HDassert(heap->dblk);
-
- /* Resize the heap data block in the cache */
- if(H5AC_resize_entry(heap->dblk, (size_t)new_heap_size) < 0)
- HGOTO_ERROR(H5E_HEAP, H5E_CANTRESIZE, FAIL, "unable to resize heap in cache")
- } /* end else */
- } /* end if */
- else {
- /* Check if heap data block was contiguous w/prefix previously */
- if(heap->single_cache_obj) {
- /* Create new heap data block */
- if(NULL == (dblk = H5HL_dblk_new(heap)))
- HGOTO_ERROR(H5E_HEAP, H5E_CANTALLOC, FAIL, "unable to allocate local heap data block")
-
- /* Resize current heap prefix */
- heap->prfx_size = H5HL_SIZEOF_HDR(f);
- if(H5AC_resize_entry(heap->prfx, (size_t)heap->prfx_size) < 0)
- HGOTO_ERROR(H5E_HEAP, H5E_CANTRESIZE, FAIL, "unable to resize heap prefix in cache")
-
- /* Insert data block into cache (pinned) */
- if(H5AC_insert_entry(f, dxpl_id, H5AC_LHEAP_DBLK, new_addr, dblk, H5AC__PIN_ENTRY_FLAG) < 0)
- HGOTO_ERROR(H5E_HEAP, H5E_CANTINIT, FAIL, "unable to cache local heap data block")
- dblk = NULL;
-
- /* Reset 'single cache object' flag */
- heap->single_cache_obj = FALSE;
- } /* end if */
- else {
- /* Resize the heap data block in the cache */
- /* (ignore [unlikely] case where heap data block ends up
- * contiguous w/heap prefix again.
- */
- if(H5AC_resize_entry(heap->dblk, (size_t)new_heap_size) < 0)
- HGOTO_ERROR(H5E_HEAP, H5E_CANTRESIZE, FAIL, "unable to resize heap data block in cache")
-
- /* Relocate the heap data block in the cache */
- if(H5AC_move_entry(f, H5AC_LHEAP_DBLK, old_addr, new_addr) < 0)
- HGOTO_ERROR(H5E_HEAP, H5E_CANTMOVE, FAIL, "unable to move heap data block in cache")
- } /* end else */
- } /* end else */
-
-done:
- if(ret_value < 0) {
- /* Restore old heap address & size */
- heap->dblk_addr = old_addr;
- heap->dblk_size = old_heap_size;
- } /* end if */
-
- FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5HL_dblk_realloc() */
-
-
-/*-------------------------------------------------------------------------
- * Function: H5HL_minimize_heap_space
+ * Function: H5HL__minimize_heap_space
*
* Purpose: Go through the heap's freelist and determine if we can
* eliminate the free blocks at the tail of the buffer.
@@ -319,13 +203,11 @@ done:
*
*-------------------------------------------------------------------------
*/
-static herr_t
-H5HL_minimize_heap_space(H5F_t *f, hid_t dxpl_id, H5HL_t *heap)
-{
- size_t new_heap_size = heap->dblk_size; /* New size of heap */
- herr_t ret_value = SUCCEED; /* Return value */
+BEGIN_FUNC(STATIC, ERR,
+herr_t, SUCCEED, FAIL,
+H5HL__minimize_heap_space(H5F_t *f, hid_t dxpl_id, H5HL_t *heap))
- FUNC_ENTER_NOAPI(FAIL)
+ size_t new_heap_size = heap->dblk_size; /* New size of heap */
/* check args */
HDassert(f);
@@ -390,7 +272,7 @@ H5HL_minimize_heap_space(H5F_t *f, hid_t dxpl_id, H5HL_t *heap)
new_heap_size = last_fl->offset;
/* Eliminate the free block from the list */
- last_fl = H5HL_remove_free(heap, last_fl);
+ last_fl = H5HL__remove_free(heap, last_fl);
} /* end else */
} /* end if */
else {
@@ -410,20 +292,21 @@ H5HL_minimize_heap_space(H5F_t *f, hid_t dxpl_id, H5HL_t *heap)
* storage.
*/
if(new_heap_size != heap->dblk_size) {
- HDassert(new_heap_size < heap->dblk_size);
+ HDassert(new_heap_size < heap->dblk_size);
/* Resize the memory buffer */
if(NULL == (heap->dblk_image = H5FL_BLK_REALLOC(lheap_chunk, heap->dblk_image, new_heap_size)))
- HGOTO_ERROR(H5E_HEAP, H5E_CANTALLOC, FAIL, "memory allocation failed")
+ H5E_THROW(H5E_CANTALLOC, "memory allocation failed");
/* Reallocate data block in file */
- if(H5HL_dblk_realloc(f, dxpl_id, heap, new_heap_size) < 0)
- HGOTO_ERROR(H5E_HEAP, H5E_CANTRESIZE, FAIL, "reallocating data block failed")
+ if(FAIL == H5HL__dblk_realloc(f, dxpl_id, heap, new_heap_size))
+ H5E_THROW(H5E_CANTRESIZE, "reallocating data block failed");
} /* end if */
-done:
- FUNC_LEAVE_NOAPI(ret_value)
-} /* H5HL_minimize_heap_space() */
+CATCH
+ /* No special processing on errors */
+
+END_FUNC(STATIC) /* H5HL__minimize_heap_space() */
/*-------------------------------------------------------------------------
@@ -440,18 +323,16 @@ done:
*
*-------------------------------------------------------------------------
*/
-H5HL_t *
-H5HL_protect(H5F_t *f, hid_t dxpl_id, haddr_t addr, H5AC_protect_t rw)
-{
- H5HL_cache_prfx_ud_t prfx_udata; /* User data for protecting local heap prefix */
- H5HL_prfx_t *prfx = NULL; /* Local heap prefix */
- H5HL_dblk_t *dblk = NULL; /* Local heap data block */
- H5HL_t *heap; /* Heap data structure */
- unsigned prfx_cache_flags = H5AC__NO_FLAGS_SET; /* Cache flags for unprotecting prefix entry */
- unsigned dblk_cache_flags = H5AC__NO_FLAGS_SET; /* Cache flags for unprotecting data block entry */
- H5HL_t *ret_value; /* Return value */
-
- FUNC_ENTER_NOAPI(NULL)
+BEGIN_FUNC(PRIV, ERR,
+H5HL_t *, NULL, NULL,
+H5HL_protect(H5F_t *f, hid_t dxpl_id, haddr_t addr, H5AC_protect_t rw))
+
+ H5HL_cache_prfx_ud_t prfx_udata; /* User data for protecting local heap prefix */
+ H5HL_prfx_t *prfx = NULL; /* Local heap prefix */
+ H5HL_dblk_t *dblk = NULL; /* Local heap data block */
+ H5HL_t *heap; /* Heap data structure */
+ unsigned prfx_cache_flags = H5AC__NO_FLAGS_SET; /* Cache flags for unprotecting prefix entry */
+ unsigned dblk_cache_flags = H5AC__NO_FLAGS_SET; /* Cache flags for unprotecting data block entry */
/* check arguments */
HDassert(f);
@@ -465,7 +346,7 @@ H5HL_protect(H5F_t *f, hid_t dxpl_id, haddr_t addr, H5AC_protect_t rw)
/* Protect the local heap prefix */
if(NULL == (prfx = (H5HL_prfx_t *)H5AC_protect(f, dxpl_id, H5AC_LHEAP_PRFX, addr, &prfx_udata, rw)))
- HGOTO_ERROR(H5E_HEAP, H5E_CANTPROTECT, NULL, "unable to load heap prefix")
+ H5E_THROW(H5E_CANTPROTECT, "unable to load heap prefix");
/* Get the pointer to the heap */
heap = prfx->heap;
@@ -487,7 +368,8 @@ H5HL_protect(H5F_t *f, hid_t dxpl_id, haddr_t addr, H5AC_protect_t rw)
/* Protect the local heap data block */
if(NULL == (dblk = (H5HL_dblk_t *)H5AC_protect(f, dxpl_id, H5AC_LHEAP_DBLK, heap->dblk_addr, &dblk_udata, rw)))
- HGOTO_ERROR(H5E_HEAP, H5E_CANTPROTECT, NULL, "unable to load heap data block")
+ H5E_THROW(H5E_CANTPROTECT, "unable to load heap data block");
+ //HGOTO_ERROR(H5E_HEAP, H5E_CANTPROTECT, NULL, "unable to load heap data block")
/* Pin the prefix, if the data block was loaded from file */
if(dblk_udata.loaded)
@@ -504,27 +386,26 @@ H5HL_protect(H5F_t *f, hid_t dxpl_id, haddr_t addr, H5AC_protect_t rw)
/* Set return value */
ret_value = heap;
-done:
+CATCH
/* Release the prefix from the cache, now pinned */
- if(prfx && H5AC_unprotect(f, dxpl_id, H5AC_LHEAP_PRFX, heap->prfx_addr, prfx, prfx_cache_flags) < 0)
- HDONE_ERROR(H5E_HEAP, H5E_CANTUNPROTECT, NULL, "unable to release local heap prefix")
+ if(prfx && FAIL == H5AC_unprotect(f, dxpl_id, H5AC_LHEAP_PRFX, heap->prfx_addr, prfx, prfx_cache_flags))
+ H5E_THROW(H5E_CANTUNPROTECT, "unable to release local heap prefix");
/* Release the data block from the cache, now pinned */
- if(dblk && H5AC_unprotect(f, dxpl_id, H5AC_LHEAP_DBLK, heap->dblk_addr, dblk, dblk_cache_flags) < 0)
- HDONE_ERROR(H5E_HEAP, H5E_CANTUNPROTECT, NULL, "unable to release local heap data block")
+ if(dblk && FAIL == H5AC_unprotect(f, dxpl_id, H5AC_LHEAP_DBLK, heap->dblk_addr, dblk, dblk_cache_flags))
+ H5E_THROW(H5E_CANTUNPROTECT, "unable to release local heap data block");
- FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5HL_protect() */
+END_FUNC(PRIV) /* end H5HL_protect() */
/*-------------------------------------------------------------------------
* Function: H5HL_offset_into
*
* Purpose: Called directly after the call to H5HL_protect so that
- * a pointer to the object in the heap can be got.
+ * a pointer to the object in the heap can be obtained.
*
* Return: Success: Valid pointer.
- * Failure: NULL
+ * Failure: Can't fail
*
* Programmer: Bill Wendling
* wendling@ncsa.uiuc.edu
@@ -532,21 +413,17 @@ done:
*
*-------------------------------------------------------------------------
*/
-void *
-H5HL_offset_into(const H5HL_t *heap, size_t offset)
-{
- /*
- * We need to have called some other function before this to get a
- * valid heap pointer. So, this can remain "FUNC_ENTER_NOAPI_NOINIT"
- */
- FUNC_ENTER_NOAPI_NOINIT_NOERR
+BEGIN_FUNC(PRIV, NOERR,
+void *, NULL, -,
+H5HL_offset_into(const H5HL_t *heap, size_t offset))
/* Sanity check */
HDassert(heap);
HDassert(offset < heap->dblk_size);
- FUNC_LEAVE_NOAPI(heap->dblk_image + offset)
-} /* end H5HL_offset_into() */
+ ret_value = heap->dblk_image + offset;
+
+END_FUNC(PRIV) /* end H5HL_offset_into() */
/*-------------------------------------------------------------------------
@@ -563,12 +440,9 @@ H5HL_offset_into(const H5HL_t *heap, size_t offset)
*
*-------------------------------------------------------------------------
*/
-herr_t
-H5HL_unprotect(H5HL_t *heap)
-{
- herr_t ret_value = SUCCEED;
-
- FUNC_ENTER_NOAPI(FAIL)
+BEGIN_FUNC(PRIV, ERR,
+herr_t, SUCCEED, FAIL,
+H5HL_unprotect(H5HL_t *heap))
/* check arguments */
HDassert(heap);
@@ -581,8 +455,8 @@ H5HL_unprotect(H5HL_t *heap)
/* Check for separate heap data block */
if(heap->single_cache_obj) {
/* Mark local heap prefix as evictable again */
- if(H5AC_unpin_entry(heap->prfx) < 0)
- HGOTO_ERROR(H5E_HEAP, H5E_CANTUNPIN, FAIL, "unable to unpin local heap data block")
+ if(FAIL == H5AC_unpin_entry(heap->prfx))
+ H5E_THROW(H5E_CANTUNPIN, "unable to unpin local heap data block");
} /* end if */
else {
/* Sanity check */
@@ -590,34 +464,34 @@ H5HL_unprotect(H5HL_t *heap)
/* Mark local heap data block as evictable again */
/* (data block still pins prefix) */
- if(H5AC_unpin_entry(heap->dblk) < 0)
- HGOTO_ERROR(H5E_HEAP, H5E_CANTUNPIN, FAIL, "unable to unpin local heap data block")
+ if(FAIL == H5AC_unpin_entry(heap->dblk))
+ H5E_THROW(H5E_CANTUNPIN, "unable to unpin local heap data block");
} /* end else */
} /* end if */
-done:
- FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5HL_unprotect() */
+CATCH
+ /* No special processing on errors */
+
+END_FUNC(PRIV) /* end H5HL_unprotect() */
/*-------------------------------------------------------------------------
- * Function: H5HL_remove_free
+ * Function: H5HL__remove_free
*
- * Purpose: Removes free list element FL from the specified heap and
- * frees it.
+ * Purpose: Removes free list element FL from the specified heap and
+ * frees it.
*
- * Return: NULL
+ * Return: NULL
*
- * Programmer: Robb Matzke
- * matzke@llnl.gov
- * Jul 17 1997
+ * Programmer: Robb Matzke
+ * matzke@llnl.gov
+ * Jul 17 1997
*
*-------------------------------------------------------------------------
*/
-static H5HL_free_t *
-H5HL_remove_free(H5HL_t *heap, H5HL_free_t *fl)
-{
- FUNC_ENTER_NOAPI_NOINIT_NOERR
+BEGIN_FUNC(STATIC, NOERR,
+H5HL_free_t *, NULL, -,
+H5HL__remove_free(H5HL_t *heap, H5HL_free_t *fl))
if(fl->prev)
fl->prev->next = fl->next;
@@ -627,30 +501,29 @@ H5HL_remove_free(H5HL_t *heap, H5HL_free_t *fl)
if(!fl->prev)
heap->freelist = fl->next;
- FUNC_LEAVE_NOAPI((H5HL_free_t *)H5FL_FREE(H5HL_free_t, fl))
-} /* end H5HL_remove_free() */
+ /* H5FL_FREE always returns NULL so we can't check for errors */
+ ret_value = (H5HL_free_t *)H5FL_FREE(H5HL_free_t, fl);
+
+END_FUNC(STATIC) /* end H5HL__remove_free() */
/*-------------------------------------------------------------------------
- * Function: H5HL_dirty
+ * Function: H5HL__dirty
*
- * Purpose: Mark heap as dirty
+ * Purpose: Mark heap as dirty
*
- * Return: Success: Non-negative
- * Failure: Negative
+ * Return: Success: SUCCEED
+ * Failure: FAIL
*
- * Programmer: Quincey Koziol
- * koziol@hdfgroup.org
- * Oct 12 2008
+ * Programmer: Quincey Koziol
+ * koziol@hdfgroup.org
+ * Oct 12 2008
*
*-------------------------------------------------------------------------
*/
-static herr_t
-H5HL_dirty(H5HL_t *heap)
-{
- herr_t ret_value = SUCCEED; /* Return value */
-
- FUNC_ENTER_NOAPI_NOINIT
+BEGIN_FUNC(STATIC, ERR,
+herr_t, SUCCEED, FAIL,
+H5HL__dirty(H5HL_t *heap))
/* check arguments */
HDassert(heap);
@@ -661,43 +534,42 @@ H5HL_dirty(H5HL_t *heap)
/* Sanity check */
HDassert(heap->dblk);
- if(H5AC_mark_entry_dirty(heap->dblk) < 0)
- HGOTO_ERROR(H5E_HEAP, H5E_CANTMARKDIRTY, FAIL, "unable to mark heap data block as dirty")
+ if(FAIL == H5AC_mark_entry_dirty(heap->dblk))
+ H5E_THROW(H5E_CANTMARKDIRTY, "unable to mark heap data block as dirty");
} /* end if */
/* Mark heap prefix as dirty */
- if(H5AC_mark_entry_dirty(heap->prfx) < 0)
- HGOTO_ERROR(H5E_HEAP, H5E_CANTMARKDIRTY, FAIL, "unable to mark heap prefix as dirty")
+ if(FAIL == H5AC_mark_entry_dirty(heap->prfx))
+ H5E_THROW(H5E_CANTMARKDIRTY, "unable to mark heap prefix as dirty");
-done:
- FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5HL_dirty() */
+CATCH
+ /* No special processing on errors */
+
+END_FUNC(STATIC) /* end H5HL__dirty() */
/*-------------------------------------------------------------------------
- * Function: H5HL_insert
+ * Function: H5HL_insert
*
- * Purpose: Inserts a new item into the heap.
+ * Purpose: Inserts a new item into the heap.
*
- * Return: Success: Offset of new item within heap.
- * Failure: UFAIL
+ * Return: Success: Offset of new item within heap.
+ * Failure: UFAIL
*
- * Programmer: Robb Matzke
- * matzke@llnl.gov
- * Jul 17 1997
+ * Programmer: Robb Matzke
+ * matzke@llnl.gov
+ * Jul 17 1997
*
*-------------------------------------------------------------------------
*/
-size_t
-H5HL_insert(H5F_t *f, hid_t dxpl_id, H5HL_t *heap, size_t buf_size, const void *buf)
-{
- H5HL_free_t *fl = NULL, *last_fl = NULL;
- size_t offset = 0;
- size_t need_size;
- hbool_t found;
- size_t ret_value; /* Return value */
+BEGIN_FUNC(PRIV, ERR,
+size_t, UFAIL, UFAIL,
+H5HL_insert(H5F_t *f, hid_t dxpl_id, H5HL_t *heap, size_t buf_size, const void *buf))
- FUNC_ENTER_NOAPI(UFAIL)
+ H5HL_free_t *fl = NULL, *last_fl = NULL;
+ size_t offset = 0;
+ size_t need_size;
+ hbool_t found;
/* check arguments */
HDassert(f);
@@ -711,8 +583,8 @@ H5HL_insert(H5F_t *f, hid_t dxpl_id, H5HL_t *heap, size_t buf_size, const void *
* so we just accept that an extra flush of the heap info could occur
* if an error occurs -QAK)
*/
- if(H5HL_dirty(heap) < 0)
- HGOTO_ERROR(H5E_HEAP, H5E_CANTMARKDIRTY, UFAIL, "unable to mark heap as dirty")
+ if(FAIL == H5HL__dirty(heap))
+ H5E_THROW(H5E_CANTMARKDIRTY, "unable to mark heap as dirty");
/*
* In order to keep the free list descriptors aligned on word boundaries,
@@ -726,26 +598,25 @@ H5HL_insert(H5F_t *f, hid_t dxpl_id, H5HL_t *heap, size_t buf_size, const void *
* leave zero or at least H5G_SIZEOF_FREE bytes left over.
*/
for(fl = heap->freelist, found = FALSE; fl; fl = fl->next) {
- if(fl->size > need_size &&
- fl->size - need_size >= H5HL_SIZEOF_FREE(f)) {
- /* a big enough free block was found */
- offset = fl->offset;
- fl->offset += need_size;
- fl->size -= need_size;
- HDassert(fl->offset == H5HL_ALIGN(fl->offset));
- HDassert(fl->size == H5HL_ALIGN(fl->size));
- found = TRUE;
- break;
- } else if(fl->size == need_size) {
- /* free block of exact size found */
- offset = fl->offset;
- fl = H5HL_remove_free(heap, fl);
- found = TRUE;
- break;
- } else if(!last_fl || last_fl->offset < fl->offset) {
- /* track free space that's closest to end of heap */
- last_fl = fl;
- }
+ if(fl->size > need_size && fl->size - need_size >= H5HL_SIZEOF_FREE(f)) {
+ /* a big enough free block was found */
+ offset = fl->offset;
+ fl->offset += need_size;
+ fl->size -= need_size;
+ HDassert(fl->offset == H5HL_ALIGN(fl->offset));
+ HDassert(fl->size == H5HL_ALIGN(fl->size));
+ found = TRUE;
+ break;
+ } else if(fl->size == need_size) {
+ /* free block of exact size found */
+ offset = fl->offset;
+ fl = H5HL__remove_free(heap, fl);
+ found = TRUE;
+ break;
+ } else if(!last_fl || last_fl->offset < fl->offset) {
+ /* track free space that's closest to end of heap */
+ last_fl = fl;
+ }
} /* end for */
/*
@@ -755,14 +626,14 @@ H5HL_insert(H5F_t *f, hid_t dxpl_id, H5HL_t *heap, size_t buf_size, const void *
* free chunk. If the heap must expand, we double its size.
*/
if(found == FALSE) {
- size_t need_more; /* How much more space we need */
- size_t new_dblk_size; /* Final size of space allocated for heap data block */
- size_t old_dblk_size; /* Previous size of space allocated for heap data block */
- htri_t extended; /* Whether the local heap's data segment on disk was extended */
+ size_t need_more; /* How much more space we need */
+ size_t new_dblk_size; /* Final size of space allocated for heap data block */
+ size_t old_dblk_size; /* Previous size of space allocated for heap data block */
+ htri_t extended; /* Whether the local heap's data segment on disk was extended */
/* At least double the heap's size, making certain there's enough room
* for the new object */
- need_more = MAX(need_size, heap->dblk_size);
+ need_more = MAX(need_size, heap->dblk_size);
/* If there is no last free block or it's not at the end of the heap,
* and the amount of space to allocate is not big enough to include at
@@ -770,106 +641,104 @@ H5HL_insert(H5F_t *f, hid_t dxpl_id, H5HL_t *heap, size_t buf_size, const void *
* space requested to just the amount of space needed. (Generally
* speaking, this only occurs when the heap is small -QAK)
*/
- if(!(last_fl && last_fl->offset + last_fl->size == heap->dblk_size)
+ if(!(last_fl && last_fl->offset + last_fl->size == heap->dblk_size)
&& (need_more < (need_size + H5HL_SIZEOF_FREE(f))))
need_more = need_size;
- new_dblk_size = heap->dblk_size + need_more;
- HDassert(heap->dblk_size < new_dblk_size);
+ new_dblk_size = heap->dblk_size + need_more;
+ HDassert(heap->dblk_size < new_dblk_size);
old_dblk_size = heap->dblk_size;
- H5_CHECK_OVERFLOW(heap->dblk_size, size_t, hsize_t);
- H5_CHECK_OVERFLOW(new_dblk_size, size_t, hsize_t);
+ H5_CHECK_OVERFLOW(heap->dblk_size, size_t, hsize_t);
+ H5_CHECK_OVERFLOW(new_dblk_size, size_t, hsize_t);
/* Extend current heap if possible */
- extended = H5MF_try_extend(f, dxpl_id, H5FD_MEM_LHEAP, heap->dblk_addr, (hsize_t)(heap->dblk_size), (hsize_t)need_more);
- if(extended < 0)
- HGOTO_ERROR(H5E_HEAP, H5E_CANTEXTEND, UFAIL, "error trying to extend heap")
+ extended = H5MF_try_extend(f, dxpl_id, H5FD_MEM_LHEAP, heap->dblk_addr, (hsize_t)(heap->dblk_size), (hsize_t)need_more);
+ if(FAIL == extended)
+ H5E_THROW(H5E_CANTEXTEND, "error trying to extend heap");
- /* Check if we extended the heap data block in file */
- if(extended == TRUE) {
+ /* Check if we extended the heap data block in file */
+ if(extended == TRUE) {
/* Check for prefix & data block contiguous */
if(heap->single_cache_obj) {
/* Resize prefix+data block */
- if(H5AC_resize_entry(heap->prfx, (size_t)(heap->prfx_size + new_dblk_size)) < 0)
- HGOTO_ERROR(H5E_HEAP, H5E_CANTRESIZE, UFAIL, "unable to resize heap prefix in cache")
+ if(FAIL == H5AC_resize_entry(heap->prfx, (size_t)(heap->prfx_size + new_dblk_size)))
+ H5E_THROW(H5E_CANTRESIZE, "unable to resize heap prefix in cache");
} /* end if */
else {
/* Resize 'standalone' data block */
- if(H5AC_resize_entry(heap->dblk, (size_t)new_dblk_size) < 0)
- HGOTO_ERROR(H5E_HEAP, H5E_CANTRESIZE, UFAIL, "unable to resize heap data block in cache")
+ if(FAIL == H5AC_resize_entry(heap->dblk, (size_t)new_dblk_size))
+ H5E_THROW(H5E_CANTRESIZE, "unable to resize heap data block in cache");
} /* end else */
/* Note new size */
heap->dblk_size = new_dblk_size;
- } /* end if */
+ } /* end if */
else { /* ...if we can't, allocate a new chunk & release the old */
/* Reallocate data block in file */
- if(H5HL_dblk_realloc(f, dxpl_id, heap, new_dblk_size) < 0)
- HGOTO_ERROR(H5E_HEAP, H5E_CANTRESIZE, UFAIL, "reallocating data block failed")
- } /* end if */
+ if(FAIL == H5HL__dblk_realloc(f, dxpl_id, heap, new_dblk_size))
+ H5E_THROW(H5E_CANTRESIZE, "reallocating data block failed");
+ } /* end if */
/* If the last free list in the heap is at the end of the heap, extend it */
- if(last_fl && last_fl->offset + last_fl->size == old_dblk_size) {
- /*
- * Increase the size of the last free block.
- */
- offset = last_fl->offset;
- last_fl->offset += need_size;
- last_fl->size += need_more - need_size;
- HDassert(last_fl->offset == H5HL_ALIGN(last_fl->offset));
- HDassert(last_fl->size == H5HL_ALIGN(last_fl->size));
-
- if (last_fl->size < H5HL_SIZEOF_FREE(f)) {
+ if(last_fl && last_fl->offset + last_fl->size == old_dblk_size) {
+ /*
+ * Increase the size of the last free block.
+ */
+ offset = last_fl->offset;
+ last_fl->offset += need_size;
+ last_fl->size += need_more - need_size;
+ HDassert(last_fl->offset == H5HL_ALIGN(last_fl->offset));
+ HDassert(last_fl->size == H5HL_ALIGN(last_fl->size));
+
+ if (last_fl->size < H5HL_SIZEOF_FREE(f)) {
#ifdef H5HL_DEBUG
- if (H5DEBUG(HL) && last_fl->size) {
- fprintf(H5DEBUG(HL), "H5HL: lost %lu bytes at line %d\n",
- (unsigned long)(last_fl->size), __LINE__);
- }
+ if (H5DEBUG(HL) && last_fl->size) {
+ HDfprintf(H5DEBUG(HL), "H5HL: lost %lu bytes at line %d\n",
+ (unsigned long)(last_fl->size), __LINE__);
+ }
#endif
- last_fl = H5HL_remove_free(heap, last_fl);
- }
- } /* end if */
+ last_fl = H5HL__remove_free(heap, last_fl);
+ }
+ } /* end if */
else {
- /*
- * Create a new free list element large enough that we can
- * take some space out of it right away.
- */
- offset = old_dblk_size;
- if(need_more - need_size >= H5HL_SIZEOF_FREE(f)) {
- if(NULL == (fl = H5FL_MALLOC(H5HL_free_t)))
- HGOTO_ERROR(H5E_HEAP, H5E_CANTALLOC, UFAIL, "memory allocation failed")
- fl->offset = old_dblk_size + need_size;
- fl->size = need_more - need_size;
- HDassert(fl->offset == H5HL_ALIGN(fl->offset));
- HDassert(fl->size == H5HL_ALIGN(fl->size));
- fl->prev = NULL;
- fl->next = heap->freelist;
- if(heap->freelist)
+ /*
+ * Create a new free list element large enough that we can
+ * take some space out of it right away.
+ */
+ offset = old_dblk_size;
+ if(need_more - need_size >= H5HL_SIZEOF_FREE(f)) {
+ if(NULL == (fl = H5FL_MALLOC(H5HL_free_t)))
+ H5E_THROW(H5E_CANTALLOC, "memory allocation failed");
+ fl->offset = old_dblk_size + need_size;
+ fl->size = need_more - need_size;
+ HDassert(fl->offset == H5HL_ALIGN(fl->offset));
+ HDassert(fl->size == H5HL_ALIGN(fl->size));
+ fl->prev = NULL;
+ fl->next = heap->freelist;
+ if(heap->freelist)
heap->freelist->prev = fl;
- heap->freelist = fl;
+ heap->freelist = fl;
#ifdef H5HL_DEBUG
- } else if (H5DEBUG(HL) && need_more > need_size) {
- fprintf(H5DEBUG(HL),
- "H5HL_insert: lost %lu bytes at line %d\n",
- (unsigned long)(need_more - need_size), __LINE__);
+ } else if (H5DEBUG(HL) && need_more > need_size) {
+ HDfprintf(H5DEBUG(HL), "H5HL_insert: lost %lu bytes at line %d\n",
+ (unsigned long)(need_more - need_size), __LINE__);
#endif
- }
- } /* end else */
+ }
+ } /* end else */
#ifdef H5HL_DEBUG
- if (H5DEBUG(HL)) {
- fprintf(H5DEBUG(HL),
- "H5HL: resize mem buf from %lu to %lu bytes\n",
- (unsigned long)(old_dblk_size),
- (unsigned long)(old_dblk_size + need_more));
- }
+ if (H5DEBUG(HL)) {
+ HDfprintf(H5DEBUG(HL), "H5HL: resize mem buf from %lu to %lu bytes\n",
+ (unsigned long)(old_dblk_size),
+ (unsigned long)(old_dblk_size + need_more));
+ }
#endif
- if(NULL == (heap->dblk_image = H5FL_BLK_REALLOC(lheap_chunk, heap->dblk_image, heap->dblk_size)))
- HGOTO_ERROR(H5E_HEAP, H5E_CANTALLOC, UFAIL, "memory allocation failed")
+ if(NULL == (heap->dblk_image = H5FL_BLK_REALLOC(lheap_chunk, heap->dblk_image, heap->dblk_size)))
+ H5E_THROW(H5E_CANTALLOC, "memory allocation failed");
- /* Clear new section so junk doesn't appear in the file */
+ /* Clear new section so junk doesn't appear in the file */
/* (Avoid clearing section which will be overwritten with newly inserted data) */
- HDmemset(heap->dblk_image + offset + buf_size, 0, (new_dblk_size - (offset + buf_size)));
+ HDmemset(heap->dblk_image + offset + buf_size, 0, (new_dblk_size - (offset + buf_size)));
} /* end if */
/* Copy the data into the heap */
@@ -878,42 +747,42 @@ H5HL_insert(H5F_t *f, hid_t dxpl_id, H5HL_t *heap, size_t buf_size, const void *
/* Set return value */
ret_value = offset;
-done:
- FUNC_LEAVE_NOAPI(ret_value)
-} /* H5HL_insert() */
+CATCH
+ /* No special processing on errors */
+
+END_FUNC(PRIV) /* H5HL_insert() */
/*-------------------------------------------------------------------------
- * Function: H5HL_remove
+ * Function: H5HL_remove
*
- * Purpose: Removes an object or part of an object from the heap at
- * address ADDR of file F. The object (or part) to remove
- * begins at byte OFFSET from the beginning of the heap and
- * continues for SIZE bytes.
+ * Purpose: Removes an object or part of an object from the heap at
+ * address ADDR of file F. The object (or part) to remove
+ * begins at byte OFFSET from the beginning of the heap and
+ * continues for SIZE bytes.
*
- * Once part of an object is removed, one must not attempt
- * to access that part. Removing the beginning of an object
- * results in the object OFFSET increasing by the amount
- * truncated. Removing the end of an object results in
- * object truncation. Removing the middle of an object results
- * in two separate objects, one at the original offset and
- * one at the first offset past the removed portion.
+ * Once part of an object is removed, one must not attempt
+ * to access that part. Removing the beginning of an object
+ * results in the object OFFSET increasing by the amount
+ * truncated. Removing the end of an object results in
+ * object truncation. Removing the middle of an object results
+ * in two separate objects, one at the original offset and
+ * one at the first offset past the removed portion.
*
- * Return: Non-negative on success/Negative on failure
+ * Return: Success: SUCCEED
+ * Failure: FAIL
*
- * Programmer: Robb Matzke
- * matzke@llnl.gov
- * Jul 16 1997
+ * Programmer: Robb Matzke
+ * matzke@llnl.gov
+ * Jul 16 1997
*
*-------------------------------------------------------------------------
*/
-herr_t
-H5HL_remove(H5F_t *f, hid_t dxpl_id, H5HL_t *heap, size_t offset, size_t size)
-{
- H5HL_free_t *fl = NULL;
- herr_t ret_value = SUCCEED; /* Return value */
+BEGIN_FUNC(PRIV, ERR,
+herr_t, SUCCEED, FAIL,
+H5HL_remove(H5F_t *f, hid_t dxpl_id, H5HL_t *heap, size_t offset, size_t size))
- FUNC_ENTER_NOAPI(FAIL)
+ H5HL_free_t *fl = NULL;
/* check arguments */
HDassert(f);
@@ -932,8 +801,8 @@ H5HL_remove(H5F_t *f, hid_t dxpl_id, H5HL_t *heap, size_t offset, size_t size)
* so we just accept that an extra flush of the heap info could occur
* if an error occurs -QAK)
*/
- if(H5HL_dirty(heap) < 0)
- HGOTO_ERROR(H5E_HEAP, H5E_CANTMARKDIRTY, FAIL, "unable to mark heap as dirty")
+ if(FAIL == H5HL__dirty(heap))
+ H5E_THROW(H5E_CANTMARKDIRTY, "unable to mark heap as dirty");
/*
* Check if this chunk can be prepended or appended to an already
@@ -944,60 +813,60 @@ H5HL_remove(H5F_t *f, hid_t dxpl_id, H5HL_t *heap, size_t offset, size_t size)
while(fl) {
H5HL_free_t *fl2 = NULL;
- if((offset + size) == fl->offset) {
- fl->offset = offset;
- fl->size += size;
- HDassert(fl->offset == H5HL_ALIGN(fl->offset));
- HDassert(fl->size == H5HL_ALIGN(fl->size));
- fl2 = fl->next;
- while(fl2) {
- if((fl2->offset + fl2->size) == fl->offset) {
- fl->offset = fl2->offset;
- fl->size += fl2->size;
- HDassert(fl->offset == H5HL_ALIGN(fl->offset));
- HDassert(fl->size == H5HL_ALIGN(fl->size));
- fl2 = H5HL_remove_free(heap, fl2);
- if(((fl->offset + fl->size) == heap->dblk_size) &&
+ if((offset + size) == fl->offset) {
+ fl->offset = offset;
+ fl->size += size;
+ HDassert(fl->offset == H5HL_ALIGN(fl->offset));
+ HDassert(fl->size == H5HL_ALIGN(fl->size));
+ fl2 = fl->next;
+ while(fl2) {
+ if((fl2->offset + fl2->size) == fl->offset) {
+ fl->offset = fl2->offset;
+ fl->size += fl2->size;
+ HDassert(fl->offset == H5HL_ALIGN(fl->offset));
+ HDassert(fl->size == H5HL_ALIGN(fl->size));
+ fl2 = H5HL__remove_free(heap, fl2);
+ if(((fl->offset + fl->size) == heap->dblk_size) &&
((2 * fl->size) > heap->dblk_size)) {
- if(H5HL_minimize_heap_space(f, dxpl_id, heap) < 0)
- HGOTO_ERROR(H5E_HEAP, H5E_CANTFREE, FAIL, "heap size minimization failed")
+ if(FAIL == H5HL__minimize_heap_space(f, dxpl_id, heap))
+ H5E_THROW(H5E_CANTFREE, "heap size minimization failed");
}
- HGOTO_DONE(SUCCEED);
- }
- fl2 = fl2->next;
- }
- if(((fl->offset + fl->size) == heap->dblk_size) &&
+ H5_LEAVE(SUCCEED);
+ }
+ fl2 = fl2->next;
+ }
+ if(((fl->offset + fl->size) == heap->dblk_size) &&
((2 * fl->size) > heap->dblk_size)) {
- if(H5HL_minimize_heap_space(f, dxpl_id, heap) < 0)
- HGOTO_ERROR(H5E_HEAP, H5E_CANTFREE, FAIL, "heap size minimization failed")
+ if(FAIL == H5HL__minimize_heap_space(f, dxpl_id, heap))
+ H5E_THROW(H5E_CANTFREE, "heap size minimization failed");
}
- HGOTO_DONE(SUCCEED);
- } else if(fl->offset + fl->size == offset) {
- fl->size += size;
- fl2 = fl->next;
- HDassert(fl->size == H5HL_ALIGN(fl->size));
- while(fl2) {
- if(fl->offset + fl->size == fl2->offset) {
- fl->size += fl2->size;
- HDassert(fl->size == H5HL_ALIGN(fl->size));
- fl2 = H5HL_remove_free(heap, fl2);
- if(((fl->offset + fl->size) == heap->dblk_size) &&
- ((2 * fl->size) > heap->dblk_size)) {
- if(H5HL_minimize_heap_space(f, dxpl_id, heap) < 0)
- HGOTO_ERROR(H5E_HEAP, H5E_CANTFREE, FAIL, "heap size minimization failed")
+ H5_LEAVE(SUCCEED);
+ } else if(fl->offset + fl->size == offset) {
+ fl->size += size;
+ fl2 = fl->next;
+ HDassert(fl->size == H5HL_ALIGN(fl->size));
+ while(fl2) {
+ if(fl->offset + fl->size == fl2->offset) {
+ fl->size += fl2->size;
+ HDassert(fl->size == H5HL_ALIGN(fl->size));
+ fl2 = H5HL__remove_free(heap, fl2);
+ if(((fl->offset + fl->size) == heap->dblk_size) &&
+ ((2 * fl->size) > heap->dblk_size)) {
+ if(FAIL == H5HL__minimize_heap_space(f, dxpl_id, heap))
+ H5E_THROW(H5E_CANTFREE, "heap size minimization failed");
} /* end if */
- HGOTO_DONE(SUCCEED);
- } /* end if */
- fl2 = fl2->next;
- } /* end while */
- if(((fl->offset + fl->size) == heap->dblk_size) &&
+ H5_LEAVE(SUCCEED);
+ } /* end if */
+ fl2 = fl2->next;
+ } /* end while */
+ if(((fl->offset + fl->size) == heap->dblk_size) &&
((2 * fl->size) > heap->dblk_size)) {
- if(H5HL_minimize_heap_space(f, dxpl_id, heap) < 0)
- HGOTO_ERROR(H5E_HEAP, H5E_CANTFREE, FAIL, "heap size minimization failed")
+ if(FAIL == H5HL__minimize_heap_space(f, dxpl_id, heap))
+ H5E_THROW(H5E_CANTFREE, "heap size minimization failed");
} /* end if */
- HGOTO_DONE(SUCCEED);
- } /* end if */
- fl = fl->next;
+ H5_LEAVE(SUCCEED);
+ } /* end if */
+ fl = fl->next;
} /* end while */
/*
@@ -1007,19 +876,18 @@ H5HL_remove(H5F_t *f, hid_t dxpl_id, H5HL_t *heap, size_t offset, size_t size)
*/
if(size < H5HL_SIZEOF_FREE(f)) {
#ifdef H5HL_DEBUG
- if(H5DEBUG(HL)) {
- fprintf(H5DEBUG(HL), "H5HL: lost %lu bytes\n",
- (unsigned long) size);
- }
+ if(H5DEBUG(HL)) {
+ HDfprintf(H5DEBUG(HL), "H5HL: lost %lu bytes\n", (unsigned long) size);
+ }
#endif
- HGOTO_DONE(SUCCEED);
+ H5_LEAVE(SUCCEED);
} /* end if */
/*
* Add an entry to the free list.
*/
if(NULL == (fl = H5FL_MALLOC(H5HL_free_t)))
- HGOTO_ERROR(H5E_HEAP, H5E_CANTALLOC, FAIL, "memory allocation failed")
+ H5E_THROW(H5E_CANTALLOC, "memory allocation failed");
fl->offset = offset;
fl->size = size;
HDassert(fl->offset == H5HL_ALIGN(fl->offset));
@@ -1032,39 +900,39 @@ H5HL_remove(H5F_t *f, hid_t dxpl_id, H5HL_t *heap, size_t offset, size_t size)
if(((fl->offset + fl->size) == heap->dblk_size) &&
((2 * fl->size) > heap->dblk_size)) {
- if(H5HL_minimize_heap_space(f, dxpl_id, heap) < 0)
- HGOTO_ERROR(H5E_HEAP, H5E_CANTFREE, FAIL, "heap size minimization failed")
+ if(FAIL == H5HL__minimize_heap_space(f, dxpl_id, heap))
+ H5E_THROW(H5E_CANTFREE, "heap size minimization failed");
} /* end if */
-done:
- FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5HL_remove() */
+CATCH
+ /* No special processing on exit */
+
+END_FUNC(PRIV) /* end H5HL_remove() */
/*-------------------------------------------------------------------------
- * Function: H5HL_delete
+ * Function: H5HL_delete
*
- * Purpose: Deletes a local heap from disk, freeing disk space used.
+ * Purpose: Deletes a local heap from disk, freeing disk space used.
*
- * Return: Non-negative on success/Negative on failure
+ * Return: Success: SUCCEED
+ * Failure: FAIL
*
- * Programmer: Quincey Koziol
- * koziol@ncsa.uiuc.edu
- * Mar 22 2003
+ * Programmer: Quincey Koziol
+ * koziol@hdfgroup.org
+ * Mar 22 2003
*
*-------------------------------------------------------------------------
*/
-herr_t
-H5HL_delete(H5F_t *f, hid_t dxpl_id, haddr_t addr)
-{
- H5HL_t *heap; /* Local heap to delete */
+BEGIN_FUNC(PRIV, ERR,
+herr_t, SUCCEED, FAIL,
+H5HL_delete(H5F_t *f, hid_t dxpl_id, haddr_t addr))
+
+ H5HL_t *heap; /* Local heap to delete */
H5HL_cache_prfx_ud_t prfx_udata; /* User data for protecting local heap prefix */
H5HL_prfx_t *prfx = NULL; /* Local heap prefix */
H5HL_dblk_t *dblk = NULL; /* Local heap data block */
unsigned cache_flags = H5AC__NO_FLAGS_SET; /* Flags for unprotecting heap */
- herr_t ret_value = SUCCEED; /* Return value */
-
- FUNC_ENTER_NOAPI(FAIL)
/* check arguments */
HDassert(f);
@@ -1078,7 +946,7 @@ H5HL_delete(H5F_t *f, hid_t dxpl_id, haddr_t addr)
/* Protect the local heap prefix */
if(NULL == (prfx = (H5HL_prfx_t *)H5AC_protect(f, dxpl_id, H5AC_LHEAP_PRFX, addr, &prfx_udata, H5AC_WRITE)))
- HGOTO_ERROR(H5E_HEAP, H5E_CANTPROTECT, FAIL, "unable to load heap prefix")
+ H5E_THROW(H5E_CANTPROTECT, "unable to load heap prefix");
/* Get the pointer to the heap */
heap = prfx->heap;
@@ -1093,53 +961,51 @@ H5HL_delete(H5F_t *f, hid_t dxpl_id, haddr_t addr)
/* Protect the local heap data block */
if(NULL == (dblk = (H5HL_dblk_t *)H5AC_protect(f, dxpl_id, H5AC_LHEAP_DBLK, heap->dblk_addr, &dblk_udata, H5AC_WRITE)))
- HGOTO_ERROR(H5E_HEAP, H5E_CANTPROTECT, FAIL, "unable to load heap data block")
+ H5E_THROW(H5E_CANTPROTECT, "unable to load heap data block");
/* Pin the prefix, if the data block was loaded from file */
if(dblk_udata.loaded) {
- if(H5AC_pin_protected_entry(prfx) < 0)
- HGOTO_ERROR(H5E_HEAP, H5E_CANTPIN, FAIL, "unable to pin local heap prefix")
+ if(FAIL == H5AC_pin_protected_entry(prfx))
+ H5E_THROW(H5E_CANTPIN, "unable to pin local heap prefix");
} /* end if */
} /* end if */
/* Set the flags for releasing the prefix and data block */
cache_flags |= H5AC__DIRTIED_FLAG | H5AC__DELETED_FLAG | H5AC__FREE_FILE_SPACE_FLAG;
-done:
+CATCH
/* Release the data block from the cache, now deleted */
- if(dblk && H5AC_unprotect(f, dxpl_id, H5AC_LHEAP_DBLK, heap->dblk_addr, dblk, cache_flags) < 0)
- HDONE_ERROR(H5E_HEAP, H5E_CANTUNPROTECT, FAIL, "unable to release local heap data block")
+ if(dblk && FAIL == H5AC_unprotect(f, dxpl_id, H5AC_LHEAP_DBLK, heap->dblk_addr, dblk, cache_flags))
+ H5E_THROW(H5E_CANTUNPROTECT, "unable to release local heap data block");
/* Release the prefix from the cache, now deleted */
- if(prfx && H5AC_unprotect(f, dxpl_id, H5AC_LHEAP_PRFX, heap->prfx_addr, prfx, cache_flags) < 0)
- HDONE_ERROR(H5E_HEAP, H5E_CANTUNPROTECT, FAIL, "unable to release local heap prefix")
+ if(prfx && FAIL == H5AC_unprotect(f, dxpl_id, H5AC_LHEAP_PRFX, heap->prfx_addr, prfx, cache_flags))
+ H5E_THROW(H5E_CANTUNPROTECT, "unable to release local heap prefix");
- FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5HL_delete() */
+END_FUNC(PRIV) /* end H5HL_delete() */
/*-------------------------------------------------------------------------
- * Function: H5HL_get_size
+ * Function: H5HL_get_size
*
- * Purpose: Retrieves the current size of a heap
+ * Purpose: Retrieves the current size of a heap
*
- * Return: Non-negative on success/Negative on failure
+ * Return: Success: SUCCEED
+ * Failure: FAIL
*
- * Programmer: Quincey Koziol
- * koziol@ncsa.uiuc.edu
- * Nov 7 2005
+ * Programmer: Quincey Koziol
+ * koziol@hdfgroup.org
+ * Nov 7 2005
*
*-------------------------------------------------------------------------
*/
-herr_t
-H5HL_get_size(H5F_t *f, hid_t dxpl_id, haddr_t addr, size_t *size)
-{
- H5HL_cache_prfx_ud_t prfx_udata; /* User data for protecting local heap prefix */
- H5HL_prfx_t *prfx = NULL; /* Local heap prefix */
- H5HL_t *heap; /* Heap data structure */
- herr_t ret_value = SUCCEED; /* Return value */
+BEGIN_FUNC(PRIV, ERR,
+herr_t, SUCCEED, FAIL,
+H5HL_get_size(H5F_t *f, hid_t dxpl_id, haddr_t addr, size_t *size))
- FUNC_ENTER_NOAPI(FAIL)
+ H5HL_cache_prfx_ud_t prfx_udata; /* User data for protecting local heap prefix */
+ H5HL_prfx_t *prfx = NULL; /* Local heap prefix */
+ H5HL_t *heap; /* Heap data structure */
/* check arguments */
HDassert(f);
@@ -1154,7 +1020,7 @@ H5HL_get_size(H5F_t *f, hid_t dxpl_id, haddr_t addr, size_t *size)
/* Protect the local heap prefix */
if(NULL == (prfx = (H5HL_prfx_t *)H5AC_protect(f, dxpl_id, H5AC_LHEAP_PRFX, addr, &prfx_udata, H5AC_READ)))
- HGOTO_ERROR(H5E_HEAP, H5E_CANTPROTECT, FAIL, "unable to load heap prefix")
+ H5E_THROW(H5E_CANTPROTECT, "unable to load heap prefix");
/* Get the pointer to the heap */
heap = prfx->heap;
@@ -1162,12 +1028,11 @@ H5HL_get_size(H5F_t *f, hid_t dxpl_id, haddr_t addr, size_t *size)
/* Set the size to return */
*size = heap->dblk_size;
-done:
- if(prfx && H5AC_unprotect(f, dxpl_id, H5AC_LHEAP_PRFX, heap->prfx_addr, prfx, H5AC__NO_FLAGS_SET) < 0)
- HDONE_ERROR(H5E_HEAP, H5E_CANTUNPROTECT, FAIL, "unable to release local heap prefix")
+CATCH
+ if(prfx && FAIL == H5AC_unprotect(f, dxpl_id, H5AC_LHEAP_PRFX, heap->prfx_addr, prfx, H5AC__NO_FLAGS_SET))
+ H5E_THROW(H5E_CANTUNPROTECT, "unable to release local heap prefix");
- FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5HL_get_size() */
+END_FUNC(PRIV) /* end H5HL_get_size() */
/*-------------------------------------------------------------------------
@@ -1176,22 +1041,21 @@ done:
* Purpose: Compute the size in bytes of the specified instance of
* H5HL_t via H5HL_size()
*
- * Return: Non-negative on success/Negative on failure
+ * Return: Success: SUCCEED
+ * Failure: FAIL
*
* Programmer: Vailin Choi
* June 19 2007
*
*-------------------------------------------------------------------------
*/
-herr_t
-H5HL_heapsize(H5F_t *f, hid_t dxpl_id, haddr_t addr, hsize_t *heap_size)
-{
- H5HL_cache_prfx_ud_t prfx_udata; /* User data for protecting local heap prefix */
- H5HL_prfx_t *prfx = NULL; /* Local heap prefix */
- H5HL_t *heap; /* Heap data structure */
- herr_t ret_value = SUCCEED; /* Return value */
+BEGIN_FUNC(PRIV, ERR,
+herr_t, SUCCEED, FAIL,
+H5HL_heapsize(H5F_t *f, hid_t dxpl_id, haddr_t addr, hsize_t *heap_size))
- FUNC_ENTER_NOAPI(FAIL)
+ H5HL_cache_prfx_ud_t prfx_udata; /* User data for protecting local heap prefix */
+ H5HL_prfx_t *prfx = NULL; /* Local heap prefix */
+ H5HL_t *heap; /* Heap data structure */
/* check arguments */
HDassert(f);
@@ -1206,7 +1070,7 @@ H5HL_heapsize(H5F_t *f, hid_t dxpl_id, haddr_t addr, hsize_t *heap_size)
/* Protect the local heap prefix */
if(NULL == (prfx = (H5HL_prfx_t *)H5AC_protect(f, dxpl_id, H5AC_LHEAP_PRFX, addr, &prfx_udata, H5AC_READ)))
- HGOTO_ERROR(H5E_HEAP, H5E_CANTPROTECT, FAIL, "unable to load heap prefix")
+ H5E_THROW(H5E_CANTPROTECT, "unable to load heap prefix");
/* Get the pointer to the heap */
heap = prfx->heap;
@@ -1214,10 +1078,8 @@ H5HL_heapsize(H5F_t *f, hid_t dxpl_id, haddr_t addr, hsize_t *heap_size)
/* Accumulate the size of the local heap */
*heap_size += (hsize_t)(heap->prfx_size + heap->dblk_size);
-done:
- if(prfx && H5AC_unprotect(f, dxpl_id, H5AC_LHEAP_PRFX, heap->prfx_addr, prfx, H5AC__NO_FLAGS_SET) < 0)
- HDONE_ERROR(H5E_HEAP, H5E_CANTUNPROTECT, FAIL, "unable to release local heap prefix")
-
- FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5HL_heapsize() */
+CATCH
+ if(prfx && FAIL == H5AC_unprotect(f, dxpl_id, H5AC_LHEAP_PRFX, heap->prfx_addr, prfx, H5AC__NO_FLAGS_SET))
+ H5E_THROW(H5E_CANTUNPROTECT, "unable to release local heap prefix");
+END_FUNC(PRIV) /* end H5HL_heapsize() */
diff --git a/src/H5HLcache.c b/src/H5HLcache.c
index a3c43ac..a27e092 100644
--- a/src/H5HLcache.c
+++ b/src/H5HLcache.c
@@ -15,11 +15,11 @@
/*-------------------------------------------------------------------------
*
- * Created: H5HLcache.c
- * Feb 5 2008
- * Quincey Koziol <koziol@hdfgroup.org>
+ * Created: H5HLcache.c
+ * Feb 5 2008
+ * Quincey Koziol <koziol@hdfgroup.org>
*
- * Purpose: Implement local heap metadata cache methods.
+ * Purpose: Implement local heap metadata cache methods.
*
*-------------------------------------------------------------------------
*/
@@ -28,30 +28,31 @@
/* Module Setup */
/****************/
-#define H5HL_PACKAGE /* Suppress error about including H5HLpkg */
+#define H5HL_PACKAGE /* Suppress error about including H5HLpkg */
/***********/
/* Headers */
/***********/
-#include "H5private.h" /* Generic Functions */
-#include "H5Eprivate.h" /* Error handling */
-#include "H5HLpkg.h" /* Local Heaps */
-#include "H5MFprivate.h" /* File memory management */
-#include "H5WBprivate.h" /* Wrapped Buffers */
+#include "H5private.h" /* Generic Functions */
+#include "H5Eprivate.h" /* Error handling */
+#include "H5HLpkg.h" /* Local Heaps */
+#include "H5MFprivate.h" /* File memory management */
+#include "H5WBprivate.h" /* Wrapped Buffers */
/****************/
/* Local Macros */
/****************/
-#define H5HL_VERSION 0 /* Local heap collection version */
+#define H5HL_VERSION 0 /* Local heap collection version */
-/* Set the local heap size to speculatively read in */
-/* (needs to be more than the local heap prefix size to work at all and
+/* Set the local heap size to speculatively read in
+ * (needs to be more than the local heap prefix size to work at all and
* should be larger than the default local heap size to save the
- * extra I/O operations) */
-#define H5HL_SPEC_READ_SIZE 512
+ * extra I/O operations)
+ */
+#define H5HL_SPEC_READ_SIZE 512
/******************/
@@ -69,19 +70,25 @@
/********************/
/* Metadata cache callbacks */
-static void *H5HL_prefix_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, void *udata);
-static herr_t H5HL_prefix_flush(H5F_t *f, hid_t dxpl_id, hbool_t dest, haddr_t addr,
+/* Local heap prefix */
+static H5HL_prfx_t *H5HL__prefix_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, void *udata);
+static herr_t H5HL__prefix_flush(H5F_t *f, hid_t dxpl_id, hbool_t dest, haddr_t addr,
void *thing, unsigned *flags_ptr);
-static herr_t H5HL_prefix_dest(H5F_t *f, void *thing);
-static herr_t H5HL_prefix_clear(H5F_t *f, void *thing, hbool_t destroy);
-static herr_t H5HL_prefix_size(const H5F_t *f, const void *thing, size_t *size_ptr);
-static void *H5HL_datablock_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, void *udata);
-static herr_t H5HL_datablock_flush(H5F_t *f, hid_t dxpl_id, hbool_t dest, haddr_t addr,
+static herr_t H5HL__prefix_dest(H5F_t *f, void *thing);
+static herr_t H5HL__prefix_clear(H5F_t *f, void *thing, hbool_t destroy);
+static herr_t H5HL__prefix_size(const H5F_t *f, const void *thing, size_t *size_ptr);
+
+/* Local heap data block */
+static H5HL_dblk_t *H5HL__datablock_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, void *udata);
+static herr_t H5HL__datablock_flush(H5F_t *f, hid_t dxpl_id, hbool_t dest, haddr_t addr,
void *thing, unsigned *flags_ptr);
-static herr_t H5HL_datablock_dest(H5F_t *f, void *thing);
-static herr_t H5HL_datablock_clear(H5F_t *f, void *thing, hbool_t destroy);
-static herr_t H5HL_datablock_size(const H5F_t *f, const void *thing, size_t *size_ptr);
+static herr_t H5HL__datablock_dest(H5F_t *f, void *thing);
+static herr_t H5HL__datablock_clear(H5F_t *f, void *thing, hbool_t destroy);
+static herr_t H5HL__datablock_size(const H5F_t *f, const void *thing, size_t *size_ptr);
+/* Free list de/serialization */
+static herr_t H5HL__fl_deserialize(H5HL_t *heap);
+static void H5HL__fl_serialize(const H5HL_t *heap);
/*********************/
/* Package Variables */
@@ -90,22 +97,22 @@ static herr_t H5HL_datablock_size(const H5F_t *f, const void *thing, size_t *siz
/* H5HL inherits cache-like properties from H5AC */
const H5AC_class_t H5AC_LHEAP_PRFX[1] = {{
H5AC_LHEAP_PRFX_ID,
- H5HL_prefix_load,
- H5HL_prefix_flush,
- H5HL_prefix_dest,
- H5HL_prefix_clear,
- NULL,
- H5HL_prefix_size,
+ (H5AC_load_func_t) H5HL__prefix_load,
+ (H5AC_flush_func_t) H5HL__prefix_flush,
+ (H5AC_dest_func_t) H5HL__prefix_dest,
+ (H5AC_clear_func_t) H5HL__prefix_clear,
+ (H5AC_notify_func_t) NULL,
+ (H5AC_size_func_t) H5HL__prefix_size,
}};
const H5AC_class_t H5AC_LHEAP_DBLK[1] = {{
H5AC_LHEAP_DBLK_ID,
- H5HL_datablock_load,
- H5HL_datablock_flush,
- H5HL_datablock_dest,
- H5HL_datablock_clear,
- NULL,
- H5HL_datablock_size,
+ (H5AC_load_func_t) H5HL__datablock_load,
+ (H5AC_flush_func_t) H5HL__datablock_flush,
+ (H5AC_dest_func_t) H5HL__datablock_dest,
+ (H5AC_clear_func_t) H5HL__datablock_clear,
+ (H5AC_notify_func_t) NULL,
+ (H5AC_size_func_t) H5HL__datablock_size,
}};
@@ -121,26 +128,24 @@ const H5AC_class_t H5AC_LHEAP_DBLK[1] = {{
/*-------------------------------------------------------------------------
- * Function: H5HL_fl_deserialize
+ * Function: H5HL__fl_deserialize
*
- * Purpose: Deserialize the free list for a heap data block
+ * Purpose: Deserialize the free list for a heap data block
*
- * Return: Non-negative on success/Negative on failure
+ * Return: Success: SUCCEED
+ * Failure: FAIL
*
- * Programmer: Quincey Koziol
- * koziol@hdfgroup.org
- * Oct 12 2008
+ * Programmer: Quincey Koziol
+ * koziol@hdfgroup.org
+ * Oct 12 2008
*
*-------------------------------------------------------------------------
*/
-static herr_t
-H5HL_fl_deserialize(H5HL_t *heap)
-{
- H5HL_free_t *fl = NULL, *tail = NULL; /* Heap free block nodes */
- hsize_t free_block; /* Offset of free block */
- herr_t ret_value = SUCCEED; /* Return value */
-
- FUNC_ENTER_NOAPI_NOINIT
+BEGIN_FUNC(STATIC, ERR,
+herr_t, SUCCEED, FAIL,
+H5HL__fl_deserialize(H5HL_t *heap))
+ H5HL_free_t *fl = NULL, *tail = NULL; /* Heap free block nodes */
+ hsize_t free_block; /* Offset of free block */
/* check arguments */
HDassert(heap);
@@ -153,11 +158,11 @@ H5HL_fl_deserialize(H5HL_t *heap)
/* Sanity check */
if(free_block >= heap->dblk_size)
- HGOTO_ERROR(H5E_HEAP, H5E_BADRANGE, FAIL, "bad heap free list")
+ H5E_THROW(H5E_BADRANGE, "bad heap free list");
/* Allocate & initialize free list node */
if(NULL == (fl = H5FL_MALLOC(H5HL_free_t)))
- HGOTO_ERROR(H5E_HEAP, H5E_CANTALLOC, FAIL, "memory allocation failed")
+ H5E_THROW(H5E_CANTALLOC, "memory allocation failed");
fl->offset = (size_t)free_block;
fl->prev = tail;
fl->next = NULL;
@@ -165,13 +170,13 @@ H5HL_fl_deserialize(H5HL_t *heap)
/* Decode offset of next free block */
p = heap->dblk_image + free_block;
H5F_DECODE_LENGTH_LEN(p, free_block, heap->sizeof_size);
- if(free_block == 0)
- HGOTO_ERROR(H5E_HEAP, H5E_BADVALUE, FAIL, "free block size is zero?")
+ if(0 == free_block)
+ H5E_THROW(H5E_BADVALUE, "free block size is zero?");
/* Decode length of this free block */
H5F_DECODE_LENGTH_LEN(p, fl->size, heap->sizeof_size);
if((fl->offset + fl->size) > heap->dblk_size)
- HGOTO_ERROR(H5E_HEAP, H5E_BADRANGE, FAIL, "bad heap free list")
+ H5E_THROW(H5E_BADRANGE, "bad heap free list");
/* Append node onto list */
if(tail)
@@ -182,35 +187,32 @@ H5HL_fl_deserialize(H5HL_t *heap)
fl = NULL;
} /* end while */
-done:
+CATCH
if(ret_value < 0)
if(fl)
- fl = H5FL_FREE(H5HL_free_t, fl);
+ /* H5FL_FREE always returns NULL so we can't check for errors */
+ fl = (H5HL_free_t *)H5FL_FREE(H5HL_free_t, fl);
- FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5HL_fl_deserialize() */
+END_FUNC(STATIC) /* end H5HL__fl_deserialize() */
/*-------------------------------------------------------------------------
- * Function: H5HL_fl_serialize
+ * Function: H5HL__fl_serialize
*
- * Purpose: Serialize the free list for a heap data block
+ * Purpose: Serialize the free list for a heap data block
*
- * Return: Success: SUCCESS
- * Failure: FAIL
+ * Return: Nothing (void)
*
- * Programmer: Quincey Koziol
- * koziol@hdfgroup.org
- * Oct 12 2008
+ * Programmer: Quincey Koziol
+ * koziol@hdfgroup.org
+ * Oct 12 2008
*
*-------------------------------------------------------------------------
*/
-static void
-H5HL_fl_serialize(const H5HL_t *heap)
-{
- H5HL_free_t *fl; /* Pointer to heap free list node */
+BEGIN_FUNC_VOID(STATIC, NOERR,
+H5HL__fl_serialize(const H5HL_t *heap))
- FUNC_ENTER_NOAPI_NOINIT_NOERR
+ H5HL_free_t *fl; /* Pointer to heap free list node */
/* check arguments */
HDassert(heap);
@@ -230,37 +232,34 @@ H5HL_fl_serialize(const H5HL_t *heap)
H5F_ENCODE_LENGTH_LEN(p, fl->size, heap->sizeof_size)
} /* end for */
- FUNC_LEAVE_NOAPI_VOID
-} /* end H5HL_fl_serialize() */
+END_FUNC_VOID(STATIC) /* end H5HL__fl_serialize() */
/*-------------------------------------------------------------------------
- * Function: H5HL_prefix_load
+ * Function: H5HL__prefix_load
*
- * Purpose: Loads a local heap prefix from disk.
+ * Purpose: Loads a local heap prefix from disk.
*
- * Return: Success: Ptr to a local heap memory data structure.
- * Failure: NULL
+ * Return: Success: Pointer to a local heap prefix structure.
+ * Failure: NULL
*
- * Programmer: Robb Matzke
- * matzke@llnl.gov
- * Jul 17 1997
+ * Programmer: Robb Matzke
+ * matzke@llnl.gov
+ * Jul 17 1997
*
*-------------------------------------------------------------------------
*/
-static void *
-H5HL_prefix_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, void *_udata)
-{
- H5HL_t *heap = NULL; /* Local heap */
- H5HL_prfx_t *prfx = NULL; /* Heap prefix deserialized */
- H5HL_cache_prfx_ud_t *udata = (H5HL_cache_prfx_ud_t *)_udata; /* User data for callback */
- uint8_t buf[H5HL_SPEC_READ_SIZE]; /* Buffer for decoding */
- size_t spec_read_size; /* Size of buffer to speculatively read in */
- const uint8_t *p; /* Pointer into decoding buffer */
- haddr_t eoa; /* Relative end of file address */
- H5HL_prfx_t *ret_value; /* Return value */
-
- FUNC_ENTER_NOAPI_NOINIT
+BEGIN_FUNC(STATIC, ERR,
+H5HL_prfx_t *, NULL, NULL,
+H5HL__prefix_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, void *_udata))
+
+ H5HL_t *heap = NULL; /* Local heap */
+ H5HL_prfx_t *prfx = NULL; /* Heap prefix deserialized */
+ H5HL_cache_prfx_ud_t *udata = (H5HL_cache_prfx_ud_t *)_udata; /* User data for callback */
+ uint8_t buf[H5HL_SPEC_READ_SIZE]; /* Buffer for decoding */
+ size_t spec_read_size; /* Size of buffer to speculatively read in */
+ const uint8_t *p; /* Pointer into decoding buffer */
+ haddr_t eoa; /* Relative end of file address */
/* check arguments */
HDassert(f);
@@ -273,36 +272,36 @@ H5HL_prefix_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, void *_udata)
/* Make certain we don't speculatively read off the end of the file */
if(HADDR_UNDEF == (eoa = H5F_get_eoa(f, H5FD_MEM_LHEAP)))
- HGOTO_ERROR(H5E_HEAP, H5E_CANTGET, NULL, "unable to determine file size")
+ H5E_THROW(H5E_CANTGET, "unable to determine file size");
/* Compute the size of the speculative local heap prefix buffer */
H5_ASSIGN_OVERFLOW(spec_read_size, MIN(eoa - addr, H5HL_SPEC_READ_SIZE), /* From: */ hsize_t, /* To: */ size_t);
HDassert(spec_read_size >= udata->sizeof_prfx);
/* Attempt to speculatively read both local heap prefix and heap data */
- if(H5F_block_read(f, H5FD_MEM_LHEAP, addr, spec_read_size, dxpl_id, buf) < 0)
- HGOTO_ERROR(H5E_HEAP, H5E_READERROR, NULL, "unable to read local heap prefix")
+ if(FAIL == H5F_block_read(f, H5FD_MEM_LHEAP, addr, spec_read_size, dxpl_id, buf))
+ H5E_THROW(H5E_READERROR, "unable to read local heap prefix");
p = buf;
/* Check magic number */
if(HDmemcmp(p, H5HL_MAGIC, (size_t)H5_SIZEOF_MAGIC))
- HGOTO_ERROR(H5E_HEAP, H5E_BADVALUE, NULL, "bad local heap signature")
+ H5E_THROW(H5E_BADVALUE, "bad local heap signature");
p += H5_SIZEOF_MAGIC;
/* Version */
if(H5HL_VERSION != *p++)
- HGOTO_ERROR(H5E_HEAP, H5E_BADVALUE, NULL, "wrong version number in local heap")
+ H5E_THROW(H5E_BADVALUE, "wrong version number in local heap");
/* Reserved */
p += 3;
/* Allocate space in memory for the heap */
- if(NULL == (heap = H5HL_new(udata->sizeof_size, udata->sizeof_addr, udata->sizeof_prfx)))
- HGOTO_ERROR(H5E_HEAP, H5E_CANTALLOC, NULL, "can't allocate local heap structure")
+ if(NULL == (heap = H5HL__new(udata->sizeof_size, udata->sizeof_addr, udata->sizeof_prfx)))
+ H5E_THROW(H5E_CANTALLOC, "can't allocate local heap structure");
/* Allocate the heap prefix */
- if(NULL == (prfx = H5HL_prfx_new(heap)))
- HGOTO_ERROR(H5E_HEAP, H5E_CANTALLOC, NULL, "can't allocate local heap prefix")
+ if(NULL == (prfx = H5HL__prfx_new(heap)))
+ H5E_THROW(H5E_CANTALLOC, "can't allocate local heap prefix");
/* Store the prefix's address & length */
heap->prfx_addr = udata->prfx_addr;
@@ -314,7 +313,7 @@ H5HL_prefix_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, void *_udata)
/* Free list head */
H5F_DECODE_LENGTH_LEN(p, heap->free_block, udata->sizeof_size);
if(heap->free_block != H5HL_FREE_NULL && heap->free_block >= heap->dblk_size)
- HGOTO_ERROR(H5E_HEAP, H5E_BADVALUE, NULL, "bad heap free list")
+ H5E_THROW(H5E_BADVALUE, "bad heap free list");
/* Heap data address */
H5F_addr_decode_len(udata->sizeof_addr, &p, &(heap->dblk_addr));
@@ -328,7 +327,7 @@ H5HL_prefix_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, void *_udata)
/* Allocate space for the heap data image */
if(NULL == (heap->dblk_image = H5FL_BLK_MALLOC(lheap_chunk, heap->dblk_size)))
- HGOTO_ERROR(H5E_HEAP, H5E_CANTALLOC, NULL, "memory allocation failed")
+ H5E_THROW(H5E_CANTALLOC, "memory allocation failed");
/* Check if the current buffer from the speculative read already has the heap data */
if(spec_read_size >= (heap->prfx_size + heap->dblk_size)) {
@@ -342,13 +341,13 @@ H5HL_prefix_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, void *_udata)
} /* end if */
else {
/* Read the local heap data block directly into buffer */
- if(H5F_block_read(f, H5FD_MEM_LHEAP, heap->dblk_addr, heap->dblk_size, dxpl_id, heap->dblk_image) < 0)
- HGOTO_ERROR(H5E_HEAP, H5E_READERROR, NULL, "unable to read heap data")
+ if(FAIL == H5F_block_read(f, H5FD_MEM_LHEAP, heap->dblk_addr, heap->dblk_size, dxpl_id, heap->dblk_image))
+ H5E_THROW(H5E_READERROR, "unable to read heap data");
} /* end else */
/* Build free list */
- if(H5HL_fl_deserialize(heap) < 0)
- HGOTO_ERROR(H5E_HEAP, H5E_CANTINIT, NULL, "can't initialize free list")
+ if(FAIL == H5HL__fl_deserialize(heap))
+ H5E_THROW(H5E_CANTINIT, "can't initialize free list");
} /* end if */
else
/* Note that the heap should _NOT_ be a single object in the cache */
@@ -358,47 +357,45 @@ H5HL_prefix_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, void *_udata)
/* Set return value */
ret_value = prfx;
-done:
+CATCH
/* Release the [possibly partially initialized] local heap on errors */
if(!ret_value) {
if(prfx) {
- if(H5HL_prfx_dest(prfx) < 0)
- HDONE_ERROR(H5E_HEAP, H5E_CANTRELEASE, NULL, "unable to destroy local heap prefix")
+ if(FAIL == H5HL__prfx_dest(prfx))
+ H5E_THROW(H5E_CANTRELEASE, "unable to destroy local heap prefix");
} /* end if */
else {
- if(heap && H5HL_dest(heap) < 0)
- HDONE_ERROR(H5E_HEAP, H5E_CANTRELEASE, NULL, "unable to destroy local heap")
+ if(heap && FAIL == H5HL__dest(heap))
+ H5E_THROW(H5E_CANTRELEASE, "unable to destroy local heap");
} /* end else */
} /* end if */
- FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5HL_prefix_load() */
+END_FUNC(STATIC) /* end H5HL__prefix_load() */
/*-------------------------------------------------------------------------
- * Function: H5HL_prefix_flush
+ * Function: H5HL__prefix_flush
*
- * Purpose: Flushes a heap from memory to disk if it's dirty. Optionally
- * deletes the heap from memory.
+ * Purpose: Flushes a heap from memory to disk if it's dirty. Optionally
+ * deletes the heap from memory.
*
- * Return: Non-negative on success/Negative on failure
+ * Return: Success: SUCCEED
+ * Failure: FAIL
*
- * Programmer: Robb Matzke
- * matzke@llnl.gov
- * Jul 17 1997
+ * Programmer: Robb Matzke
+ * matzke@llnl.gov
+ * Jul 17 1997
*
*-------------------------------------------------------------------------
*/
-static herr_t
-H5HL_prefix_flush(H5F_t *f, hid_t dxpl_id, hbool_t destroy, haddr_t addr,
- void *thing, unsigned UNUSED *flags_ptr)
-{
- H5HL_prfx_t *prfx = (H5HL_prfx_t *)thing; /* Local heap prefix to flush */
- H5WB_t *wb = NULL; /* Wrapped buffer for heap data */
- uint8_t heap_buf[H5HL_SPEC_READ_SIZE]; /* Buffer for heap */
- herr_t ret_value = SUCCEED; /* Return value */
+BEGIN_FUNC(STATIC, ERR,
+herr_t, SUCCEED, FAIL,
+H5HL__prefix_flush(H5F_t *f, hid_t dxpl_id, hbool_t destroy, haddr_t addr,
+ void *thing, unsigned UNUSED *flags_ptr))
- FUNC_ENTER_NOAPI_NOINIT
+ H5HL_prfx_t *prfx = (H5HL_prfx_t *)thing; /* Local heap prefix to flush */
+ H5WB_t *wb = NULL; /* Wrapped buffer for heap data */
+ uint8_t heap_buf[H5HL_SPEC_READ_SIZE]; /* Buffer for heap */
/* check arguments */
HDassert(f);
@@ -406,14 +403,15 @@ H5HL_prefix_flush(H5F_t *f, hid_t dxpl_id, hbool_t destroy, haddr_t addr,
HDassert(prfx);
if(prfx->cache_info.is_dirty) {
- H5HL_t *heap = prfx->heap; /* Pointer to the local heap */
- uint8_t *buf; /* Pointer to heap buffer */
- size_t buf_size; /* Size of buffer for encoding & writing heap info */
- uint8_t *p; /* Pointer into raw data buffer */
+ H5HL_t *heap = prfx->heap; /* Pointer to the local heap */
+ uint8_t *buf; /* Pointer to heap buffer */
+ size_t buf_size; /* Size of buffer for encoding & writing heap info */
+ uint8_t *p; /* Pointer into raw data buffer */
/* Wrap the local buffer for serialized heap info */
if(NULL == (wb = H5WB_wrap(heap_buf, sizeof(heap_buf))))
- HGOTO_ERROR(H5E_HEAP, H5E_CANTINIT, FAIL, "can't wrap buffer")
+ H5E_THROW(H5E_CANTINIT, "can't wrap buffer");
+
/* Compute the size of the buffer to encode & write */
buf_size = heap->prfx_size;
@@ -422,7 +420,7 @@ H5HL_prefix_flush(H5F_t *f, hid_t dxpl_id, hbool_t destroy, haddr_t addr,
/* Get a pointer to a buffer that's large enough for serialized heap */
if(NULL == (buf = (uint8_t *)H5WB_actual(wb, buf_size)))
- HGOTO_ERROR(H5E_HEAP, H5E_NOSPACE, FAIL, "can't get actual buffer")
+ H5E_THROW(H5E_NOSPACE, "can't get actual buffer");
/* Update the free block value from the free list */
heap->free_block = heap->freelist ? heap->freelist->offset : H5HL_FREE_NULL;
@@ -432,9 +430,9 @@ H5HL_prefix_flush(H5F_t *f, hid_t dxpl_id, hbool_t destroy, haddr_t addr,
HDmemcpy(p, H5HL_MAGIC, (size_t)H5_SIZEOF_MAGIC);
p += H5_SIZEOF_MAGIC;
*p++ = H5HL_VERSION;
- *p++ = 0; /*reserved*/
- *p++ = 0; /*reserved*/
- *p++ = 0; /*reserved*/
+ *p++ = 0; /*reserved*/
+ *p++ = 0; /*reserved*/
+ *p++ = 0; /*reserved*/
H5F_ENCODE_LENGTH_LEN(p, heap->dblk_size, heap->sizeof_size);
H5F_ENCODE_LENGTH_LEN(p, heap->free_block, heap->sizeof_size);
H5F_addr_encode_len(heap->sizeof_addr, &p, heap->dblk_addr);
@@ -453,53 +451,51 @@ H5HL_prefix_flush(H5F_t *f, hid_t dxpl_id, hbool_t destroy, haddr_t addr,
} /* end if */
/* Serialize the free list into the heap data's image */
- H5HL_fl_serialize(heap);
+ H5HL__fl_serialize(heap);
/* Copy the heap data block into the cache image */
HDmemcpy(p, heap->dblk_image, heap->dblk_size);
} /* end if */
/* Write the prefix [and possibly the data block] to the file */
- if(H5F_block_write(f, H5FD_MEM_LHEAP, addr, buf_size, dxpl_id, buf) < 0)
- HGOTO_ERROR(H5E_HEAP, H5E_WRITEERROR, FAIL, "unable to write heap header and data to file")
+ if(FAIL == H5F_block_write(f, H5FD_MEM_LHEAP, addr, buf_size, dxpl_id, buf))
+ H5E_THROW(H5E_WRITEERROR, "unable to write heap header and data to file");
- prfx->cache_info.is_dirty = FALSE;
+ prfx->cache_info.is_dirty = FALSE;
} /* end if */
/* Should we destroy the memory version? */
if(destroy)
- if(H5HL_prefix_dest(f, prfx) < 0)
- HGOTO_ERROR(H5E_HEAP, H5E_CANTFREE, FAIL, "unable to destroy local heap prefix")
+ if(FAIL == H5HL__prefix_dest(f, prfx))
+ H5E_THROW(H5E_CANTFREE, "unable to destroy local heap prefix");
-done:
+CATCH
/* Release resources */
- if(wb && H5WB_unwrap(wb) < 0)
- HDONE_ERROR(H5E_HEAP, H5E_CLOSEERROR, FAIL, "can't close wrapped buffer")
+ if(wb && FAIL == H5WB_unwrap(wb))
+ H5E_THROW(H5E_CLOSEERROR, "can't close wrapped buffer");
- FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5HL_prefix_flush() */
+END_FUNC(STATIC) /* end H5HL__prefix_flush() */
/*-------------------------------------------------------------------------
- * Function: H5HL_prefix_dest
+ * Function: H5HL__prefix_dest
*
- * Purpose: Destroys a heap prefix in memory.
+ * Purpose: Destroys a heap prefix in memory.
*
- * Return: Non-negative on success/Negative on failure
+ * Return: Success: SUCCEED
+ * Failure: FAIL
*
- * Programmer: Quincey Koziol
- * koziol@ncsa.uiuc.edu
- * Jan 15 2003
+ * Programmer: Quincey Koziol
+ * koziol@hdfgroup.org
+ * Jan 15 2003
*
*-------------------------------------------------------------------------
*/
-static herr_t
-H5HL_prefix_dest(H5F_t *f, void *thing)
-{
- H5HL_prfx_t *prfx = (H5HL_prfx_t *)thing; /* Local heap prefix to destroy */
- herr_t ret_value = SUCCEED; /* Return value */
+BEGIN_FUNC(STATIC, ERR,
+herr_t, SUCCEED, FAIL,
+H5HL__prefix_dest(H5F_t *f, void *thing))
- FUNC_ENTER_NOAPI_NOINIT
+ H5HL_prfx_t *prfx = (H5HL_prfx_t *)thing; /* Local heap prefix to destroy */
/* check arguments */
HDassert(prfx);
@@ -523,39 +519,39 @@ H5HL_prefix_dest(H5F_t *f, void *thing)
/* Free the local heap prefix [and possible the data block] on disk */
/* (XXX: Nasty usage of internal DXPL value! -QAK) */
- if(H5MF_xfree(f, H5FD_MEM_LHEAP, H5AC_dxpl_id, prfx->cache_info.addr, free_size) < 0)
- HGOTO_ERROR(H5E_HEAP, H5E_CANTFREE, FAIL, "unable to free local heap prefix")
+ if(FAIL == H5MF_xfree(f, H5FD_MEM_LHEAP, H5AC_dxpl_id, prfx->cache_info.addr, free_size))
+ H5E_THROW(H5E_CANTFREE, "unable to free local heap prefix");
} /* end if */
/* Destroy local heap prefix */
- if(H5HL_prfx_dest(prfx) < 0)
- HGOTO_ERROR(H5E_HEAP, H5E_CANTRELEASE, FAIL, "can't destroy local heap prefix")
+ if(FAIL == H5HL__prfx_dest(prfx))
+ H5E_THROW(H5E_CANTRELEASE, "can't destroy local heap prefix");
-done:
- FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5HL_prefix_dest() */
+CATCH
+ /* No special processing on errors */
+
+END_FUNC(STATIC) /* end H5HL__prefix_dest() */
/*-------------------------------------------------------------------------
- * Function: H5HL_prefix_clear
+ * Function: H5HL__prefix_clear
*
- * Purpose: Mark a local heap prefix in memory as non-dirty.
+ * Purpose: Mark a local heap prefix in memory as non-dirty.
*
- * Return: Non-negative on success/Negative on failure
+ * Return: Success: SUCCEED
+ * Failure: FAIL
*
- * Programmer: Quincey Koziol
- * koziol@ncsa.uiuc.edu
- * Mar 20 2003
+ * Programmer: Quincey Koziol
+ * koziol@hdfgroup.org
+ * Mar 20 2003
*
*-------------------------------------------------------------------------
*/
-static herr_t
-H5HL_prefix_clear(H5F_t UNUSED *f, void *thing, hbool_t destroy)
-{
- H5HL_prfx_t *prfx = (H5HL_prfx_t *)thing; /* The local heap prefix to operate on */
- herr_t ret_value = SUCCEED; /* Return value */
+BEGIN_FUNC(STATIC, ERR,
+herr_t, SUCCEED, FAIL,
+H5HL__prefix_clear(H5F_t UNUSED *f, void *thing, hbool_t destroy))
- FUNC_ENTER_NOAPI_NOINIT
+ H5HL_prfx_t *prfx = (H5HL_prfx_t *)thing; /* The local heap prefix to operate on */
/* check arguments */
HDassert(prfx);
@@ -564,34 +560,35 @@ H5HL_prefix_clear(H5F_t UNUSED *f, void *thing, hbool_t destroy)
prfx->cache_info.is_dirty = FALSE;
if(destroy)
- if(H5HL_prefix_dest(f, prfx) < 0)
- HGOTO_ERROR(H5E_HEAP, H5E_CANTFREE, FAIL, "unable to destroy local heap prefix")
+ if(FAIL == H5HL__prefix_dest(f, prfx))
+ H5E_THROW(H5E_CANTFREE, "unable to destroy local heap prefix");
+
+CATCH
+ /* No special processing on errors */
-done:
- FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5HL_prefix_clear() */
+END_FUNC(STATIC) /* end H5HL__prefix_clear() */
/*-------------------------------------------------------------------------
- * Function: H5HL_prefix_size
+ * Function: H5HL__prefix_size
*
- * Purpose: Compute the size in bytes of the heap prefix on disk,
+ * Purpose: Compute the size in bytes of the heap prefix on disk,
* and return it in *len_ptr. On failure, the value of *len_ptr
* is undefined.
*
- * Return: Non-negative on success/Negative on failure
+ * Return: Success: SUCCEED
+ * Failure: Can't fail
*
- * Programmer: John Mainzer
- * 5/13/04
+ * Programmer: John Mainzer
+ * 5/13/04
*
*-------------------------------------------------------------------------
*/
-static herr_t
-H5HL_prefix_size(const H5F_t UNUSED *f, const void *thing, size_t *size_ptr)
-{
- const H5HL_prfx_t *prfx = (const H5HL_prfx_t *)thing; /* Pointer to local heap prefix to query */
+BEGIN_FUNC(STATIC, NOERR,
+herr_t, SUCCEED, -,
+H5HL__prefix_size(const H5F_t UNUSED *f, const void *thing, size_t *size_ptr))
- FUNC_ENTER_NOAPI_NOINIT_NOERR
+ const H5HL_prfx_t *prfx = (const H5HL_prfx_t *)thing; /* Pointer to local heap prefix to query */
/* check arguments */
HDassert(prfx);
@@ -605,32 +602,30 @@ H5HL_prefix_size(const H5F_t UNUSED *f, const void *thing, size_t *size_ptr)
if(prfx->heap->single_cache_obj)
*size_ptr += prfx->heap->dblk_size;
- FUNC_LEAVE_NOAPI(SUCCEED)
-} /* H5HL_prefix_size() */
+END_FUNC(STATIC) /* H5HL__prefix_size() */
/*-------------------------------------------------------------------------
- * Function: H5HL_datablock_load
+ * Function: H5HL__datablock_load
*
- * Purpose: Loads a local heap data block from disk.
+ * Purpose: Loads a local heap data block from disk.
*
- * Return: Success: Ptr to a local heap data block memory data structure.
- * Failure: NULL
+ * Return: Success: Pointer to a local heap data block memory data
+ * structure.
+ * Failure: NULL
*
- * Programmer: Quincey Koziol
- * koziol@hdfgroup.org
- * Jan 5 2010
+ * Programmer: Quincey Koziol
+ * koziol@hdfgroup.org
+ * Jan 5 2010
*
*-------------------------------------------------------------------------
*/
-static void *
-H5HL_datablock_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, void *_udata)
-{
+BEGIN_FUNC(STATIC, ERR,
+H5HL_dblk_t *, NULL, NULL,
+H5HL__datablock_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, void *_udata))
+
H5HL_dblk_t *dblk = NULL; /* Local heap data block deserialized */
H5HL_cache_dblk_ud_t *udata = (H5HL_cache_dblk_ud_t *)_udata; /* User data for callback */
- H5HL_dblk_t *ret_value; /* Return value */
-
- FUNC_ENTER_NOAPI_NOINIT
/* check arguments */
HDassert(f);
@@ -641,22 +636,22 @@ H5HL_datablock_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, void *_udata)
HDassert(NULL == udata->heap->dblk);
/* Allocate space in memory for the heap data block */
- if(NULL == (dblk = H5HL_dblk_new(udata->heap)))
- HGOTO_ERROR(H5E_HEAP, H5E_CANTALLOC, NULL, "memory allocation failed")
+ if(NULL == (dblk = H5HL__dblk_new(udata->heap)))
+ H5E_THROW(H5E_CANTALLOC, "memory allocation failed");
/* Check for heap still retaining image */
if(NULL == udata->heap->dblk_image) {
/* Allocate space for the heap data image */
if(NULL == (udata->heap->dblk_image = H5FL_BLK_MALLOC(lheap_chunk, udata->heap->dblk_size)))
- HGOTO_ERROR(H5E_HEAP, H5E_CANTALLOC, NULL, "can't allocate data block image buffer")
+ H5E_THROW(H5E_CANTALLOC, "can't allocate data block image buffer");
/* Read local heap data block */
- if(H5F_block_read(f, H5FD_MEM_LHEAP, udata->heap->dblk_addr, udata->heap->dblk_size, dxpl_id, udata->heap->dblk_image) < 0)
- HGOTO_ERROR(H5E_HEAP, H5E_READERROR, NULL, "unable to read local heap data block")
+ if(FAIL == H5F_block_read(f, H5FD_MEM_LHEAP, udata->heap->dblk_addr, udata->heap->dblk_size, dxpl_id, udata->heap->dblk_image))
+ H5E_THROW(H5E_READERROR, "unable to read local heap data block");
/* Build free list */
- if(H5HL_fl_deserialize(udata->heap) < 0)
- HGOTO_ERROR(H5E_HEAP, H5E_CANTINIT, NULL, "can't initialize free list")
+ if(FAIL == H5HL__fl_deserialize(udata->heap))
+ H5E_THROW(H5E_CANTINIT, "can't initialize free list");
} /* end if */
/* Set flag to indicate data block from loaded from file */
@@ -665,38 +660,36 @@ H5HL_datablock_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, void *_udata)
/* Set return value */
ret_value = dblk;
-done:
+CATCH
/* Release the [possibly partially initialized] local heap on errors */
if(!ret_value && dblk)
- if(H5HL_dblk_dest(dblk) < 0)
- HDONE_ERROR(H5E_HEAP, H5E_CANTRELEASE, NULL, "unable to destroy local heap data block")
+ if(FAIL == H5HL__dblk_dest(dblk))
+ H5E_THROW(H5E_CANTRELEASE, "unable to destroy local heap data block");
- FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5HL_datablock_load() */
+END_FUNC(STATIC) /* end H5HL__datablock_load() */
/*-------------------------------------------------------------------------
- * Function: H5HL_datablock_flush
+ * Function: H5HL__datablock_flush
*
- * Purpose: Flushes a heap's data block from memory to disk if it's dirty.
+ * Purpose: Flushes a heap's data block from memory to disk if it's dirty.
* Optionally deletes the heap data block from memory.
*
- * Return: Non-negative on success/Negative on failure
+ * Return: Success: SUCCEED
+ * Failure: FAIL
*
- * Programmer: Robb Matzke
- * matzke@llnl.gov
- * Jul 17 1997
+ * Programmer: Robb Matzke
+ * matzke@llnl.gov
+ * Jul 17 1997
*
*-------------------------------------------------------------------------
*/
-static herr_t
-H5HL_datablock_flush(H5F_t *f, hid_t dxpl_id, hbool_t destroy, haddr_t addr,
- void *_thing, unsigned UNUSED * flags_ptr)
-{
- H5HL_dblk_t *dblk = (H5HL_dblk_t *)_thing; /* Pointer to the local heap data block */
- herr_t ret_value = SUCCEED; /* Return value */
+BEGIN_FUNC(STATIC, ERR,
+herr_t, SUCCEED, FAIL,
+H5HL__datablock_flush(H5F_t *f, hid_t dxpl_id, hbool_t destroy, haddr_t addr,
+ void *_thing, unsigned UNUSED * flags_ptr))
- FUNC_ENTER_NOAPI_NOINIT
+ H5HL_dblk_t *dblk = (H5HL_dblk_t *)_thing; /* Pointer to the local heap data block */
/* check arguments */
HDassert(f);
@@ -712,45 +705,45 @@ H5HL_datablock_flush(H5F_t *f, hid_t dxpl_id, hbool_t destroy, haddr_t addr,
heap->free_block = heap->freelist ? heap->freelist->offset : H5HL_FREE_NULL;
/* Serialize the free list into the heap data's image */
- H5HL_fl_serialize(heap);
+ H5HL__fl_serialize(heap);
/* Write the data block to the file */
- if(H5F_block_write(f, H5FD_MEM_LHEAP, heap->dblk_addr, heap->dblk_size, dxpl_id, heap->dblk_image) < 0)
- HGOTO_ERROR(H5E_HEAP, H5E_WRITEERROR, FAIL, "unable to write heap data block to file")
+ if(FAIL == H5F_block_write(f, H5FD_MEM_LHEAP, heap->dblk_addr, heap->dblk_size, dxpl_id, heap->dblk_image))
+ H5E_THROW(H5E_WRITEERROR, "unable to write heap data block to file");
- dblk->cache_info.is_dirty = FALSE;
+ dblk->cache_info.is_dirty = FALSE;
} /* end if */
/* Should we destroy the memory version? */
if(destroy)
- if(H5HL_datablock_dest(f, dblk) < 0)
- HGOTO_ERROR(H5E_HEAP, H5E_CANTFREE, FAIL, "unable to destroy local heap data block")
+ if(FAIL == H5HL__datablock_dest(f, dblk))
+ H5E_THROW(H5E_CANTFREE, "unable to destroy local heap data block");
-done:
- FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5HL_datablock_flush() */
+CATCH
+ /* No special processing on errors */
+
+END_FUNC(STATIC) /* end H5HL__datablock_flush() */
/*-------------------------------------------------------------------------
- * Function: H5HL_datablock_dest
+ * Function: H5HL__datablock_dest
*
- * Purpose: Destroys a local heap data block in memory.
+ * Purpose: Destroys a local heap data block in memory.
*
- * Return: Non-negative on success/Negative on failure
+ * Return: Success: SUCCEED
+ * Failure: FAIL
*
- * Programmer: Quincey Koziol
- * koziol@ncsa.uiuc.edu
- * Jan 15 2003
+ * Programmer: Quincey Koziol
+ * koziol@hdfgroup.org
+ * Jan 15 2003
*
*-------------------------------------------------------------------------
*/
-static herr_t
-H5HL_datablock_dest(H5F_t *f, void *_thing)
-{
- H5HL_dblk_t *dblk = (H5HL_dblk_t *)_thing; /* Pointer to the local heap data block */
- herr_t ret_value = SUCCEED; /* Return value */
+BEGIN_FUNC(STATIC, ERR,
+herr_t, SUCCEED, FAIL,
+H5HL__datablock_dest(H5F_t *f, void *_thing))
- FUNC_ENTER_NOAPI_NOINIT
+ H5HL_dblk_t *dblk = (H5HL_dblk_t *)_thing; /* Pointer to the local heap data block */
/* check arguments */
HDassert(dblk);
@@ -768,39 +761,39 @@ H5HL_datablock_dest(H5F_t *f, void *_thing)
if(dblk->cache_info.free_file_space_on_destroy) {
/* Free the local heap data block on disk */
/* (XXX: Nasty usage of internal DXPL value! -QAK) */
- if(H5MF_xfree(f, H5FD_MEM_LHEAP, H5AC_dxpl_id, dblk->cache_info.addr, (hsize_t)dblk->heap->dblk_size) < 0)
- HGOTO_ERROR(H5E_HEAP, H5E_CANTFREE, FAIL, "unable to free local heap data block")
+ if(FAIL == H5MF_xfree(f, H5FD_MEM_LHEAP, H5AC_dxpl_id, dblk->cache_info.addr, (hsize_t)dblk->heap->dblk_size))
+ H5E_THROW(H5E_CANTFREE, "unable to free local heap data block");
} /* end if */
/* Destroy local heap data block */
- if(H5HL_dblk_dest(dblk) < 0)
- HGOTO_ERROR(H5E_HEAP, H5E_CANTRELEASE, FAIL, "can't destroy local heap data block")
+ if(FAIL == H5HL__dblk_dest(dblk))
+ H5E_THROW(H5E_CANTRELEASE, "can't destroy local heap data block");
-done:
- FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5HL_datablock_dest() */
+CATCH
+ /* No special processing on errors */
+
+END_FUNC(STATIC) /* end H5HL__datablock_dest() */
/*-------------------------------------------------------------------------
- * Function: H5HL_datablock_clear
+ * Function: H5HL__datablock_clear
*
- * Purpose: Mark a local heap data block in memory as non-dirty.
+ * Purpose: Mark a local heap data block in memory as non-dirty.
*
- * Return: Non-negative on success/Negative on failure
+ * Return: Success: SUCCEED
+ * Failure: FAIL
*
- * Programmer: Quincey Koziol
- * koziol@ncsa.uiuc.edu
- * Mar 20 2003
+ * Programmer: Quincey Koziol
+ * koziol@hdfgroup.org
+ * Mar 20 2003
*
*-------------------------------------------------------------------------
*/
-static herr_t
-H5HL_datablock_clear(H5F_t *f, void *_thing, hbool_t destroy)
-{
- H5HL_dblk_t *dblk = (H5HL_dblk_t *)_thing; /* Pointer to the local heap data block */
- herr_t ret_value = SUCCEED; /* Return value */
+BEGIN_FUNC(STATIC, ERR,
+herr_t, SUCCEED, FAIL,
+H5HL__datablock_clear(H5F_t *f, void *_thing, hbool_t destroy))
- FUNC_ENTER_NOAPI_NOINIT
+ H5HL_dblk_t *dblk = (H5HL_dblk_t *)_thing; /* Pointer to the local heap data block */
/* check arguments */
HDassert(dblk);
@@ -809,34 +802,34 @@ H5HL_datablock_clear(H5F_t *f, void *_thing, hbool_t destroy)
dblk->cache_info.is_dirty = FALSE;
if(destroy)
- if(H5HL_datablock_dest(f, dblk) < 0)
- HGOTO_ERROR(H5E_HEAP, H5E_CANTFREE, FAIL, "unable to destroy local heap data block")
+ if(FAIL == H5HL__datablock_dest(f, dblk))
+ H5E_THROW(H5E_CANTFREE, "unable to destroy local heap data block");
+
+CATCH
-done:
- FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5HL_datablock_clear() */
+END_FUNC(STATIC) /* end H5HL__datablock_clear() */
/*-------------------------------------------------------------------------
- * Function: H5HL_datablock_size
+ * Function: H5HL__datablock_size
*
- * Purpose: Compute the size in bytes of the local heap data block on disk,
+ * Purpose: Compute the size in bytes of the local heap data block on disk,
* and return it in *len_ptr. On failure, the value of *len_ptr
* is undefined.
*
- * Return: Non-negative on success/Negative on failure
+ * Return: Success: SUCCEED
+ * Failure: Can't fail
*
- * Programmer: John Mainzer
- * 5/13/04
+ * Programmer: John Mainzer
+ * 5/13/04
*
*-------------------------------------------------------------------------
*/
-static herr_t
-H5HL_datablock_size(const H5F_t UNUSED *f, const void *_thing, size_t *size_ptr)
-{
- const H5HL_dblk_t *dblk = (const H5HL_dblk_t *)_thing; /* Pointer to the local heap data block */
+BEGIN_FUNC(STATIC, NOERR,
+herr_t, SUCCEED, -,
+H5HL__datablock_size(const H5F_t UNUSED *f, const void *_thing, size_t *size_ptr))
- FUNC_ENTER_NOAPI_NOINIT_NOERR
+ const H5HL_dblk_t *dblk = (const H5HL_dblk_t *)_thing; /* Pointer to the local heap data block */
/* check arguments */
HDassert(dblk);
@@ -846,6 +839,5 @@ H5HL_datablock_size(const H5F_t UNUSED *f, const void *_thing, size_t *size_ptr)
/* Set size of data block in cache */
*size_ptr = dblk->heap->dblk_size;
- FUNC_LEAVE_NOAPI(SUCCEED)
-} /* H5HL_datablock_size() */
+END_FUNC(STATIC) /* H5HL__datablock_size() */
diff --git a/src/H5HLdbg.c b/src/H5HLdbg.c
index 29d5c82..9ff9553 100644
--- a/src/H5HLdbg.c
+++ b/src/H5HLdbg.c
@@ -13,54 +13,43 @@
* access to either file, you may request a copy from help@hdfgroup.org. *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-/* Programmer: Quincey Koziol <koziol@ncsa.uiuc.edu>
+/* Programmer: Quincey Koziol <koziol@hdfgroup.org>
* Wednesday, July 9, 2003
*
- * Purpose: Local Heap object debugging functions.
+ * Purpose: Local Heap object debugging functions.
*/
-#define H5HL_PACKAGE /* Suppress error about including H5HLpkg */
+#define H5HL_PACKAGE /* Suppress error about including H5HLpkg */
-#include "H5private.h" /* Generic Functions */
-#include "H5Eprivate.h" /* Error handling */
-#include "H5HLpkg.h" /* Local heaps */
-#include "H5Iprivate.h" /* ID Functions */
-#include "H5MMprivate.h" /* Memory management */
+#include "H5private.h" /* Generic Functions */
+#include "H5Eprivate.h" /* Error handling */
+#include "H5HLpkg.h" /* Local heaps */
+#include "H5MMprivate.h" /* Memory management */
/*-------------------------------------------------------------------------
- * Function: H5HL_debug
+ * Function: H5HL_debug
*
- * Purpose: Prints debugging information about a heap.
+ * Purpose: Prints debugging information about a heap.
*
- * Return: Non-negative on success/Negative on failure
+ * Return: Success: SUCCEED
+ * Failure: FAIL
*
- * Programmer: Robb Matzke
- * matzke@llnl.gov
- * Aug 1 1997
- *
- * Modifications:
- * Robb Matzke, 1999-07-28
- * The ADDR argument is passed by value.
- *
- * John Mainzer, 6/17/05
- * Modified the function to use the new dirtied parameter of
- * of H5AC_unprotect() instead of modifying the is_dirty
- * field of the cache info.
+ * Programmer: Robb Matzke
+ * matzke@llnl.gov
+ * Aug 1 1997
*
*-------------------------------------------------------------------------
*/
-herr_t
-H5HL_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr, FILE * stream, int indent, int fwidth)
-{
- H5HL_t *h = NULL;
- int i, overlap, free_block;
- H5HL_free_t *freelist = NULL;
- uint8_t *marker = NULL;
- size_t amount_free = 0;
- herr_t ret_value = SUCCEED; /* Return value */
-
- FUNC_ENTER_NOAPI(FAIL)
+BEGIN_FUNC(PRIV, ERR,
+herr_t, SUCCEED, FAIL,
+H5HL_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr, FILE * stream, int indent, int fwidth))
+
+ H5HL_t *h = NULL;
+ int i, overlap, free_block;
+ H5HL_free_t *freelist = NULL;
+ uint8_t *marker = NULL;
+ size_t amount_free = 0;
/* check arguments */
HDassert(f);
@@ -70,65 +59,62 @@ H5HL_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr, FILE * stream, int indent, int
HDassert(fwidth >= 0);
if(NULL == (h = (H5HL_t *)H5HL_protect(f, dxpl_id, addr, H5AC_READ)))
- HGOTO_ERROR(H5E_HEAP, H5E_CANTLOAD, FAIL, "unable to load heap")
+ H5E_THROW(H5E_CANTPROTECT, "unable to load/protect local heap");
- fprintf(stream, "%*sLocal Heap...\n", indent, "");
- fprintf(stream, "%*s%-*s %lu\n", indent, "", fwidth,
- "Header size (in bytes):",
- (unsigned long)h->prfx_size);
+ HDfprintf(stream, "%*sLocal Heap...\n", indent, "");
+ HDfprintf(stream, "%*s%-*s %lu\n", indent, "", fwidth,
+ "Header size (in bytes):",
+ (unsigned long)h->prfx_size);
HDfprintf(stream, "%*s%-*s %a\n", indent, "", fwidth,
- "Address of heap data:",
- h->dblk_addr);
+ "Address of heap data:",
+ h->dblk_addr);
HDfprintf(stream, "%*s%-*s %Zu\n", indent, "", fwidth,
- "Data bytes allocated for heap:",
- h->dblk_size);
+ "Data bytes allocated for heap:",
+ h->dblk_size);
/*
* Traverse the free list and check that all free blocks fall within
* the heap and that no two free blocks point to the same region of
* the heap. */
if(NULL == (marker = (uint8_t *)H5MM_calloc(h->dblk_size)))
- HGOTO_ERROR(H5E_HEAP, H5E_CANTALLOC, FAIL, "memory allocation failed")
+ H5E_THROW(H5E_CANTALLOC, "memory allocation failed");
- fprintf(stream, "%*sFree Blocks (offset, size):\n", indent, "");
+ HDfprintf(stream, "%*sFree Blocks (offset, size):\n", indent, "");
for(free_block = 0, freelist = h->freelist; freelist; freelist = freelist->next, free_block++) {
char temp_str[32];
-
sprintf(temp_str,"Block #%d:",free_block);
- HDfprintf(stream, "%*s%-*s %8Zu, %8Zu\n", indent+3, "", MAX(0,fwidth-9),
- temp_str,
- freelist->offset, freelist->size);
- if((freelist->offset + freelist->size) > h->dblk_size)
- fprintf(stream, "***THAT FREE BLOCK IS OUT OF BOUNDS!\n");
- else {
- for(i = overlap = 0; i < (int)(freelist->size); i++) {
- if(marker[freelist->offset + i])
- overlap++;
- marker[freelist->offset + i] = 1;
- } /* end for */
- if(overlap)
- fprintf(stream, "***THAT FREE BLOCK OVERLAPPED A PREVIOUS ONE!\n");
- else
- amount_free += freelist->size;
- } /* end for */
+ HDfprintf(stream, "%*s%-*s %8Zu, %8Zu\n", indent+3, "", MAX(0,fwidth-9),
+ temp_str, freelist->offset, freelist->size);
+ if((freelist->offset + freelist->size) > h->dblk_size)
+ HDfprintf(stream, "***THAT FREE BLOCK IS OUT OF BOUNDS!\n");
+ else {
+ for(i = overlap = 0; i < (int)(freelist->size); i++) {
+ if(marker[freelist->offset + i])
+ overlap++;
+ marker[freelist->offset + i] = 1;
+ } /* end for */
+ if(overlap)
+ HDfprintf(stream, "***THAT FREE BLOCK OVERLAPPED A PREVIOUS ONE!\n");
+ else
+ amount_free += freelist->size;
+ } /* end else */
} /* end for */
if(h->dblk_size)
- fprintf(stream, "%*s%-*s %.2f%%\n", indent, "", fwidth,
- "Percent of heap used:",
- (100.0 * (double)(h->dblk_size - amount_free) / (double)h->dblk_size));
+ HDfprintf(stream, "%*s%-*s %.2f%%\n", indent, "", fwidth, "Percent of heap used:",
+ (100.0 * (double)(h->dblk_size - amount_free) / (double)h->dblk_size));
/*
* Print the data in a VMS-style octal dump.
*/
H5_buffer_dump(stream, indent, h->dblk_image, marker, (size_t)0, h->dblk_size);
-done:
- if(h && H5HL_unprotect(h) < 0)
- HDONE_ERROR(H5E_OHDR, H5E_PROTECT, FAIL, "unable to release object header")
- H5MM_xfree(marker);
+CATCH
+ if(h && FAIL == H5HL_unprotect(h))
+ H5E_THROW(H5E_CANTUNPROTECT, "unable to release/unprotect local heap");
- FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5HL_debug() */
+ if(marker && FAIL == H5MM_xfree(marker))
+ H5E_THROW(H5E_CANTFREE, "can't free marker buffer");
+END_FUNC(PRIV) /* end H5HL_debug() */
diff --git a/src/H5HLint.c b/src/H5HLint.c
index d5238eb..d5876f0 100644
--- a/src/H5HLint.c
+++ b/src/H5HLint.c
@@ -15,11 +15,11 @@
/*-------------------------------------------------------------------------
*
- * Created: H5HLint.c
- * Oct 12 2008
- * Quincey Koziol <koziol@hdfgroup.org>
+ * Created: H5HLint.c
+ * Oct 12 2008
+ * Quincey Koziol <koziol@hdfgroup.org>
*
- * Purpose: Local heap internal routines.
+ * Purpose: Local heap internal routines.
*
*-------------------------------------------------------------------------
*/
@@ -28,15 +28,16 @@
/* Module Setup */
/****************/
-#define H5HL_PACKAGE /* Suppress error about including H5HLpkg */
+#define H5HL_PACKAGE /* Suppress error about including H5HLpkg */
/***********/
/* Headers */
/***********/
-#include "H5private.h" /* Generic Functions */
-#include "H5Eprivate.h" /* Error handling */
-#include "H5HLpkg.h" /* Local Heaps */
+#include "H5private.h" /* Generic Functions */
+#include "H5Eprivate.h" /* Error handling */
+#include "H5FLprivate.h" /* Free lists */
+#include "H5HLpkg.h" /* Local Heaps */
/****************/
@@ -76,35 +77,27 @@
/* Declare a free list to manage the H5HL_t struct */
H5FL_DEFINE_STATIC(H5HL_t);
-/* Declare a free list to manage the H5HL_dblk_t struct */
-H5FL_DEFINE_STATIC(H5HL_dblk_t);
-
-/* Declare a free list to manage the H5HL_prfx_t struct */
-H5FL_DEFINE_STATIC(H5HL_prfx_t);
-
/*-------------------------------------------------------------------------
- * Function: H5HL_new
+ * Function: H5HL__new
*
- * Purpose: Create a new local heap object
+ * Purpose: Create a new local heap object
*
- * Return: Success: non-NULL pointer to new local heap
- * Failure: NULL
+ * Return: Success: non-NULL pointer to new local heap
+ * Failure: NULL
*
- * Programmer: Quincey Koziol
- * koziol@hdfgroup.org
- * Jan 5 2010
+ * Programmer: Quincey Koziol
+ * koziol@hdfgroup.org
+ * Jan 5 2010
*
*-------------------------------------------------------------------------
*/
-H5HL_t *
-H5HL_new(size_t sizeof_size, size_t sizeof_addr, size_t prfx_size)
-{
- H5HL_t *heap = NULL; /* New local heap */
- H5HL_t *ret_value; /* Return value */
+BEGIN_FUNC(PKG, ERR,
+H5HL_t *, NULL, NULL,
+H5HL__new(size_t sizeof_size, size_t sizeof_addr, size_t prfx_size))
- FUNC_ENTER_NOAPI(NULL)
+ H5HL_t *heap = NULL; /* New local heap */
/* check arguments */
HDassert(sizeof_size > 0);
@@ -113,7 +106,7 @@ H5HL_new(size_t sizeof_size, size_t sizeof_addr, size_t prfx_size)
/* Allocate new local heap structure */
if(NULL == (heap = H5FL_CALLOC(H5HL_t)))
- HGOTO_ERROR(H5E_HEAP, H5E_CANTALLOC, NULL, "memory allocation failed")
+ H5E_THROW(H5E_CANTALLOC, "memory allocation failed");
/* Initialize non-zero fields */
heap->sizeof_size = sizeof_size;
@@ -123,29 +116,31 @@ H5HL_new(size_t sizeof_size, size_t sizeof_addr, size_t prfx_size)
/* Set the return value */
ret_value = heap;
-done:
- FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5HL_new() */
+CATCH
+ if(!ret_value && heap != NULL)
+ if (NULL == (heap = H5FL_FREE(H5HL_t, heap)))
+ H5E_THROW(H5E_CANTFREE, "can't free heap memory");
+
+END_FUNC(PKG) /* end H5HL__new() */
/*-------------------------------------------------------------------------
- * Function: H5HL_inc_rc
+ * Function: H5HL__inc_rc
*
- * Purpose: Increment ref. count on heap
+ * Purpose: Increment ref. count on heap
*
- * Return: Success: Non-negative
- * Failure: Negative
+ * Return: Success: SUCCEED
+ * Failure: N/A
*
- * Programmer: Quincey Koziol
- * koziol@hdfgroup.org
- * Oct 12 2008
+ * Programmer: Quincey Koziol
+ * koziol@hdfgroup.org
+ * Oct 12 2008
*
*-------------------------------------------------------------------------
*/
-static herr_t
-H5HL_inc_rc(H5HL_t *heap)
-{
- FUNC_ENTER_NOAPI_NOINIT_NOERR
+BEGIN_FUNC(PKG, NOERR,
+herr_t, SUCCEED, -,
+H5HL__inc_rc(H5HL_t *heap))
/* check arguments */
HDassert(heap);
@@ -153,28 +148,26 @@ H5HL_inc_rc(H5HL_t *heap)
/* Increment heap's ref. count */
heap->rc++;
- FUNC_LEAVE_NOAPI(SUCCEED)
-} /* end H5HL_inc_rc() */
+END_FUNC(PKG) /* end H5HL__inc_rc() */
/*-------------------------------------------------------------------------
- * Function: H5HL_dec_rc
+ * Function: H5HL__dec_rc
*
- * Purpose: Decrement ref. count on heap
+ * Purpose: Decrement ref. count on heap
*
- * Return: Success: Non-negative
- * Failure: Negative
+ * Return: Success: SUCCEED
+ * Failure: FAIL
*
- * Programmer: Quincey Koziol
- * koziol@hdfgroup.org
- * Oct 12 2008
+ * Programmer: Quincey Koziol
+ * koziol@hdfgroup.org
+ * Oct 12 2008
*
*-------------------------------------------------------------------------
*/
-static herr_t
-H5HL_dec_rc(H5HL_t *heap)
-{
- FUNC_ENTER_NOAPI_NOINIT_NOERR
+BEGIN_FUNC(PKG, ERR,
+herr_t, SUCCEED, FAIL,
+H5HL__dec_rc(H5HL_t *heap))
/* check arguments */
HDassert(heap);
@@ -182,31 +175,31 @@ H5HL_dec_rc(H5HL_t *heap)
/* Decrement heap's ref. count */
heap->rc--;
+CATCH
/* Check if we should destroy the heap */
- if(heap->rc == 0)
- H5HL_dest(heap);
+ if(heap->rc == 0 && FAIL == H5HL__dest(heap))
+ H5E_THROW(H5E_CANTFREE, "unable to destroy local heap");
- FUNC_LEAVE_NOAPI(SUCCEED)
-} /* end H5HL_dec_rc() */
+END_FUNC(PKG) /* end H5HL__dec_rc() */
/*-------------------------------------------------------------------------
- * Function: H5HL_dest
+ * Function: H5HL__dest
*
- * Purpose: Destroys a heap in memory.
+ * Purpose: Destroys a heap in memory.
*
- * Return: Non-negative on success/Negative on failure
+ * Return: Success: SUCCEED
+ * Failure: FAIL
*
- * Programmer: Quincey Koziol
- * koziol@ncsa.uiuc.edu
- * Jan 15 2003
+ * Programmer: Quincey Koziol
+ * koziol@ncsa.uiuc.edu
+ * Jan 15 2003
*
*-------------------------------------------------------------------------
*/
-herr_t
-H5HL_dest(H5HL_t *heap)
-{
- FUNC_ENTER_NOAPI_NOINIT_NOERR
+BEGIN_FUNC(PKG, ERR,
+herr_t, SUCCEED, FAIL,
+H5HL__dest(H5HL_t *heap))
/* check arguments */
HDassert(heap);
@@ -217,201 +210,20 @@ H5HL_dest(H5HL_t *heap)
HDassert(heap->prfx == NULL);
HDassert(heap->dblk == NULL);
+CATCH
if(heap->dblk_image)
- heap->dblk_image = H5FL_BLK_FREE(lheap_chunk, heap->dblk_image);
+ if(NULL != (heap->dblk_image = H5FL_BLK_FREE(lheap_chunk, heap->dblk_image)))
+ H5E_THROW(H5E_CANTFREE, "unable to free local heap data block image");
while(heap->freelist) {
H5HL_free_t *fl;
fl = heap->freelist;
heap->freelist = fl->next;
- fl = H5FL_FREE(H5HL_free_t, fl);
+ if(NULL != (fl = H5FL_FREE(H5HL_free_t, fl)))
+ H5E_THROW(H5E_CANTFREE, "unable to free local heap free list");
} /* end while */
- heap = H5FL_FREE(H5HL_t, heap);
-
- FUNC_LEAVE_NOAPI(SUCCEED)
-} /* end H5HL_dest() */
-
-
-/*-------------------------------------------------------------------------
- * Function: H5HL_prfx_new
- *
- * Purpose: Create a new local heap prefix object
- *
- * Return: Success: non-NULL pointer to new local heap prefix
- * Failure: NULL
- *
- * Programmer: Quincey Koziol
- * koziol@hdfgroup.org
- * Oct 12 2008
- *
- *-------------------------------------------------------------------------
- */
-H5HL_prfx_t *
-H5HL_prfx_new(H5HL_t *heap)
-{
- H5HL_prfx_t *prfx = NULL; /* New local heap prefix */
- H5HL_prfx_t *ret_value; /* Return value */
-
- FUNC_ENTER_NOAPI(NULL)
-
- /* check arguments */
- HDassert(heap);
-
- /* Allocate new local heap prefix */
- if(NULL == (prfx = H5FL_CALLOC(H5HL_prfx_t)))
- HGOTO_ERROR(H5E_HEAP, H5E_CANTALLOC, NULL, "memory allocation failed")
-
- /* Increment ref. count on heap data structure */
- if(H5HL_inc_rc(heap) < 0)
- HGOTO_ERROR(H5E_HEAP, H5E_CANTINC, NULL, "can't increment heap ref. count")
-
- /* Link the heap & the prefix */
- prfx->heap = heap;
- heap->prfx = prfx;
-
- /* Set the return value */
- ret_value = prfx;
-
-done:
- FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5HL_prfx_new() */
-
-
-/*-------------------------------------------------------------------------
- * Function: H5HL_prfx_dest
- *
- * Purpose: Destroy a local heap prefix object
- *
- * Return: Success: Non-negative
- * Failure: Negative
- *
- * Programmer: Quincey Koziol
- * koziol@hdfgroup.org
- * Oct 12 2008
- *
- *-------------------------------------------------------------------------
- */
-herr_t
-H5HL_prfx_dest(H5HL_prfx_t *prfx)
-{
- herr_t ret_value = SUCCEED; /* Return value */
-
- FUNC_ENTER_NOAPI(FAIL)
-
- /* check arguments */
- HDassert(prfx);
-
- /* Check if prefix was initialized */
- if(prfx->heap) {
- /* Unlink prefix from heap */
- prfx->heap->prfx = NULL;
-
- /* Decrement ref. count on heap data structure */
- if(H5HL_dec_rc(prfx->heap) < 0)
- HGOTO_ERROR(H5E_HEAP, H5E_CANTDEC, FAIL, "can't decrement heap ref. count")
-
- /* Unlink heap from prefix */
- prfx->heap = NULL;
- } /* end if */
-
- /* Free local heap prefix */
- prfx = H5FL_FREE(H5HL_prfx_t, prfx);
-
-done:
- FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5HL_prfx_dest() */
-
-
-/*-------------------------------------------------------------------------
- * Function: H5HL_dblk_new
- *
- * Purpose: Create a new local heap data block object
- *
- * Return: Success: non-NULL pointer to new local heap data block
- * Failure: NULL
- *
- * Programmer: Quincey Koziol
- * koziol@hdfgroup.org
- * Oct 12 2008
- *
- *-------------------------------------------------------------------------
- */
-H5HL_dblk_t *
-H5HL_dblk_new(H5HL_t *heap)
-{
- H5HL_dblk_t *dblk = NULL; /* New local heap data block */
- H5HL_dblk_t *ret_value; /* Return value */
-
- FUNC_ENTER_NOAPI(NULL)
-
- /* check arguments */
- HDassert(heap);
-
- /* Allocate new local heap data block */
- if(NULL == (dblk = H5FL_CALLOC(H5HL_dblk_t)))
- HGOTO_ERROR(H5E_HEAP, H5E_CANTALLOC, NULL, "memory allocation failed")
-
- /* Increment ref. count on heap data structure */
- if(H5HL_inc_rc(heap) < 0)
- HGOTO_ERROR(H5E_HEAP, H5E_CANTINC, NULL, "can't increment heap ref. count")
-
- /* Link the heap & the data block */
- dblk->heap = heap;
- heap->dblk = dblk;
-
- /* Set the return value */
- ret_value = dblk;
-
-done:
- FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5HL_dblk_new() */
-
-
-/*-------------------------------------------------------------------------
- * Function: H5HL_dblk_dest
- *
- * Purpose: Destroy a local heap data block object
- *
- * Return: Success: Non-negative
- * Failure: Negative
- *
- * Programmer: Quincey Koziol
- * koziol@hdfgroup.org
- * Oct 12 2008
- *
- *-------------------------------------------------------------------------
- */
-herr_t
-H5HL_dblk_dest(H5HL_dblk_t *dblk)
-{
- herr_t ret_value = SUCCEED; /* Return value */
-
- FUNC_ENTER_NOAPI(FAIL)
-
- /* check arguments */
- HDassert(dblk);
-
- /* Check if data block was initialized */
- if(dblk->heap) {
- /* Unlink data block from heap */
- dblk->heap->dblk = NULL;
-
- /* Unpin the local heap prefix */
- if(H5AC_unpin_entry(dblk->heap->prfx) < 0)
- HGOTO_ERROR(H5E_HEAP, H5E_CANTUNPIN, FAIL, "can't unpin local heap prefix")
-
- /* Decrement ref. count on heap data structure */
- if(H5HL_dec_rc(dblk->heap) < 0)
- HGOTO_ERROR(H5E_HEAP, H5E_CANTDEC, FAIL, "can't decrement heap ref. count")
-
- /* Unlink heap from data block */
- dblk->heap = NULL;
- } /* end if */
-
- /* Free local heap data block */
- dblk = H5FL_FREE(H5HL_dblk_t, dblk);
-
-done:
- FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5HL_dblk_dest() */
+
+ if(NULL != (heap = H5FL_FREE(H5HL_t, heap)))
+ H5E_THROW(H5E_CANTFREE, "unable to free local heap");
+END_FUNC(PKG) /* end H5HL__dest() */
diff --git a/src/H5HLpkg.h b/src/H5HLpkg.h
index bf9be2c..50f5797 100644
--- a/src/H5HLpkg.h
+++ b/src/H5HLpkg.h
@@ -14,7 +14,7 @@
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/*
- * Programmer: Quincey Koziol <koziol@ncsa.uiuc.edu>
+ * Programmer: Quincey Koziol <koziol@hdfgroup.org>
* Wednesday, July 9, 2003
*
* Purpose: This file contains declarations which are visible
@@ -32,7 +32,7 @@
#include "H5HLprivate.h"
/* Other private headers needed by this file */
-#include "H5FLprivate.h" /* Free lists */
+#include "H5FLprivate.h" /* Free lists */
/*****************************/
@@ -56,16 +56,26 @@ H5FL_BLK_EXTERN(lheap_chunk);
/* Package Private Macros */
/**************************/
-#define H5HL_SIZEOF_HDR(F) \
- H5HL_ALIGN(H5_SIZEOF_MAGIC + /*heap signature */ \
- 1 + /*version */ \
- 3 + /*reserved */ \
- H5F_SIZEOF_SIZE(F) + /*data size */ \
- H5F_SIZEOF_SIZE(F) + /*free list head */ \
- H5F_SIZEOF_ADDR(F)) /*data address */
+/* If this package header is being included in one of the H5HL source files,
+ * define the proper control macros for the generic FUNC_ENTER/LEAVE and
+ * error reporting macros.
+ */
+#ifdef H5HL_PACKAGE
+#define H5_MY_PKG H5HL
+#define H5_MY_PKG_ERR H5E_HEAP
+#define H5_MY_PKG_INIT NO
+#endif /* H5HL_PACKAGE */
+
+#define H5HL_SIZEOF_HDR(F) \
+ H5HL_ALIGN(H5_SIZEOF_MAGIC + /* heap signature */ \
+ 1 + /* version */ \
+ 3 + /* reserved */ \
+ H5F_SIZEOF_SIZE(F) + /* data size */ \
+ H5F_SIZEOF_SIZE(F) + /* free list head */ \
+ H5F_SIZEOF_ADDR(F)) /* data address */
/* Value indicating end of free list on disk */
-#define H5HL_FREE_NULL 1
+#define H5HL_FREE_NULL 1
/****************************/
@@ -73,10 +83,10 @@ H5FL_BLK_EXTERN(lheap_chunk);
/****************************/
typedef struct H5HL_free_t {
- size_t offset; /*offset of free block */
- size_t size; /*size of free block */
- struct H5HL_free_t *prev; /*previous entry in free list */
- struct H5HL_free_t *next; /*next entry in free list */
+ size_t offset; /* offset of free block */
+ size_t size; /* size of free block */
+ struct H5HL_free_t *prev; /* previous entry in free list */
+ struct H5HL_free_t *next; /* next entry in free list */
} H5HL_free_t;
/* Forward declarations */
@@ -85,47 +95,47 @@ typedef struct H5HL_prfx_t H5HL_prfx_t;
struct H5HL_t {
/* General heap-management fields */
- size_t rc; /* Ref. count for prefix & data block using this struct */
- size_t prots; /* # of times the heap has been protected */
- size_t sizeof_size; /* Size of file sizes */
- size_t sizeof_addr; /* Size of file addresses */
- hbool_t single_cache_obj; /* Indicate if the heap is a single object in the cache */
- H5HL_free_t *freelist; /*the free list */
+ size_t rc; /* Ref. count for prefix & data block using this struct */
+ size_t prots; /* # of times the heap has been protected */
+ size_t sizeof_size; /* Size of file sizes */
+ size_t sizeof_addr; /* Size of file addresses */
+ hbool_t single_cache_obj; /* Indicate if the heap is a single object in the cache */
+ H5HL_free_t *freelist; /* the free list */
/* Prefix-specific fields */
- H5HL_prfx_t *prfx; /* The prefix object for the heap */
- haddr_t prfx_addr; /* address of heap prefix */
- size_t prfx_size; /* size of heap prefix */
- hsize_t free_block; /* Address of first free block */
+ H5HL_prfx_t *prfx; /* The prefix object for the heap */
+ haddr_t prfx_addr; /* address of heap prefix */
+ size_t prfx_size; /* size of heap prefix */
+ hsize_t free_block; /* Address of first free block */
/* Data block-specific fields */
- H5HL_dblk_t *dblk; /* The data block object for the heap */
- haddr_t dblk_addr; /* address of data block */
- size_t dblk_size; /* size of heap data block on disk and in mem */
- uint8_t *dblk_image; /* The data block image */
+ H5HL_dblk_t *dblk; /* The data block object for the heap */
+ haddr_t dblk_addr; /* address of data block */
+ size_t dblk_size; /* size of heap data block on disk and in mem */
+ uint8_t *dblk_image; /* The data block image */
};
/* Struct for heap data block */
struct H5HL_dblk_t {
- H5AC_info_t cache_info; /* Information for H5AC cache functions, _must_ be */
- /* first field in structure */
- H5HL_t *heap; /* Pointer to heap for data block */
+ H5AC_info_t cache_info; /* Information for H5AC cache functions, _must_ be */
+ /* first field in structure */
+ H5HL_t *heap; /* Pointer to heap for data block */
};
/* Struct for heap prefix */
struct H5HL_prfx_t {
- H5AC_info_t cache_info; /* Information for H5AC cache functions, _must_ be */
- /* first field in structure */
- H5HL_t *heap; /* Pointer to heap for prefix */
+ H5AC_info_t cache_info; /* Information for H5AC cache functions, _must_ be */
+ /* first field in structure */
+ H5HL_t *heap; /* Pointer to heap for prefix */
};
/* Callback information for loading local heap prefix from disk */
typedef struct H5HL_cache_prfx_ud_t {
/* Downwards */
- size_t sizeof_size; /* Size of file sizes */
- size_t sizeof_addr; /* Size of file addresses */
- haddr_t prfx_addr; /* Address of prefix */
- size_t sizeof_prfx; /* Size of heap prefix */
+ size_t sizeof_size; /* Size of file sizes */
+ size_t sizeof_addr; /* Size of file addresses */
+ haddr_t prfx_addr; /* Address of prefix */
+ size_t sizeof_prfx; /* Size of heap prefix */
/* Upwards */
} H5HL_cache_prfx_ud_t;
@@ -133,10 +143,10 @@ typedef struct H5HL_cache_prfx_ud_t {
/* Callback information for loading local heap data block from disk */
typedef struct H5HL_cache_dblk_ud_t {
/* Downwards */
- H5HL_t *heap; /* Local heap */
+ H5HL_t *heap; /* Local heap */
/* Upwards */
- hbool_t loaded; /* Whether data block was loaded from file */
+ hbool_t loaded; /* Whether data block was loaded from file */
} H5HL_cache_dblk_ud_t;
@@ -145,16 +155,18 @@ typedef struct H5HL_cache_dblk_ud_t {
/******************************/
/* Heap routines */
-H5_DLL H5HL_t *H5HL_new(size_t sizeof_size, size_t sizeof_addr, size_t prfx_size);
-H5_DLL herr_t H5HL_dest(H5HL_t *heap);
+H5_DLL H5HL_t *H5HL__new(size_t sizeof_size, size_t sizeof_addr, size_t prfx_size);
+H5_DLL herr_t H5HL__dest(H5HL_t *heap);
+H5_DLL herr_t H5HL__inc_rc(H5HL_t *heap);
+H5_DLL herr_t H5HL__dec_rc(H5HL_t *heap);
/* Heap prefix routines */
-H5_DLL H5HL_prfx_t *H5HL_prfx_new(H5HL_t *heap);
-H5_DLL herr_t H5HL_prfx_dest(H5HL_prfx_t *prfx);
+H5_DLL H5HL_prfx_t *H5HL__prfx_new(H5HL_t *heap);
+H5_DLL herr_t H5HL__prfx_dest(H5HL_prfx_t *prfx);
/* Heap data block routines */
-H5_DLL H5HL_dblk_t *H5HL_dblk_new(H5HL_t *heap);
-H5_DLL herr_t H5HL_dblk_dest(H5HL_dblk_t *dblk);
+H5_DLL H5HL_dblk_t *H5HL__dblk_new(H5HL_t *heap);
+H5_DLL herr_t H5HL__dblk_dest(H5HL_dblk_t *dblk);
+H5_DLL herr_t H5HL__dblk_realloc(H5F_t *f, hid_t dxpl_id, H5HL_t *heap, size_t new_heap_size);
#endif /* _H5HLpkg_H */
-
diff --git a/src/H5HLprivate.h b/src/H5HLprivate.h
index 0b044b6..d396a53 100644
--- a/src/H5HLprivate.h
+++ b/src/H5HLprivate.h
@@ -15,13 +15,11 @@
/*-------------------------------------------------------------------------
*
- * Created: H5HLprivate.h
- * Jul 16 1997
- * Robb Matzke <matzke@llnl.gov>
+ * Created: H5HLprivate.h
+ * Jul 16 1997
+ * Robb Matzke <matzke@llnl.gov>
*
- * Purpose:
- *
- * Modifications:
+ * Purpose: Private declarations for the H5HL (local heap) package.
*
*-------------------------------------------------------------------------
*/
@@ -32,23 +30,23 @@
#include "H5HLpublic.h"
/* Private headers needed by this file. */
-#include "H5private.h" /* Generic Functions */
-#include "H5ACprivate.h" /* Metadata cache */
-#include "H5Fprivate.h" /* File access */
+#include "H5private.h" /* Generic Functions */
+#include "H5ACprivate.h" /* Metadata cache */
+#include "H5Fprivate.h" /* File access */
/*
* Feature: Define H5HL_DEBUG on the compiler command line if you want to
- * diagnostic messages from this layer.
+ * enable diagnostic messages from this layer.
*/
#ifdef NDEBUG
# undef H5HL_DEBUG
#endif
-#define H5HL_ALIGN(X) ((((unsigned)X)+7)&(unsigned)(~0x07)) /*align on 8-byte boundary */
+#define H5HL_ALIGN(X) ((((unsigned)X)+7)&(unsigned)(~0x07)) /* align on 8-byte boundary */
-#define H5HL_SIZEOF_FREE(F) \
- H5HL_ALIGN(H5F_SIZEOF_SIZE (F) + /*ptr to next free block */ \
- H5F_SIZEOF_SIZE (F)) /*size of this free block */
+#define H5HL_SIZEOF_FREE(F) \
+ H5HL_ALIGN(H5F_SIZEOF_SIZE (F) + /* ptr to next free block */ \
+ H5F_SIZEOF_SIZE (F)) /* size of this free block */
/****************************/
/* Library Private Typedefs */
@@ -58,22 +56,23 @@
typedef struct H5HL_t H5HL_t;
/*
- * Library prototypes...
+ * Library prototypes
*/
H5_DLL herr_t H5HL_create(H5F_t *f, hid_t dxpl_id, size_t size_hint, haddr_t *addr/*out*/);
-H5_DLL H5HL_t *H5HL_protect(H5F_t *f, hid_t dxpl_id, haddr_t addr, H5AC_protect_t rw);
+H5_DLL herr_t H5HL_delete(H5F_t *f, hid_t dxpl_id, haddr_t addr);
+H5_DLL herr_t H5HL_get_size(H5F_t *f, hid_t dxpl_id, haddr_t addr, size_t *size);
+H5_DLL herr_t H5HL_heapsize(H5F_t *f, hid_t dxpl_id, haddr_t addr, hsize_t *heap_size);
+H5_DLL size_t H5HL_insert(H5F_t *f, hid_t dxpl_id, H5HL_t *heap, size_t size,
+ const void *buf);
H5_DLL void *H5HL_offset_into(const H5HL_t *heap, size_t offset);
+H5_DLL H5HL_t *H5HL_protect(H5F_t *f, hid_t dxpl_id, haddr_t addr, H5AC_protect_t rw);
H5_DLL herr_t H5HL_remove(H5F_t *f, hid_t dxpl_id, H5HL_t *heap, size_t offset,
size_t size);
H5_DLL herr_t H5HL_unprotect(H5HL_t *heap);
-H5_DLL size_t H5HL_insert(H5F_t *f, hid_t dxpl_id, H5HL_t *heap, size_t size,
- const void *buf);
-H5_DLL herr_t H5HL_delete(H5F_t *f, hid_t dxpl_id, haddr_t addr);
-H5_DLL herr_t H5HL_get_size(H5F_t *f, hid_t dxpl_id, haddr_t addr, size_t *size);
-H5_DLL herr_t H5HL_heapsize(H5F_t *f, hid_t dxpl_id, haddr_t addr, hsize_t *heap_size);
-/* Debugging functions */
+/* Debugging routines for dumping file structures */
H5_DLL herr_t H5HL_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr, FILE * stream, int indent,
- int fwidth);
+ int fwidth);
+
#endif
diff --git a/src/H5HLpublic.h b/src/H5HLpublic.h
index db00f51..6dc1828 100644
--- a/src/H5HLpublic.h
+++ b/src/H5HLpublic.h
@@ -21,8 +21,6 @@
*
* Purpose: Public declarations for the H5HL (local heap) package.
*
- * Modifications:
- *
*-------------------------------------------------------------------------
*/
#ifndef _H5HLpublic_H
diff --git a/src/Makefile.am b/src/Makefile.am
index e03a626..b9af766416 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -72,7 +72,7 @@ libhdf5_la_SOURCES= H5.c H5checksum.c H5dbg.c H5system.c H5timer.c H5trace.c \
H5HFhdr.c H5HFhuge.c H5HFiblock.c H5HFiter.c H5HFman.c H5HFsection.c \
H5HFspace.c H5HFstat.c H5HFtest.c H5HFtiny.c \
H5HG.c H5HGcache.c H5HGdbg.c H5HGquery.c \
- H5HL.c H5HLcache.c H5HLdbg.c H5HLint.c \
+ H5HL.c H5HLcache.c H5HLdbg.c H5HLint.c H5HLprfx.c H5HLdblk.c\
H5HP.c H5I.c H5Itest.c H5L.c H5Lexternal.c H5lib_settings.c \
H5MF.c H5MFaggr.c H5MFdbg.c H5MFsection.c \
H5MM.c H5MP.c H5MPtest.c \
diff --git a/src/Makefile.in b/src/Makefile.in
index 4d226cd..55d1c78 100644
--- a/src/Makefile.in
+++ b/src/Makefile.in
@@ -124,31 +124,32 @@ am_libhdf5_la_OBJECTS = H5.lo H5checksum.lo H5dbg.lo H5system.lo \
H5HFdtable.lo H5HFhdr.lo H5HFhuge.lo H5HFiblock.lo H5HFiter.lo \
H5HFman.lo H5HFsection.lo H5HFspace.lo H5HFstat.lo H5HFtest.lo \
H5HFtiny.lo H5HG.lo H5HGcache.lo H5HGdbg.lo H5HGquery.lo \
- H5HL.lo H5HLcache.lo H5HLdbg.lo H5HLint.lo H5HP.lo H5I.lo \
- H5Itest.lo H5L.lo H5Lexternal.lo H5lib_settings.lo H5MF.lo \
- H5MFaggr.lo H5MFdbg.lo H5MFsection.lo H5MM.lo H5MP.lo \
- H5MPtest.lo H5O.lo H5Oainfo.lo H5Oalloc.lo H5Oattr.lo \
- H5Oattribute.lo H5Obogus.lo H5Obtreek.lo H5Ocache.lo \
- H5Ochunk.lo H5Ocont.lo H5Ocopy.lo H5Odbg.lo H5Odrvinfo.lo \
- H5Odtype.lo H5Oefl.lo H5Ofill.lo H5Oflush.lo H5Ofsinfo.lo \
- H5Oginfo.lo H5Olayout.lo H5Olinfo.lo H5Olink.lo H5Omessage.lo \
- H5Omtime.lo H5Oname.lo H5Onull.lo H5Opline.lo H5Orefcount.lo \
- H5Osdspace.lo H5Oshared.lo H5Oshmesg.lo H5Ostab.lo \
- H5Ostorage.lo H5Otest.lo H5Ounknown.lo H5P.lo H5Pacpl.lo \
- H5Pdapl.lo H5Pdcpl.lo H5Pdeprec.lo H5Pdxpl.lo H5Pfapl.lo \
- H5Pfcpl.lo H5Pfmpl.lo H5Pgcpl.lo H5Pint.lo H5Plapl.lo \
- H5Plcpl.lo H5Pocpl.lo H5Pocpypl.lo H5Pstrcpl.lo H5Ptest.lo \
- H5R.lo H5Rdeprec.lo H5RC.lo H5RS.lo H5S.lo H5Sall.lo H5Sdbg.lo \
- H5Shyper.lo H5Smpio.lo H5Snone.lo H5Spoint.lo H5Sselect.lo \
- H5Stest.lo H5SL.lo H5SM.lo H5SMbtree2.lo H5SMcache.lo \
- H5SMmessage.lo H5SMtest.lo H5ST.lo H5T.lo H5Tarray.lo \
- H5Tbit.lo H5Tcommit.lo H5Tcompound.lo H5Tconv.lo H5Tcset.lo \
- H5Tdbg.lo H5Tdeprec.lo H5Tenum.lo H5Tfields.lo H5Tfixed.lo \
- H5Tfloat.lo H5Tinit.lo H5Tnative.lo H5Toffset.lo H5Toh.lo \
- H5Topaque.lo H5Torder.lo H5Tpad.lo H5Tprecis.lo H5Tstrpad.lo \
- H5Tvisit.lo H5Tvlen.lo H5TS.lo H5V.lo H5WB.lo H5Z.lo \
- H5Zdeflate.lo H5Zfletcher32.lo H5Znbit.lo H5Zshuffle.lo \
- H5Zszip.lo H5Zscaleoffset.lo H5Ztrans.lo
+ H5HL.lo H5HLcache.lo H5HLdbg.lo H5HLint.lo H5HLprfx.lo \
+ H5HLdblk.lo H5HP.lo H5I.lo H5Itest.lo H5L.lo H5Lexternal.lo \
+ H5lib_settings.lo H5MF.lo H5MFaggr.lo H5MFdbg.lo \
+ H5MFsection.lo H5MM.lo H5MP.lo H5MPtest.lo H5O.lo H5Oainfo.lo \
+ H5Oalloc.lo H5Oattr.lo H5Oattribute.lo H5Obogus.lo \
+ H5Obtreek.lo H5Ocache.lo H5Ochunk.lo H5Ocont.lo H5Ocopy.lo \
+ H5Odbg.lo H5Odrvinfo.lo H5Odtype.lo H5Oefl.lo H5Ofill.lo \
+ H5Oflush.lo H5Ofsinfo.lo H5Oginfo.lo H5Olayout.lo H5Olinfo.lo \
+ H5Olink.lo H5Omessage.lo H5Omtime.lo H5Oname.lo H5Onull.lo \
+ H5Opline.lo H5Orefcount.lo H5Osdspace.lo H5Oshared.lo \
+ H5Oshmesg.lo H5Ostab.lo H5Ostorage.lo H5Otest.lo H5Ounknown.lo \
+ H5P.lo H5Pacpl.lo H5Pdapl.lo H5Pdcpl.lo H5Pdeprec.lo \
+ H5Pdxpl.lo H5Pfapl.lo H5Pfcpl.lo H5Pfmpl.lo H5Pgcpl.lo \
+ H5Pint.lo H5Plapl.lo H5Plcpl.lo H5Pocpl.lo H5Pocpypl.lo \
+ H5Pstrcpl.lo H5Ptest.lo H5R.lo H5Rdeprec.lo H5RC.lo H5RS.lo \
+ H5S.lo H5Sall.lo H5Sdbg.lo H5Shyper.lo H5Smpio.lo H5Snone.lo \
+ H5Spoint.lo H5Sselect.lo H5Stest.lo H5SL.lo H5SM.lo \
+ H5SMbtree2.lo H5SMcache.lo H5SMmessage.lo H5SMtest.lo H5ST.lo \
+ H5T.lo H5Tarray.lo H5Tbit.lo H5Tcommit.lo H5Tcompound.lo \
+ H5Tconv.lo H5Tcset.lo H5Tdbg.lo H5Tdeprec.lo H5Tenum.lo \
+ H5Tfields.lo H5Tfixed.lo H5Tfloat.lo H5Tinit.lo H5Tnative.lo \
+ H5Toffset.lo H5Toh.lo H5Topaque.lo H5Torder.lo H5Tpad.lo \
+ H5Tprecis.lo H5Tstrpad.lo H5Tvisit.lo H5Tvlen.lo H5TS.lo \
+ H5V.lo H5WB.lo H5Z.lo H5Zdeflate.lo H5Zfletcher32.lo \
+ H5Znbit.lo H5Zshuffle.lo H5Zszip.lo H5Zscaleoffset.lo \
+ H5Ztrans.lo
libhdf5_la_OBJECTS = $(am_libhdf5_la_OBJECTS)
AM_V_lt = $(am__v_lt_$(V))
am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
@@ -533,7 +534,7 @@ libhdf5_la_SOURCES = H5.c H5checksum.c H5dbg.c H5system.c H5timer.c H5trace.c \
H5HFhdr.c H5HFhuge.c H5HFiblock.c H5HFiter.c H5HFman.c H5HFsection.c \
H5HFspace.c H5HFstat.c H5HFtest.c H5HFtiny.c \
H5HG.c H5HGcache.c H5HGdbg.c H5HGquery.c \
- H5HL.c H5HLcache.c H5HLdbg.c H5HLint.c \
+ H5HL.c H5HLcache.c H5HLdbg.c H5HLint.c H5HLprfx.c H5HLdblk.c\
H5HP.c H5I.c H5Itest.c H5L.c H5Lexternal.c H5lib_settings.c \
H5MF.c H5MFaggr.c H5MFdbg.c H5MFsection.c \
H5MM.c H5MP.c H5MPtest.c \
@@ -853,7 +854,9 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/H5HL.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/H5HLcache.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/H5HLdbg.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/H5HLdblk.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/H5HLint.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/H5HLprfx.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/H5HP.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/H5I.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/H5Itest.Plo@am__quote@