summaryrefslogtreecommitdiffstats
path: root/src/H5HLint.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/H5HLint.c')
-rw-r--r--src/H5HLint.c60
1 files changed, 40 insertions, 20 deletions
diff --git a/src/H5HLint.c b/src/H5HLint.c
index 069bad8..42d6744 100644
--- a/src/H5HLint.c
+++ b/src/H5HLint.c
@@ -80,10 +80,13 @@ H5FL_DEFINE_STATIC(H5HL_t);
*
*-------------------------------------------------------------------------
*/
-BEGIN_FUNC(PKG, ERR, H5HL_t *, NULL, NULL,
- H5HL__new(size_t sizeof_size, size_t sizeof_addr, size_t prfx_size))
+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 = NULL;
- H5HL_t *heap = NULL; /* New local heap */
+ FUNC_ENTER_PACKAGE
/* check arguments */
HDassert(sizeof_size > 0);
@@ -92,7 +95,7 @@ BEGIN_FUNC(PKG, ERR, H5HL_t *, NULL, NULL,
/* Allocate new local heap structure */
if (NULL == (heap = H5FL_CALLOC(H5HL_t)))
- H5E_THROW(H5E_CANTALLOC, "memory allocation failed");
+ HGOTO_ERROR(H5E_HEAP, H5E_CANTALLOC, NULL, "memory allocation failed")
/* Initialize non-zero fields */
heap->sizeof_size = sizeof_size;
@@ -102,12 +105,13 @@ BEGIN_FUNC(PKG, ERR, H5HL_t *, NULL, NULL,
/* Set the return value */
ret_value = heap;
- CATCH
+done:
if (!ret_value && heap != NULL)
if (NULL == (heap = H5FL_FREE(H5HL_t, heap)))
- H5E_THROW(H5E_CANTFREE, "can't free heap memory");
+ HDONE_ERROR(H5E_HEAP, H5E_CANTFREE, NULL, "can't free heap memory")
-END_FUNC(PKG) /* end H5HL__new() */
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5HL__new() */
/*-------------------------------------------------------------------------
* Function: H5HL__inc_rc
@@ -121,7 +125,10 @@ END_FUNC(PKG) /* end H5HL__new() */
*
*-------------------------------------------------------------------------
*/
-BEGIN_FUNC(PKG, NOERR, herr_t, SUCCEED, -, H5HL__inc_rc(H5HL_t *heap))
+herr_t
+H5HL__inc_rc(H5HL_t *heap)
+{
+ FUNC_ENTER_PACKAGE_NOERR
/* check arguments */
HDassert(heap);
@@ -129,7 +136,8 @@ BEGIN_FUNC(PKG, NOERR, herr_t, SUCCEED, -, H5HL__inc_rc(H5HL_t *heap))
/* Increment heap's ref. count */
heap->rc++;
-END_FUNC(PKG) /* end H5HL__inc_rc() */
+ FUNC_LEAVE_NOAPI(SUCCEED)
+} /* end H5HL__inc_rc() */
/*-------------------------------------------------------------------------
* Function: H5HL__dec_rc
@@ -143,7 +151,12 @@ END_FUNC(PKG) /* end H5HL__inc_rc() */
*
*-------------------------------------------------------------------------
*/
-BEGIN_FUNC(PKG, ERR, herr_t, SUCCEED, FAIL, H5HL__dec_rc(H5HL_t *heap))
+herr_t
+H5HL__dec_rc(H5HL_t *heap)
+{
+ herr_t ret_value = SUCCEED;
+
+ FUNC_ENTER_PACKAGE
/* check arguments */
HDassert(heap);
@@ -151,12 +164,13 @@ BEGIN_FUNC(PKG, ERR, herr_t, SUCCEED, FAIL, 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 && FAIL == H5HL__dest(heap))
- H5E_THROW(H5E_CANTFREE, "unable to destroy local heap");
+ HGOTO_ERROR(H5E_HEAP, H5E_CANTFREE, FAIL, "unable to destroy local heap");
-END_FUNC(PKG) /* end H5HL__dec_rc() */
+done:
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5HL__dec_rc() */
/*-------------------------------------------------------------------------
* Function: H5HL__dest
@@ -170,7 +184,12 @@ END_FUNC(PKG) /* end H5HL__dec_rc() */
*
*-------------------------------------------------------------------------
*/
-BEGIN_FUNC(PKG, ERR, herr_t, SUCCEED, FAIL, H5HL__dest(H5HL_t *heap))
+herr_t
+H5HL__dest(H5HL_t *heap)
+{
+ herr_t ret_value = SUCCEED;
+
+ FUNC_ENTER_PACKAGE
/* check arguments */
HDassert(heap);
@@ -181,20 +200,21 @@ BEGIN_FUNC(PKG, ERR, herr_t, SUCCEED, FAIL, H5HL__dest(H5HL_t *heap))
HDassert(heap->prfx == NULL);
HDassert(heap->dblk == NULL);
- CATCH
+ /* Use DONE errors here to try to free as much as possible */
if (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");
+ HDONE_ERROR(H5E_HEAP, H5E_CANTFREE, FAIL, "unable to free local heap data block image");
while (heap->freelist) {
H5HL_free_t *fl;
fl = heap->freelist;
heap->freelist = fl->next;
if (NULL != (fl = H5FL_FREE(H5HL_free_t, fl)))
- H5E_THROW(H5E_CANTFREE, "unable to free local heap free list");
- } /* end while */
+ HDONE_ERROR(H5E_HEAP, H5E_CANTFREE, FAIL, "unable to free local heap free list");
+ }
if (NULL != (heap = H5FL_FREE(H5HL_t, heap)))
- H5E_THROW(H5E_CANTFREE, "unable to free local heap");
+ HDONE_ERROR(H5E_HEAP, H5E_CANTFREE, FAIL, "unable to free local heap");
-END_FUNC(PKG) /* end H5HL__dest() */
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5HL__dest() */