summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDana Robinson <derobins@hdfgroup.org>2012-07-05 19:07:42 (GMT)
committerDana Robinson <derobins@hdfgroup.org>2012-07-05 19:07:42 (GMT)
commitce0496520836aef9fdea54fc01d5d92fe8f43b77 (patch)
tree8c507794d59bcf8fbbe7c6bf5ccfa4546ee9cdde
parentc21ceb956ca9a6a1705b2d38fab31889b94cc3e9 (diff)
downloadhdf5-ce0496520836aef9fdea54fc01d5d92fe8f43b77.zip
hdf5-ce0496520836aef9fdea54fc01d5d92fe8f43b77.tar.gz
hdf5-ce0496520836aef9fdea54fc01d5d92fe8f43b77.tar.bz2
[svn-r22515] Converted local heap (H5HL) code to use the new enter/leave/error macro
scheme. Also created separate prefix and data block files so that the local heap code more closely resembles the rest of the data structures. Tested on jam. This branch still has h5diff errors. The library tests all pass, though.
-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@