summaryrefslogtreecommitdiffstats
path: root/src/H5EAdblock.c
diff options
context:
space:
mode:
authorLarry Knox <lrknox@hdfgroup.org>2021-08-12 18:26:15 (GMT)
committerGitHub <noreply@github.com>2021-08-12 18:26:15 (GMT)
commite2c47ffb01b42a3da930e2b175b40810d4bcfbca (patch)
tree7b6f0410430d29d09342106afae0f886a9b45963 /src/H5EAdblock.c
parentc2e61724aa19f84bda9fd730236d80f4af1e4e74 (diff)
downloadhdf5-e2c47ffb01b42a3da930e2b175b40810d4bcfbca.zip
hdf5-e2c47ffb01b42a3da930e2b175b40810d4bcfbca.tar.gz
hdf5-e2c47ffb01b42a3da930e2b175b40810d4bcfbca.tar.bz2
Merge1 issue 839 PRs to hdf5 1 12 (#904)
* Fixes for a couple of trivial warnings (#676) * Committing clang-format changes * Trivial warning fixes: * Removes an unused done target in H5Tbit.c * Add (void) to quiet "ignored return value" warnings in the generators (which generally ignore errors) Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com> * Removes alternative function enter/leave macro scheme (#678) * Committing clang-format changes * Converted BEGIN_FUNC, etc. macros to FUNC_ENTER * Rips out the BEGIN_FUNC, etc. macros * Removes 'end if', etc. comments from H5HL package * Committing clang-format changes * Fixes an H5EA iterate issue * Fixes an issue in the H5FA iterator code * Further cleanup in bin/trace after macro removal * Iterator changes in H5EA and H5FA Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com> * Various CMake changes (#679) * Committing clang-format changes * Several CMake updates: * Removes unused HDF5_ENABLE_HSIZET * Switches TEST_SHELL_SCRIPTS to ON * Sets SH_PROGRAM to bash instead of sh * Set default build type back to RelWithDebInfo Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com> * err_compat test cleanup (#681) * Committing clang-format changes * Cleans up err_compat test and output * Formatted source Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com> * CMake fix for sporadic flush2 failures (#692) * Committing clang-format changes * Runs the flush1/flush2 tests in their own directory Avoids file deletions by other tests. * Revert "Runs the flush1/flush2 tests in their own directory" This reverts commit 746c04882434cb502e4231de8f7dd5acb4949f54. Also pulls the flush files from the clean list, which is a simpler fix. Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com> * Ubsan fixes (#498) * Fixed use of null pointer identified by UBSan UBSan warned: runtime error: member access within null pointer of type 'named_dt_t' (aka 'struct named_dt_t') with these two tests: H5REPACK-committed_dt_DFF H5REPACK-committed_dt Reformulated per @gnuoyd suggestion. * Fixed undefined float -> unsigned char conversion in HL_test_image * Removed dead skip_overflow_tests_g global The global `skip_overflow_tests_g` was being set but never read. * Don't treat 2d array as 1d array, fixing UBSan complaint in `CPP_testhdf5` * Committing clang-format changes * Remove extra ']' in line 730. * Committing clang-format changes Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Larry Knox <lrknox@hdfgroup.org> * BUG: DataSet assignment operator is missing (#503) * BUG: DataSet assignment operator is missing * Some compilers complain if the copy constructor is given explicitly but the assignment operator is implicitly set to default. * Explicitly defining the assignment operator allows us to properly handle reference counters for shared resources. * BUG: DataSet assignment operator is missing. * Mimicking code of H5DataType::operator() as suggested by @bmribler. * Added test Description: Added test for DataSet::operator= that Leengit added Platform tested: Linux/64 (jelly) * Removed Author field. * Commit clang format changes. * Entry for Leengit's github PR #503 * Removed lines left by mistake Co-authored-by: Binh-Minh Ribler <bmribler@hdfgroup.org> Co-authored-by: Larry Knox <lrknox@hdfgroup.org> * Hdf5 merge pr7 (#516) * Modify temporary rpath for testing in java example scripts. * Update URL in source file Copyright headers for web copy of COPYING (license) file. * Add release_docs/code-conventions.md file. * Add script to test h5py. * Fix script error. * Add file h5pytest.yml. * Test declaration of counter variables in for loops. * Committing clang-format changes * Committing clang-format changes * Added [] to line 126 of H5LTanalyze.l. Ran bin/genparser with flex v2.6.4 and Bison v3.0.4 on jelly. * Revert "Added [] to line 126 of H5LTanalyze.l." This reverts commit e4a9cee441efa75b16a8ee030c86189e186dd266. * Revert extra commits to match canonical develop. * Add cmake variable HDF5_LIB_INFIX (#7) * Add cmake variable HDF5_LIB_INFIX This infix is added to all library names after 'hdf5'. e.g. the infix '_openmpi' results in the library name 'libhdf5_openmpi.so' This name is used in packages on debian based systems. (see https://packages.debian.org/jessie/amd64/libhdf5-openmpi-8/filelist) This option is useful when testing projects on debian based systems with custom builds of hdf5 while trying to minimize differences between the custom setup and the environment created by installing system packages. * Added RELEASE.txt entry for HDF5_LIB_INFIX. Co-authored-by: Larry Knox <lrknox@hdfgroup.org> Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Raphael Grimm <barcode@users.noreply.github.com> * Fixes a segfault when H5Pset_mdc_log_options is called multiple times on a fapl (#601) * Committing clang-format changes * Fixes a segfault when H5Pset_mdc_log_options() is called multiple times An internal string is incorrectly freed when the API call is invoked multiple times on a property list, which will usually cause a segfault to occur. On the first call the log location is NULL so the problem doesn't occur. Fixes HDFFV-11239 * Fixes typos Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com> * Fix for a segfault when H5Pset_fapl_log is passed an invalid fapl ID (#607) * Committing clang-format changes * Fixes an issue where H5Pset_fapl_log sefaults when passed an invalid fapl ID This was due to a pointer-containing struct being memset after the first internal API call. If the first call failed, the error condition would check if the pointer was not NULL and then attempt to free it if not. This would lead to the freeing of a wild pointer if an invalid fapl ID were passed in. This was fixed by reordering the memset and adding a test to ensure the problem stays fixed. Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com> * Fixes crashes when size_hint > UINT32_MAX is passed to H5Gcreate1 (#611) * Committing clang-format changes * Fixes incorrect size_hint handling in H5Gcreate1 * Updates the size hint type for group creation * Updates the RELEASE.txt note * Revert "Updates the RELEASE.txt note" This reverts commit 3df386acca806d652bbe2209f7c4503b30f068ff. * Reverts previous behavior to use a uint32_t struct field * Updates RELEASE.txt Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Dana Robinson <43805+derobins@users.noreply.github.com> Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Sean McBride <sean@rogue-research.com> Co-authored-by: Lee Newberg <35611400+Leengit@users.noreply.github.com> Co-authored-by: Binh-Minh Ribler <bmribler@hdfgroup.org> Co-authored-by: Raphael Grimm <barcode@users.noreply.github.com>
Diffstat (limited to 'src/H5EAdblock.c')
-rw-r--r--src/H5EAdblock.c177
1 files changed, 106 insertions, 71 deletions
diff --git a/src/H5EAdblock.c b/src/H5EAdblock.c
index 45696c7..f17aae3 100644
--- a/src/H5EAdblock.c
+++ b/src/H5EAdblock.c
@@ -85,11 +85,13 @@ H5FL_DEFINE_STATIC(H5EA_dblock_t);
*
*-------------------------------------------------------------------------
*/
-BEGIN_FUNC(PKG, ERR, H5EA_dblock_t *, NULL, NULL,
- H5EA__dblock_alloc(H5EA_hdr_t *hdr, void *parent, size_t nelmts))
+H5EA_dblock_t *
+H5EA__dblock_alloc(H5EA_hdr_t *hdr, void *parent, size_t nelmts)
+{
+ H5EA_dblock_t *dblock = NULL; /* Extensible array data block */
+ H5EA_dblock_t *ret_value = NULL;
- /* Local variables */
- H5EA_dblock_t *dblock = NULL; /* Extensible array data block */
+ FUNC_ENTER_PACKAGE
/* Check arguments */
HDassert(hdr);
@@ -98,11 +100,12 @@ BEGIN_FUNC(PKG, ERR, H5EA_dblock_t *, NULL, NULL,
/* Allocate memory for the data block */
if (NULL == (dblock = H5FL_CALLOC(H5EA_dblock_t)))
- H5E_THROW(H5E_CANTALLOC, "memory allocation failed for extensible array data block")
+ HGOTO_ERROR(H5E_EARRAY, H5E_CANTALLOC, NULL,
+ "memory allocation failed for extensible array data block")
/* Share common array information */
if (H5EA__hdr_incr(hdr) < 0)
- H5E_THROW(H5E_CANTINC, "can't increment reference count on shared array header")
+ HGOTO_ERROR(H5E_EARRAY, H5E_CANTINC, NULL, "can't increment reference count on shared array header")
dblock->hdr = hdr;
/* Set non-zero internal fields */
@@ -118,18 +121,20 @@ BEGIN_FUNC(PKG, ERR, H5EA_dblock_t *, NULL, NULL,
else {
/* Allocate buffer for elements in data block */
if (NULL == (dblock->elmts = H5EA__hdr_alloc_elmts(hdr, nelmts)))
- H5E_THROW(H5E_CANTALLOC, "memory allocation failed for data block element buffer")
+ HGOTO_ERROR(H5E_EARRAY, H5E_CANTALLOC, NULL,
+ "memory allocation failed for data block element buffer")
} /* end else */
/* Set the return value */
ret_value = dblock;
- CATCH
+done:
if (!ret_value)
if (dblock && H5EA__dblock_dest(dblock) < 0)
- H5E_THROW(H5E_CANTFREE, "unable to destroy extensible array data block")
+ HDONE_ERROR(H5E_EARRAY, H5E_CANTFREE, NULL, "unable to destroy extensible array data block")
-END_FUNC(PKG) /* end H5EA__dblock_alloc() */
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5EA__dblock_alloc() */
/*-------------------------------------------------------------------------
* Function: H5EA__dblock_create
@@ -143,14 +148,15 @@ END_FUNC(PKG) /* end H5EA__dblock_alloc() */
*
*-------------------------------------------------------------------------
*/
-BEGIN_FUNC(PKG, ERR, haddr_t, HADDR_UNDEF, HADDR_UNDEF,
- H5EA__dblock_create(H5EA_hdr_t *hdr, void *parent, hbool_t *stats_changed, hsize_t dblk_off,
- size_t nelmts))
+haddr_t
+H5EA__dblock_create(H5EA_hdr_t *hdr, void *parent, hbool_t *stats_changed, hsize_t dblk_off, size_t nelmts)
+{
+ H5EA_dblock_t *dblock = NULL; /* Extensible array data block */
+ haddr_t dblock_addr; /* Extensible array data block address */
+ hbool_t inserted = FALSE; /* Whether the header was inserted into cache */
+ haddr_t ret_value = HADDR_UNDEF;
- /* Local variables */
- H5EA_dblock_t *dblock = NULL; /* Extensible array data block */
- haddr_t dblock_addr; /* Extensible array data block address */
- hbool_t inserted = FALSE; /* Whether the header was inserted into cache */
+ FUNC_ENTER_PACKAGE
/* Sanity check */
HDassert(hdr);
@@ -159,7 +165,8 @@ BEGIN_FUNC(PKG, ERR, haddr_t, HADDR_UNDEF, HADDR_UNDEF,
/* Allocate the data block */
if (NULL == (dblock = H5EA__dblock_alloc(hdr, parent, nelmts)))
- H5E_THROW(H5E_CANTALLOC, "memory allocation failed for extensible array data block")
+ HGOTO_ERROR(H5E_EARRAY, H5E_CANTALLOC, HADDR_UNDEF,
+ "memory allocation failed for extensible array data block")
/* Set size of data block on disk */
dblock->size = H5EA_DBLOCK_SIZE(dblock);
@@ -169,24 +176,27 @@ BEGIN_FUNC(PKG, ERR, haddr_t, HADDR_UNDEF, HADDR_UNDEF,
/* Allocate space for the data block on disk */
if (HADDR_UNDEF == (dblock_addr = H5MF_alloc(hdr->f, H5FD_MEM_EARRAY_DBLOCK, (hsize_t)dblock->size)))
- H5E_THROW(H5E_CANTALLOC, "file allocation failed for extensible array data block")
+ HGOTO_ERROR(H5E_EARRAY, H5E_CANTALLOC, HADDR_UNDEF,
+ "file allocation failed for extensible array data block")
dblock->addr = dblock_addr;
/* Don't initialize elements if paged */
if (!dblock->npages)
/* Clear any elements in data block to fill value */
if ((hdr->cparam.cls->fill)(dblock->elmts, (size_t)dblock->nelmts) < 0)
- H5E_THROW(H5E_CANTSET, "can't set extensible array data block elements to class's fill value")
+ HGOTO_ERROR(H5E_EARRAY, H5E_CANTSET, HADDR_UNDEF,
+ "can't set extensible array data block elements to class's fill value")
/* Cache the new extensible array data block */
if (H5AC_insert_entry(hdr->f, H5AC_EARRAY_DBLOCK, dblock_addr, dblock, H5AC__NO_FLAGS_SET) < 0)
- H5E_THROW(H5E_CANTINSERT, "can't add extensible array data block to cache")
+ HGOTO_ERROR(H5E_EARRAY, H5E_CANTINSERT, HADDR_UNDEF, "can't add extensible array data block to cache")
inserted = TRUE;
/* Add data block as child of 'top' proxy */
if (hdr->top_proxy) {
if (H5AC_proxy_entry_add_child(hdr->top_proxy, hdr->f, dblock) < 0)
- H5E_THROW(H5E_CANTSET, "unable to add extensible array entry as child of array proxy")
+ HGOTO_ERROR(H5E_EARRAY, H5E_CANTSET, HADDR_UNDEF,
+ "unable to add extensible array entry as child of array proxy")
dblock->top_proxy = hdr->top_proxy;
} /* end if */
@@ -203,25 +213,29 @@ BEGIN_FUNC(PKG, ERR, haddr_t, HADDR_UNDEF, HADDR_UNDEF,
/* Set address of data block to return */
ret_value = dblock_addr;
- CATCH
+done:
if (!H5F_addr_defined(ret_value))
if (dblock) {
/* Remove from cache, if inserted */
if (inserted)
if (H5AC_remove_entry(dblock) < 0)
- H5E_THROW(H5E_CANTREMOVE, "unable to remove extensible array data block from cache")
+ HDONE_ERROR(H5E_EARRAY, H5E_CANTREMOVE, HADDR_UNDEF,
+ "unable to remove extensible array data block from cache")
/* Release data block's disk space */
if (H5F_addr_defined(dblock->addr) &&
H5MF_xfree(hdr->f, H5FD_MEM_EARRAY_DBLOCK, dblock->addr, (hsize_t)dblock->size) < 0)
- H5E_THROW(H5E_CANTFREE, "unable to release extensible array data block")
+ HDONE_ERROR(H5E_EARRAY, H5E_CANTFREE, HADDR_UNDEF,
+ "unable to release extensible array data block")
/* Destroy data block */
if (H5EA__dblock_dest(dblock) < 0)
- H5E_THROW(H5E_CANTFREE, "unable to destroy extensible array data block")
+ HDONE_ERROR(H5E_EARRAY, H5E_CANTFREE, HADDR_UNDEF,
+ "unable to destroy extensible array data block")
} /* end if */
-END_FUNC(PKG) /* end H5EA__dblock_create() */
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5EA__dblock_create() */
/*-------------------------------------------------------------------------
* Function: H5EA__dblock_sblk_idx
@@ -236,10 +250,12 @@ END_FUNC(PKG) /* end H5EA__dblock_create() */
*
*-------------------------------------------------------------------------
*/
-BEGIN_FUNC(PKG, NOERR, unsigned, 0, -, H5EA__dblock_sblk_idx(const H5EA_hdr_t *hdr, hsize_t idx))
+unsigned
+H5EA__dblock_sblk_idx(const H5EA_hdr_t *hdr, hsize_t idx)
+{
+ unsigned sblk_idx = 0; /* Which superblock does this index fall in? */
- /* Local variables */
- unsigned sblk_idx; /* Which superblock does this index fall in? */
+ FUNC_ENTER_PACKAGE_NOERR
/* Sanity check */
HDassert(hdr);
@@ -252,10 +268,8 @@ BEGIN_FUNC(PKG, NOERR, unsigned, 0, -, H5EA__dblock_sblk_idx(const H5EA_hdr_t *h
H5_CHECK_OVERFLOW(idx, /*From:*/ hsize_t, /*To:*/ uint64_t);
sblk_idx = H5VM_log2_gen((uint64_t)((idx / hdr->cparam.data_blk_min_elmts) + 1));
- /* Set return value */
- ret_value = sblk_idx;
-
-END_FUNC(PKG) /* end H5EA__dblock_sblk_idx() */
+ FUNC_LEAVE_NOAPI(sblk_idx)
+} /* end H5EA__dblock_sblk_idx() */
/*-------------------------------------------------------------------------
* Function: H5EA__dblock_protect
@@ -269,13 +283,14 @@ END_FUNC(PKG) /* end H5EA__dblock_sblk_idx() */
*
*-------------------------------------------------------------------------
*/
-BEGIN_FUNC(PKG, ERR, H5EA_dblock_t *, NULL, NULL,
- H5EA__dblock_protect(H5EA_hdr_t *hdr, void *parent, haddr_t dblk_addr, size_t dblk_nelmts,
- unsigned flags))
-
- /* Local variables */
+H5EA_dblock_t *
+H5EA__dblock_protect(H5EA_hdr_t *hdr, void *parent, haddr_t dblk_addr, size_t dblk_nelmts, unsigned flags)
+{
H5EA_dblock_t * dblock; /* Extensible array data block */
H5EA_dblock_cache_ud_t udata; /* Information needed for loading data block */
+ H5EA_dblock_t * ret_value = NULL;
+
+ FUNC_ENTER_PACKAGE
/* Sanity check */
HDassert(hdr);
@@ -294,32 +309,36 @@ BEGIN_FUNC(PKG, ERR, H5EA_dblock_t *, NULL, NULL,
/* Protect the data block */
if (NULL ==
(dblock = (H5EA_dblock_t *)H5AC_protect(hdr->f, H5AC_EARRAY_DBLOCK, dblk_addr, &udata, flags)))
- H5E_THROW(H5E_CANTPROTECT, "unable to protect extensible array data block, address = %llu",
- (unsigned long long)dblk_addr)
+ HGOTO_ERROR(H5E_EARRAY, H5E_CANTPROTECT, NULL,
+ "unable to protect extensible array data block, address = %llu",
+ (unsigned long long)dblk_addr)
/* Create top proxy, if it doesn't exist */
if (hdr->top_proxy && NULL == dblock->top_proxy) {
/* Add data block as child of 'top' proxy */
if (H5AC_proxy_entry_add_child(hdr->top_proxy, hdr->f, dblock) < 0)
- H5E_THROW(H5E_CANTSET, "unable to add extensible array entry as child of array proxy")
+ HGOTO_ERROR(H5E_EARRAY, H5E_CANTSET, NULL,
+ "unable to add extensible array entry as child of array proxy")
dblock->top_proxy = hdr->top_proxy;
- } /* end if */
+ }
/* Set return value */
ret_value = dblock;
- CATCH
+done:
/* Clean up on error */
if (!ret_value) {
/* Release the data block, if it was protected */
if (dblock &&
H5AC_unprotect(hdr->f, H5AC_EARRAY_DBLOCK, dblock->addr, dblock, H5AC__NO_FLAGS_SET) < 0)
- H5E_THROW(H5E_CANTUNPROTECT, "unable to unprotect extensible array data block, address = %llu",
- (unsigned long long)dblock->addr)
- } /* end if */
+ HDONE_ERROR(H5E_EARRAY, H5E_CANTUNPROTECT, NULL,
+ "unable to unprotect extensible array data block, address = %llu",
+ (unsigned long long)dblock->addr)
+ }
-END_FUNC(PKG) /* end H5EA__dblock_protect() */
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5EA__dblock_protect() */
/*-------------------------------------------------------------------------
* Function: H5EA__dblock_unprotect
@@ -333,22 +352,26 @@ END_FUNC(PKG) /* end H5EA__dblock_protect() */
*
*-------------------------------------------------------------------------
*/
-BEGIN_FUNC(PKG, ERR, herr_t, SUCCEED, FAIL,
- H5EA__dblock_unprotect(H5EA_dblock_t *dblock, unsigned cache_flags))
+herr_t
+H5EA__dblock_unprotect(H5EA_dblock_t *dblock, unsigned cache_flags)
+{
+ herr_t ret_value = SUCCEED;
- /* Local variables */
+ FUNC_ENTER_PACKAGE
/* Sanity check */
HDassert(dblock);
/* Unprotect the data block */
if (H5AC_unprotect(dblock->hdr->f, H5AC_EARRAY_DBLOCK, dblock->addr, dblock, cache_flags) < 0)
- H5E_THROW(H5E_CANTUNPROTECT, "unable to unprotect extensible array data block, address = %llu",
- (unsigned long long)dblock->addr)
+ HGOTO_ERROR(H5E_EARRAY, H5E_CANTUNPROTECT, FAIL,
+ "unable to unprotect extensible array data block, address = %llu",
+ (unsigned long long)dblock->addr)
- CATCH
+done:
-END_FUNC(PKG) /* end H5EA__dblock_unprotect() */
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5EA__dblock_unprotect() */
/*-------------------------------------------------------------------------
* Function: H5EA__dblock_delete
@@ -362,11 +385,13 @@ END_FUNC(PKG) /* end H5EA__dblock_unprotect() */
*
*-------------------------------------------------------------------------
*/
-BEGIN_FUNC(PKG, ERR, herr_t, SUCCEED, FAIL,
- H5EA__dblock_delete(H5EA_hdr_t *hdr, void *parent, haddr_t dblk_addr, size_t dblk_nelmts))
+herr_t
+H5EA__dblock_delete(H5EA_hdr_t *hdr, void *parent, haddr_t dblk_addr, size_t dblk_nelmts)
+{
+ H5EA_dblock_t *dblock = NULL; /* Pointer to data block */
+ herr_t ret_value = SUCCEED;
- /* Local variables */
- H5EA_dblock_t *dblock = NULL; /* Pointer to data block */
+ FUNC_ENTER_PACKAGE
/* Sanity check */
HDassert(hdr);
@@ -376,8 +401,9 @@ BEGIN_FUNC(PKG, ERR, herr_t, SUCCEED, FAIL,
/* Protect data block */
if (NULL == (dblock = H5EA__dblock_protect(hdr, parent, dblk_addr, dblk_nelmts, H5AC__NO_FLAGS_SET)))
- H5E_THROW(H5E_CANTPROTECT, "unable to protect extensible array data block, address = %llu",
- (unsigned long long)dblk_addr)
+ HGOTO_ERROR(H5E_EARRAY, H5E_CANTPROTECT, FAIL,
+ "unable to protect extensible array data block, address = %llu",
+ (unsigned long long)dblk_addr)
/* Check if this is a paged data block */
if (dblk_nelmts > hdr->dblk_page_nelmts) {
@@ -395,20 +421,22 @@ BEGIN_FUNC(PKG, ERR, herr_t, SUCCEED, FAIL,
/* Evict the data block page from the metadata cache */
/* (OK to call if it doesn't exist in the cache) */
if (H5AC_expunge_entry(hdr->f, H5AC_EARRAY_DBLK_PAGE, dblk_page_addr, H5AC__NO_FLAGS_SET) < 0)
- H5E_THROW(H5E_CANTEXPUNGE, "unable to remove array data block page from metadata cache")
+ HGOTO_ERROR(H5E_EARRAY, H5E_CANTEXPUNGE, FAIL,
+ "unable to remove array data block page from metadata cache")
/* Advance to next page address */
dblk_page_addr += dblk_page_size;
} /* end for */
} /* end if */
- CATCH
+done:
/* Finished deleting data block in metadata cache */
if (dblock && H5EA__dblock_unprotect(dblock, H5AC__DIRTIED_FLAG | H5AC__DELETED_FLAG |
H5AC__FREE_FILE_SPACE_FLAG) < 0)
- H5E_THROW(H5E_CANTUNPROTECT, "unable to release extensible array data block")
+ HDONE_ERROR(H5E_EARRAY, H5E_CANTUNPROTECT, FAIL, "unable to release extensible array data block")
-END_FUNC(PKG) /* end H5EA__dblock_delete() */
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5EA__dblock_delete() */
/*-------------------------------------------------------------------------
* Function: H5EA__dblock_dest
@@ -422,7 +450,12 @@ END_FUNC(PKG) /* end H5EA__dblock_delete() */
*
*-------------------------------------------------------------------------
*/
-BEGIN_FUNC(PKG, ERR, herr_t, SUCCEED, FAIL, H5EA__dblock_dest(H5EA_dblock_t *dblock))
+herr_t
+H5EA__dblock_dest(H5EA_dblock_t *dblock)
+{
+ herr_t ret_value = SUCCEED;
+
+ FUNC_ENTER_PACKAGE
/* Sanity check */
HDassert(dblock);
@@ -435,14 +468,16 @@ BEGIN_FUNC(PKG, ERR, herr_t, SUCCEED, FAIL, H5EA__dblock_dest(H5EA_dblock_t *dbl
/* Free buffer for data block elements */
HDassert(dblock->nelmts > 0);
if (H5EA__hdr_free_elmts(dblock->hdr, dblock->nelmts, dblock->elmts) < 0)
- H5E_THROW(H5E_CANTFREE, "unable to free extensible array data block element buffer")
+ HGOTO_ERROR(H5E_EARRAY, H5E_CANTFREE, FAIL,
+ "unable to free extensible array data block element buffer")
dblock->elmts = NULL;
dblock->nelmts = 0;
} /* end if */
/* Decrement reference count on shared info */
if (H5EA__hdr_decr(dblock->hdr) < 0)
- H5E_THROW(H5E_CANTDEC, "can't decrement reference count on shared array header")
+ HGOTO_ERROR(H5E_EARRAY, H5E_CANTDEC, FAIL,
+ "can't decrement reference count on shared array header")
dblock->hdr = NULL;
} /* end if */
@@ -452,6 +487,6 @@ BEGIN_FUNC(PKG, ERR, herr_t, SUCCEED, FAIL, H5EA__dblock_dest(H5EA_dblock_t *dbl
/* Free the data block itself */
dblock = H5FL_FREE(H5EA_dblock_t, dblock);
- CATCH
-
-END_FUNC(PKG) /* end H5EA__dblock_dest() */
+done:
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5EA__dblock_dest() */