summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLarry Knox <lrknox@hdfgroup.org>2020-10-09 14:17:31 (GMT)
committerGitHub <noreply@github.com>2020-10-09 14:17:31 (GMT)
commitd4b1ee1d861686b97a887f47ff3857e338d3f690 (patch)
tree8e0de772d9992287c1b169fb3fdaee624ab63844
parent29874423bf155e23cfdc1920336c91674865f417 (diff)
parentd62e0753021df5510b97b38aa632ba570ca84275 (diff)
downloadhdf5-d4b1ee1d861686b97a887f47ff3857e338d3f690.zip
hdf5-d4b1ee1d861686b97a887f47ff3857e338d3f690.tar.gz
hdf5-d4b1ee1d861686b97a887f47ff3857e338d3f690.tar.bz2
Merge pull request #30 from byrnHDF/hdf5_1_12
Hdf5 1 12 merge changes from develop
-rw-r--r--Makefile.am8
-rw-r--r--config/cmake_ext_mod/ConfigureChecks.cmake1
-rw-r--r--config/cmake_ext_mod/HDFTests.c2
-rw-r--r--config/gnu-warnings/4.83
-rw-r--r--config/gnu-warnings/developer-4.81
-rw-r--r--config/gnu-warnings/error-general2
-rw-r--r--config/gnu-warnings/no-developer-4.81
-rw-r--r--configure.ac3
-rw-r--r--examples/h5_cmprss.c2
-rw-r--r--fortran/test/fortranlib_test.F902
-rw-r--r--hl/fortran/src/H5IMcc.c12
-rw-r--r--hl/fortran/src/H5IMfc.c24
-rw-r--r--hl/fortran/src/H5IMff.F9024
-rw-r--r--hl/fortran/src/H5LTfc.c24
-rw-r--r--hl/fortran/src/H5LTff.F9040
-rw-r--r--hl/fortran/src/H5TBfc.c18
-rw-r--r--hl/fortran/src/H5TBff.F9018
-rw-r--r--hl/src/H5DS.c97
-rw-r--r--hl/src/H5IM.c30
-rw-r--r--hl/src/H5LD.c4
-rw-r--r--hl/src/H5PT.c58
-rw-r--r--hl/src/H5TB.c55
-rw-r--r--hl/test/gen_test_ds.c2
-rw-r--r--hl/test/h5hltest.h2
-rw-r--r--hl/test/test_ds.c2
-rw-r--r--hl/test/test_dset_append.c4
-rw-r--r--hl/test/test_image.c4
-rw-r--r--hl/test/test_ld.c5
-rw-r--r--hl/test/test_lite.c2
-rw-r--r--hl/test/test_packet.c2
-rw-r--r--hl/test/test_table.c2
-rw-r--r--hl/tools/gif2h5/h52gifgentst.c2
-rw-r--r--hl/tools/h5watch/h5watch.c5
-rw-r--r--src/H5A.c23
-rw-r--r--src/H5AC.c35
-rw-r--r--src/H5ACmpio.c10
-rw-r--r--src/H5Abtree2.c9
-rw-r--r--src/H5B.c6
-rw-r--r--src/H5B2dbg.c15
-rw-r--r--src/H5B2test.c4
-rw-r--r--src/H5Bdbg.c11
-rw-r--r--src/H5C.c8687
-rw-r--r--src/H5Cdbg.c41
-rw-r--r--src/H5Cimage.c52
-rw-r--r--src/H5Cmpio.c46
-rw-r--r--src/H5Cpkg.h46
-rw-r--r--src/H5Cprivate.h10
-rw-r--r--src/H5Dbtree.c4
-rw-r--r--src/H5Dbtree2.c10
-rw-r--r--src/H5Dchunk.c7
-rw-r--r--src/H5Ddbg.c3
-rw-r--r--src/H5Ddeprec.c4
-rw-r--r--src/H5Dearray.c12
-rw-r--r--src/H5Dfarray.c12
-rw-r--r--src/H5Dmpio.c10
-rw-r--r--src/H5Dnone.c2
-rw-r--r--src/H5Dsingle.c2
-rw-r--r--src/H5E.c74
-rw-r--r--src/H5EA.c1220
-rw-r--r--src/H5EAcache.c2166
-rw-r--r--src/H5EAdbg.c549
-rw-r--r--src/H5EAdblkpage.c273
-rw-r--r--src/H5EAdblock.c480
-rw-r--r--src/H5EAhdr.c716
-rw-r--r--src/H5EAiblock.c537
-rw-r--r--src/H5EAint.c28
-rw-r--r--src/H5EAsblock.c422
-rw-r--r--src/H5EAstat.c16
-rw-r--r--src/H5EAtest.c270
-rw-r--r--src/H5Edeprec.c13
-rw-r--r--src/H5Eint.c33
-rw-r--r--src/H5F.c145
-rw-r--r--src/H5FA.c837
-rw-r--r--src/H5FAcache.c1116
-rw-r--r--src/H5FAdbg.c315
-rw-r--r--src/H5FAdblkpage.c260
-rw-r--r--src/H5FAdblock.c430
-rw-r--r--src/H5FAhdr.c428
-rw-r--r--src/H5FAint.c28
-rw-r--r--src/H5FAstat.c16
-rw-r--r--src/H5FAtest.c194
-rw-r--r--src/H5FDfamily.c4
-rw-r--r--src/H5FDhdfs.c75
-rw-r--r--src/H5FDhdfs.h10
-rw-r--r--src/H5FDlog.c70
-rw-r--r--src/H5FDs3comms.c7
-rw-r--r--src/H5FDstdio.c3
-rw-r--r--src/H5FSdbg.c19
-rw-r--r--src/H5Fdbg.c11
-rw-r--r--src/H5Fint.c144
-rw-r--r--src/H5Gent.c6
-rw-r--r--src/H5Gobj.c2
-rw-r--r--src/H5HFbtree2.c16
-rw-r--r--src/H5HFdbg.c86
-rw-r--r--src/H5HFdblock.c2
-rw-r--r--src/H5HL.c1211
-rw-r--r--src/H5HLdbg.c133
-rw-r--r--src/H5HLdblk.c244
-rw-r--r--src/H5HLint.c108
-rw-r--r--src/H5HLprfx.c70
-rw-r--r--src/H5I.c4
-rw-r--r--src/H5Ipublic.h6
-rw-r--r--src/H5MF.c4
-rw-r--r--src/H5MFdbg.c21
-rw-r--r--src/H5Oainfo.c16
-rw-r--r--src/H5Oattr.c14
-rw-r--r--src/H5Ocache_image.c5
-rw-r--r--src/H5Ocont.c2
-rw-r--r--src/H5Odbg.c19
-rw-r--r--src/H5Odrvinfo.c2
-rw-r--r--src/H5Odtype.c7
-rw-r--r--src/H5Oefl.c18
-rw-r--r--src/H5Ofill.c2
-rw-r--r--src/H5Oflush.c22
-rw-r--r--src/H5Ofsinfo.c17
-rw-r--r--src/H5Oint.c22
-rw-r--r--src/H5Olayout.c21
-rw-r--r--src/H5Olinfo.c19
-rw-r--r--src/H5Olink.c9
-rw-r--r--src/H5Opline.c6
-rw-r--r--src/H5Osdspace.c4
-rw-r--r--src/H5Oshared.c3
-rw-r--r--src/H5Oshmesg.c3
-rw-r--r--src/H5Ostab.c4
-rw-r--r--src/H5PLpath.c4
-rw-r--r--src/H5PLprivate.h4
-rw-r--r--src/H5Rint.c3
-rw-r--r--src/H5SM.c22
-rw-r--r--src/H5SMbtree2.c6
-rw-r--r--src/H5Smpio.c28
-rw-r--r--src/H5Snone.c2
-rw-r--r--src/H5T.c6
-rw-r--r--src/H5Tcommit.c23
-rw-r--r--src/H5Tconv.c10
-rw-r--r--src/H5Tdbg.c22
-rw-r--r--src/H5Tpkg.h3
-rw-r--r--src/H5Tprivate.h5
-rw-r--r--src/H5Tref.c34
-rw-r--r--src/H5VLint.c22
-rw-r--r--src/H5Z.c27
-rw-r--r--src/H5dbg.c25
-rw-r--r--src/H5private.h18
-rw-r--r--src/H5public.h131
-rw-r--r--src/H5system.c425
-rw-r--r--src/H5trace.c26
-rw-r--r--src/H5win32defs.h7
-rw-r--r--src/Makefile.am4
-rw-r--r--test/accum.c14
-rw-r--r--test/big.c6
-rw-r--r--test/cache.c374
-rw-r--r--test/cache_common.c15
-rw-r--r--test/cache_tagging.c3
-rw-r--r--test/chunk_info.c36
-rw-r--r--test/dsets.c7
-rw-r--r--test/dt_arith.c34
-rw-r--r--test/dtypes.c14
-rw-r--r--test/earray.c29
-rw-r--r--test/farray.c12
-rw-r--r--test/fheap.c30
-rw-r--r--test/fillval.c18
-rw-r--r--test/filter_plugin.c2
-rw-r--r--test/freespace.c15
-rw-r--r--test/gen_new_super.c12
-rw-r--r--test/gen_nullspace.c22
-rw-r--r--test/h5test.c36
-rw-r--r--test/hyperslab.c4
-rw-r--r--test/mf.c15
-rw-r--r--test/mirror_vfd.c4
-rw-r--r--test/ros3.c36
-rw-r--r--test/s3comms.c38
-rw-r--r--test/swmr.c10
-rw-r--r--test/vfd.c2
-rw-r--r--testpar/t_2Gio.c9
-rw-r--r--testpar/t_bigio.c35
-rw-r--r--testpar/t_cache.c60
-rw-r--r--testpar/t_cache_image.c10
-rw-r--r--testpar/t_filters_parallel.c134
-rw-r--r--testpar/t_shapesame.c12
-rw-r--r--tools/lib/h5diff_util.c4
-rw-r--r--tools/lib/h5tools_dump.c6
-rw-r--r--tools/src/h5dump/h5dump_ddl.c6
-rw-r--r--tools/src/h5dump/h5dump_xml.c4
-rw-r--r--tools/src/h5import/h5import.c2
-rw-r--r--tools/src/h5ls/h5ls.c13
-rw-r--r--tools/src/h5repack/h5repack.c2
-rw-r--r--tools/src/h5stat/h5stat.c82
-rw-r--r--tools/src/misc/h5clear.c2
-rw-r--r--tools/src/misc/h5debug.c2
-rw-r--r--tools/test/perform/chunk.c2
-rw-r--r--tools/test/perform/chunk_cache.c8
-rw-r--r--tools/test/perform/perf.c5
-rw-r--r--tools/test/perform/pio_standalone.h12
-rw-r--r--tools/test/perform/sio_engine.c2
-rw-r--r--tools/test/perform/sio_perf.c4
-rw-r--r--tools/test/perform/sio_standalone.h12
195 files changed, 12270 insertions, 12362 deletions
diff --git a/Makefile.am b/Makefile.am
index 8565788..9cb5d02 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -190,10 +190,10 @@ trace:
# Run tests with different Virtual File Drivers.
# Currently, only invoke check-vfd in the test directory.
check-vfd:
- for d in src utils test; do \
- if test $$d != .; then \
- (cd $$d && $(MAKE) $(AM_MAKEFLAGS) $@) || exit 1; \
- fi; \
+ for d in src utils test; do \
+ if test $$d != .; then \
+ (cd $$d && $(MAKE) $(AM_MAKEFLAGS) $@) || exit 1; \
+ fi; \
done
# Run tests with different passthrough Virtual Object Layer Connectors.
diff --git a/config/cmake_ext_mod/ConfigureChecks.cmake b/config/cmake_ext_mod/ConfigureChecks.cmake
index 0ddb6d0..7988772 100644
--- a/config/cmake_ext_mod/ConfigureChecks.cmake
+++ b/config/cmake_ext_mod/ConfigureChecks.cmake
@@ -69,6 +69,7 @@ if (MINGW)
set (WINDOWS 1) # MinGW tries to imitate Windows
set (CMAKE_REQUIRED_FLAGS "-DWIN32_LEAN_AND_MEAN=1 -DNOGDI=1")
set (${HDF_PREFIX}_HAVE_WINSOCK2_H 1)
+ set (__USE_MINGW_ANSI_STDIO 1)
endif ()
if (WIN32 AND NOT MINGW)
diff --git a/config/cmake_ext_mod/HDFTests.c b/config/cmake_ext_mod/HDFTests.c
index 31a568a..bed9444 100644
--- a/config/cmake_ext_mod/HDFTests.c
+++ b/config/cmake_ext_mod/HDFTests.c
@@ -178,7 +178,7 @@ int DebugReport(int reportType, char* message, int* returnValue)
int main(void)
{
- char *llwidthArgs[] = { "I64", "l64", "l", "L", "q", "ll", NULL };
+ char *llwidthArgs[] = { "I64", "l64", "ll", "l", "L", "q", NULL };
char *s = malloc(128);
char **currentArg = NULL;
LL_TYPE x = (LL_TYPE)1048576 * (LL_TYPE)1048576;
diff --git a/config/gnu-warnings/4.8 b/config/gnu-warnings/4.8
index c7e3dd1..05f4d92 100644
--- a/config/gnu-warnings/4.8
+++ b/config/gnu-warnings/4.8
@@ -9,6 +9,9 @@
# warning flag added for GCC >= 4.5
-Wstrict-overflow=5
+# This warning can only be truly addressed using the gcc extension of
+# using D to indicate doubles (e.g., 1.23D).
+-Wno-unsuffixed-float-constants
# warning flags added for GCC >= 4.6
-Wdouble-promotion
diff --git a/config/gnu-warnings/developer-4.8 b/config/gnu-warnings/developer-4.8
index fd76f6c..bfd15a1 100644
--- a/config/gnu-warnings/developer-4.8
+++ b/config/gnu-warnings/developer-4.8
@@ -5,7 +5,6 @@
# the variable is never *used* before it has been initialized?
#
-Wjump-misses-init
--Wunsuffixed-float-constants
# developer warning flag added for GCC >= 4.6
-Wsuggest-attribute=const
diff --git a/config/gnu-warnings/error-general b/config/gnu-warnings/error-general
index f0e61f8..4358b20 100644
--- a/config/gnu-warnings/error-general
+++ b/config/gnu-warnings/error-general
@@ -59,7 +59,7 @@
# jni/h5util.c
# -Werror=format(-overflow)
#
--Wformat
+-Werror=format
#
#
#Examples and tests do not use the same set of extensive warning flags as libraries
diff --git a/config/gnu-warnings/no-developer-4.8 b/config/gnu-warnings/no-developer-4.8
index 1e29c78..09a9a96 100644
--- a/config/gnu-warnings/no-developer-4.8
+++ b/config/gnu-warnings/no-developer-4.8
@@ -1,6 +1,5 @@
# no-developer warning flag added for GCC >= 4.5
-Wno-jump-misses-init
--Wno-unsuffixed-float-constants
# no-developer warning flag added for GCC >= 4.6
-Wno-suggest-attribute=const
diff --git a/configure.ac b/configure.ac
index 3b6eb1c..6e43f56 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1248,6 +1248,7 @@ case "$host_cpu-$host_vendor-$host_os" in
## VFD on Linux systems.
H5_CPPFLAGS="-D_GNU_SOURCE $H5_CPPFLAGS"
;;
+
esac
## Need to add the AM_ and H5_ into CFLAGS/CPPFLAGS to make them visible
@@ -2035,7 +2036,7 @@ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[
AC_MSG_CHECKING([how to print long long])
AC_CACHE_VAL([hdf5_cv_printf_ll], [
-for hdf5_cv_printf_ll in l ll L q unknown; do
+for hdf5_cv_printf_ll in ll l L q unknown; do
AC_RUN_IFELSE(
[AC_LANG_PROGRAM([
#include <stdio.h>
diff --git a/examples/h5_cmprss.c b/examples/h5_cmprss.c
index 7557cf5..bb77e28 100644
--- a/examples/h5_cmprss.c
+++ b/examples/h5_cmprss.c
@@ -99,7 +99,7 @@ main()
for (i = 0; i < numfilt; i++) {
nelmts = 0;
- filter_type = H5Pget_filter2(plist_id, 0, &flags, &nelmts, NULL, 0, NULL, &filter_info);
+ filter_type = H5Pget_filter2(plist_id, i, &flags, &nelmts, NULL, 0, NULL, &filter_info);
printf("Filter Type: ");
switch (filter_type) {
case H5Z_FILTER_DEFLATE:
diff --git a/fortran/test/fortranlib_test.F90 b/fortran/test/fortranlib_test.F90
index 92f9279..01baef5 100644
--- a/fortran/test/fortranlib_test.F90
+++ b/fortran/test/fortranlib_test.F90
@@ -183,7 +183,7 @@ PROGRAM fortranlibtest
CALL write_test_status(ret_total_error, ' Multi file driver test', total_error)
ret_total_error = 0
- CALL test_chunk_cache (cleanup, ret_total_error)
+ CALL test_chunk_cache(cleanup, ret_total_error)
CALL write_test_status(ret_total_error, ' Dataset chunk cache configuration', total_error)
!
diff --git a/hl/fortran/src/H5IMcc.c b/hl/fortran/src/H5IMcc.c
index 8a43589..fc29302 100644
--- a/hl/fortran/src/H5IMcc.c
+++ b/hl/fortran/src/H5IMcc.c
@@ -29,7 +29,7 @@ herr_t H5IM_get_palette(hid_t loc_id, const char *image_name, int pal_number, hi
*
* Return: Success: 0, Failure: -1
*
- * Programmer: Pedro Vicente Nunes, pvn@ncsa.uiuc.edu
+ * Programmer: Pedro Vicente Nunes
*
* Date: May 10, 2005
*
@@ -121,7 +121,7 @@ H5IMmake_image_8bitf(hid_t loc_id, const char *dset_name, hsize_t width, hsize_t
*
* Return: Success: 0, Failure: -1
*
- * Programmer: Pedro Vicente Nunes, pvn@ncsa.uiuc.edu
+ * Programmer: Pedro Vicente Nunes
*
* Date: May 10, 2005
*
@@ -236,7 +236,7 @@ H5IMmake_image_24bitf(hid_t loc_id, const char *dset_name, hsize_t width, hsize_
*
* Return: Success: 0, Failure: -1
*
- * Programmer: Pedro Vicente Nunes, pvn@ncsa.uiuc.edu
+ * Programmer: Pedro Vicente Nunes
*
* Date: May 10, 2005
*
@@ -292,7 +292,7 @@ out:
*
* Return: Success: 0, Failure: -1
*
- * Programmer: Pedro Vicente Nunes, pvn@ncsa.uiuc.edu
+ * Programmer: Pedro Vicente Nunes
*
* Date: May 10, 2005
*
@@ -385,7 +385,7 @@ H5IMmake_palettef(hid_t loc_id, const char *pal_name, const hsize_t *pal_dims, i
*
* Return: Success: 0, Failure: -1
*
- * Programmer: Pedro Vicente Nunes, pvn@ncsa.uiuc.edu
+ * Programmer: Pedro Vicente Nunes
*
* Date: May 10, 2005
*
@@ -421,7 +421,7 @@ H5IMget_palettef(hid_t loc_id, const char *image_name, int pal_number, int_f *pa
*
* Return: Success: 0, Failure: -1
*
- * Programmer: Pedro Vicente Nunes, pvn@ncsa.uiuc.edu
+ * Programmer: Pedro Vicente Nunes
*
* Date: May 10, 2005
*
diff --git a/hl/fortran/src/H5IMfc.c b/hl/fortran/src/H5IMfc.c
index f892e51..b01ed30 100644
--- a/hl/fortran/src/H5IMfc.c
+++ b/hl/fortran/src/H5IMfc.c
@@ -24,7 +24,7 @@
*
* Return: Success: 0, Failure: -1
*
- * Programmer: pvn@ncsa.uiuc.edu
+ * Programmer: Pedro Vicente
*
* Date: October 05, 2004
*
@@ -79,7 +79,7 @@ done:
*
* Return: Success: 0, Failure: -1
*
- * Programmer: pvn@ncsa.uiuc.edu
+ * Programmer: Pedro Vicente
*
* Date: October 05, 2004
*
@@ -129,7 +129,7 @@ done:
*
* Return: Success: 0, Failure: -1
*
- * Programmer: pvn@ncsa.uiuc.edu
+ * Programmer: Pedro Vicente
*
* Date: October 05, 2004
*
@@ -192,7 +192,7 @@ done:
*
* Return: Success: 0, Failure: -1
*
- * Programmer: pvn@ncsa.uiuc.edu
+ * Programmer: Pedro Vicente
*
* Date: October 05, 2004
*
@@ -269,7 +269,7 @@ done:
*
* Return: Success: 0, Failure: -1
*
- * Programmer: pvn@ncsa.uiuc.edu
+ * Programmer: Pedro Vicente
*
* Date: October 06, 2004
*
@@ -315,7 +315,7 @@ h5imis_image_c(hid_t_f *loc_id, size_t_f *namelen, _fcd name)
*
* Return: Success: 0, Failure: -1
*
- * Programmer: pvn@ncsa.uiuc.edu
+ * Programmer: Pedro Vicente
*
* Date: October 06, 2004
*
@@ -365,7 +365,7 @@ done:
*
* Return: Success: 0, Failure: -1
*
- * Programmer: pvn@ncsa.uiuc.edu
+ * Programmer: Pedro Vicente
*
* Date: October 06, 2004
*
@@ -425,7 +425,7 @@ done:
*
* Return: Success: 0, Failure: -1
*
- * Programmer: pvn@ncsa.uiuc.edu
+ * Programmer: Pedro Vicente
*
* Date: October 06, 2004
*
@@ -485,7 +485,7 @@ done:
*
* Return: Success: 0, Failure: -1
*
- * Programmer: pvn@ncsa.uiuc.edu
+ * Programmer: Pedro Vicente
*
* Date: October 06 2004
*
@@ -541,7 +541,7 @@ done:
*
* Return: Success: 0, Failure: -1
*
- * Programmer: pvn@ncsa.uiuc.edu
+ * Programmer: Pedro Vicente
*
* Date: October 06 2004
*
@@ -600,7 +600,7 @@ done:
*
* Return: Success: 0, Failure: -1
*
- * Programmer: pvn@ncsa.uiuc.edu
+ * Programmer: Pedro Vicente
*
* Date: October 06 2004
*
@@ -653,7 +653,7 @@ done:
*
* Return: true, false, fail
*
- * Programmer: pvn@ncsa.uiuc.edu
+ * Programmer: Pedro Vicente
*
* Date: October 06, 2004
*
diff --git a/hl/fortran/src/H5IMff.F90 b/hl/fortran/src/H5IMff.F90
index ffa18aa..3438e7f 100644
--- a/hl/fortran/src/H5IMff.F90
+++ b/hl/fortran/src/H5IMff.F90
@@ -41,7 +41,7 @@ CONTAINS
!
! Return: Success: 0, Failure: -1
!
-! Programmer: pvn@ncsa.uiuc.edu
+! Programmer: Pedro Vicente
!
! Date: October 05, 2004
!
@@ -95,7 +95,7 @@ CONTAINS
!
! Return: Success: 0, Failure: -1
!
-! Programmer: pvn@ncsa.uiuc.edu
+! Programmer: Pedro Vicente
!
! Date: October 05, 2004
!
@@ -142,7 +142,7 @@ CONTAINS
!
! Return: Success: 0, Failure: -1
!
-! Programmer: pvn@ncsa.uiuc.edu
+! Programmer: Pedro Vicente
!
! Date: October 05, 2004
!
@@ -204,7 +204,7 @@ CONTAINS
!
! Return: Success: 0, Failure: -1
!
-! Programmer: pvn@ncsa.uiuc.edu
+! Programmer: Pedro Vicente
!
! Date: October 05, 2004
!
@@ -267,7 +267,7 @@ CONTAINS
!
! Return: Success: 0, Failure: -1
!
-! Programmer: pvn@ncsa.uiuc.edu
+! Programmer: Pedro Vicente
!
! Date: October 05, 2004
!
@@ -313,7 +313,7 @@ CONTAINS
!
! Return: Success: 0, Failure: -1
!
-! Programmer: pvn@ncsa.uiuc.edu
+! Programmer: Pedro Vicente
!
! Date: October 06, 2004
!
@@ -364,7 +364,7 @@ CONTAINS
!
! Return: Success: 0, Failure: -1
!
-! Programmer: pvn@ncsa.uiuc.edu
+! Programmer: Pedro Vicente
!
! Date: October 06, 2004
!
@@ -416,7 +416,7 @@ CONTAINS
!
! Return: Success: 0, Failure: -1
!
-! Programmer: pvn@ncsa.uiuc.edu
+! Programmer: Pedro Vicente
!
! Date: October 06, 2004
!
@@ -467,7 +467,7 @@ CONTAINS
!
! Return: Success: 0, Failure: -1
!
-! Programmer: pvn@ncsa.uiuc.edu
+! Programmer: Pedro Vicente
!
! Date: October 05, 2004
!
@@ -516,7 +516,7 @@ CONTAINS
!
! Return: Success: 0, Failure: -1
!
-! Programmer: pvn@ncsa.uiuc.edu
+! Programmer: Pedro Vicente
!
! Date: October 06, 2004
!
@@ -567,7 +567,7 @@ CONTAINS
!
! Return: Success: 0, Failure: -1
!
-! Programmer: pvn@ncsa.uiuc.edu
+! Programmer: Pedro Vicente
!
! Date: October 06, 2004
!
@@ -619,7 +619,7 @@ CONTAINS
!
! Return: true, false, fail
!
-! Programmer: pvn@ncsa.uiuc.edu
+! Programmer: Pedro Vicente
!
! Date: October 06, 2004
!
diff --git a/hl/fortran/src/H5LTfc.c b/hl/fortran/src/H5LTfc.c
index afe6419..0813f66 100644
--- a/hl/fortran/src/H5LTfc.c
+++ b/hl/fortran/src/H5LTfc.c
@@ -24,7 +24,7 @@
*
* Return: Success: 0, Failure: -1
*
- * Programmer: pvn@ncsa.uiuc.edu
+ * Programmer: Pedro Vicente
*
* Date: September 09, 2004
*
@@ -88,7 +88,7 @@ done:
*
* Return: Success: 0, Failure: -1
*
- * Programmer: pvn@ncsa.uiuc.edu
+ * Programmer: Pedro Vicente
*
* Date: September 09, 2004
*
@@ -143,7 +143,7 @@ done:
*
* Return: Success: 0, Failure: -1
*
- * Programmer: pvn@ncsa.uiuc.edu
+ * Programmer: Pedro Vicente
*
* Date: September 09, 2004
*
@@ -203,7 +203,7 @@ done:
*
* Return: Success: 0, Failure: -1
*
- * Programmer: pvn@ncsa.uiuc.edu
+ * Programmer: Pedro Vicente
*
* Date: September 09, 2004
*
@@ -256,7 +256,7 @@ done:
*
* Return: Success: 0, Failure: -1
*
- * Programmer: pvn@ncsa.uiuc.edu
+ * Programmer: Pedro Vicente
*
* Date: October 05, 2004
*
@@ -358,7 +358,7 @@ done:
*
* Return: Success: 0, Failure: -1
*
- * Programmer: pvn@ncsa.uiuc.edu
+ * Programmer: Pedro Vicente
*
* Date: October 05, 2004
*
@@ -442,7 +442,7 @@ done:
*
* Return: Success: 0, Failure: -1
*
- * Programmer: pvn@ncsa.uiuc.edu
+ * Programmer: Pedro Vicente
*
* Date: October 05, 2004
*
@@ -512,7 +512,7 @@ done:
*
* Return: Success: 0, Failure: -1
*
- * Programmer: pvn@ncsa.uiuc.edu
+ * Programmer: Pedro Vicente
*
* Date: September 09, 2004
*
@@ -567,7 +567,7 @@ done:
*
* Return: Success: 0, Failure: -1
*
- * Programmer: pvn@ncsa.uiuc.edu
+ * Programmer: Pedro Vicente
*
* Date: September 09, 2004
*
@@ -613,7 +613,7 @@ h5ltfind_dataset_c(hid_t_f *loc_id, size_t_f *namelen, _fcd name)
*
* Return: Success: 0, Failure: -1
*
- * Programmer: pvn@ncsa.uiuc.edu
+ * Programmer: Pedro Vicente
*
* Date: September 09, 2004
*
@@ -686,7 +686,7 @@ done:
*
* Return: Success: 0, Failure: -1
*
- * Programmer: pvn@ncsa.uiuc.edu
+ * Programmer: Pedro Vicente
*
* Date: October 05, 2004
*
@@ -749,7 +749,7 @@ done:
*
* Return: Success: 0, Failure: -1
*
- * Programmer: pvn@ncsa.uiuc.edu
+ * Programmer: Pedro Vicente
*
* Date: September 09, 2004
*
diff --git a/hl/fortran/src/H5LTff.F90 b/hl/fortran/src/H5LTff.F90
index bc8734f..5cd255c 100644
--- a/hl/fortran/src/H5LTff.F90
+++ b/hl/fortran/src/H5LTff.F90
@@ -164,7 +164,7 @@ CONTAINS
!
! Return: Success: 0, Failure: -1
!
- ! Programmer: pvn@ncsa.uiuc.edu
+ ! Programmer: Pedro Vicente
!
! Date: September 1, 2004
!
@@ -385,7 +385,7 @@ CONTAINS
!
! Return: Success: 0, Failure: -1
!
- ! Programmer: pvn@ncsa.uiuc.edu
+ ! Programmer: Pedro Vicente
!
! Date: September 22, 2004
!
@@ -426,7 +426,7 @@ CONTAINS
!
! Return: Success: 0, Failure: -1
!
- ! Programmer: pvn@ncsa.uiuc.edu
+ ! Programmer: Pedro Vicente
!
! Date: September 22, 2004
!
@@ -595,7 +595,7 @@ CONTAINS
!
! Return: Success: 0, Failure: -1
!
- ! Programmer: pvn@ncsa.uiuc.edu
+ ! Programmer: Pedro Vicente
!
! Date: September 22, 2004
!
@@ -770,7 +770,7 @@ CONTAINS
!
! Return: Success: 0, Failure: -1
!
- ! Programmer: pvn@ncsa.uiuc.edu
+ ! Programmer: Pedro Vicente
!
! Date: September 22, 2004
!
@@ -933,7 +933,7 @@ CONTAINS
!
! Return: Success: 0, Failure: -1
!
- ! Programmer: pvn@ncsa.uiuc.edu
+ ! Programmer: Pedro Vicente
!
! Date: September 22, 2004
!
@@ -983,7 +983,7 @@ CONTAINS
!
! Return: Success: 0, Failure: -1
!
- ! Programmer: pvn@ncsa.uiuc.edu
+ ! Programmer: Pedro Vicente
!
! Date: September 22, 2004
!
@@ -1092,7 +1092,7 @@ CONTAINS
!
! Return: Success: 0, Failure: -1
!
- ! Programmer: pvn@ncsa.uiuc.edu
+ ! Programmer: Pedro Vicente
!
! Date: October 05, 2004
!
@@ -1143,7 +1143,7 @@ CONTAINS
!
! Return: Success: 0, Failure: -1
!
- ! Programmer: pvn@ncsa.uiuc.edu
+ ! Programmer: Pedro Vicente
!
! Date: October 05, 2004
!
@@ -1193,7 +1193,7 @@ CONTAINS
!
! Return: Success: 0, Failure: -1
!
- ! Programmer: pvn@ncsa.uiuc.edu
+ ! Programmer: Pedro Vicente
!
! Date: October 05, 2004
!
@@ -1245,7 +1245,7 @@ CONTAINS
!
! Return: Success: 0, Failure: -1
!
- ! Programmer: pvn@ncsa.uiuc.edu
+ ! Programmer: Pedro Vicente
!
! Date: October 05, 2004
!
@@ -1350,7 +1350,7 @@ CONTAINS
!
! Return: Success: 0, Failure: -1
!
- ! Programmer: pvn@ncsa.uiuc.edu
+ ! Programmer: Pedro Vicente
!
! Date: October 05, 2004
!
@@ -1397,7 +1397,7 @@ CONTAINS
!
! Return: Success: 0, Failure: -1
!
- ! Programmer: pvn@ncsa.uiuc.edu
+ ! Programmer: Pedro Vicente
!
! Date: October 05, 2004
!
@@ -1443,7 +1443,7 @@ CONTAINS
!
! Return: Success: 0, Failure: -1
!
- ! Programmer: pvn@ncsa.uiuc.edu
+ ! Programmer: Pedro Vicente
!
! Date: October 05, 2004
!
@@ -1490,7 +1490,7 @@ CONTAINS
!
! Return: Success: 0, Failure: -1
!
- ! Programmer: pvn@ncsa.uiuc.edu
+ ! Programmer: Pedro Vicente
!
! Date: October 05, 2004
!
@@ -1551,7 +1551,7 @@ CONTAINS
!
! Return: Success: 0, Failure: -1
!
- ! Programmer: pvn@ncsa.uiuc.edu
+ ! Programmer: Pedro Vicente
!
! Date: September 30, 2004
!
@@ -1600,7 +1600,7 @@ CONTAINS
!
! Return: Success: 0, Failure: -1
!
- ! Programmer: pvn@ncsa.uiuc.edu
+ ! Programmer: Pedro Vicente
!
! Date: October 05, 2004
!
@@ -1644,7 +1644,7 @@ CONTAINS
!
! Return: Success: 0, Failure: -1
!
- ! Programmer: pvn@ncsa.uiuc.edu
+ ! Programmer: Pedro Vicente
!
! Date: September 30, 2004
!
@@ -1703,7 +1703,7 @@ CONTAINS
!
! Return: Success: 0, Failure: -1
!
- ! Programmer: pvn@ncsa.uiuc.edu
+ ! Programmer: Pedro Vicente
!
! Date: October 05, 2004
!
@@ -1757,7 +1757,7 @@ CONTAINS
!
! Return: Success: 0, Failure: -1
!
- ! Programmer: pvn@ncsa.uiuc.edu
+ ! Programmer: Pedro Vicente
!
! Date: September 30, 2004
!
diff --git a/hl/fortran/src/H5TBfc.c b/hl/fortran/src/H5TBfc.c
index c95600b..35d31cc 100644
--- a/hl/fortran/src/H5TBfc.c
+++ b/hl/fortran/src/H5TBfc.c
@@ -26,7 +26,7 @@
*
* Return: Success: 0, Failure: -1
*
- * Programmer: pvn@ncsa.uiuc.edu
+ * Programmer: Pedro Vicente
*
* Date: October 06, 2004
*
@@ -296,7 +296,7 @@ done:
*
* Return: Success: 0, Failure: -1
*
- * Programmer: pvn@ncsa.uiuc.edu
+ * Programmer: Pedro Vicente
*
* Date: October 12, 2004
*
@@ -344,7 +344,7 @@ done:
*
* Return: Success: 0, Failure: -1
*
- * Programmer: pvn@ncsa.uiuc.edu
+ * Programmer: Pedro Vicente
*
* Date: October 12, 2004
*
@@ -392,7 +392,7 @@ done:
*
* Return: Success: 0, Failure: -1
*
- * Programmer: pvn@ncsa.uiuc.edu
+ * Programmer: Pedro Vicente
*
* Date: October 12, 2004
*
@@ -436,7 +436,7 @@ done:
*
* Return: Success: 0, Failure: -1
*
- * Programmer: pvn@ncsa.uiuc.edu
+ * Programmer: Pedro Vicente
*
* Date: October 12, 2004
*
@@ -480,7 +480,7 @@ done:
*
* Return: Success: 0, Failure: -1
*
- * Programmer: pvn@ncsa.uiuc.edu
+ * Programmer: Pedro Vicente
*
* Date: October 13, 2004
*
@@ -527,7 +527,7 @@ done:
*
* Return: Success: 0, Failure: -1
*
- * Programmer: pvn@ncsa.uiuc.edu
+ * Programmer: Pedro Vicente
*
* Date: October 13, 2004
*
@@ -572,7 +572,7 @@ done:
*
* Return: Success: 0, Failure: -1
*
- * Programmer: pvn@ncsa.uiuc.edu
+ * Programmer: Pedro Vicente
*
* Date: October 12, 2004
*
@@ -617,7 +617,7 @@ done:
*
* Return: Success: 0, Failure: -1
*
- * Programmer: pvn@ncsa.uiuc.edu
+ * Programmer: Pedro Vicente
*
* Date: October 13, 2004
*
diff --git a/hl/fortran/src/H5TBff.F90 b/hl/fortran/src/H5TBff.F90
index c3db01e..e39af97 100644
--- a/hl/fortran/src/H5TBff.F90
+++ b/hl/fortran/src/H5TBff.F90
@@ -172,7 +172,7 @@ CONTAINS
!
! Return: Success: 0, Failure: -1
!
-! Programmer: pvn@ncsa.uiuc.edu
+! Programmer: Pedro Vicente
!
! Date: October 06, 2004
!
@@ -424,7 +424,7 @@ CONTAINS
!
! Purpose: Writes one field
!
-! Programmer: pvn@ncsa.uiuc.edu
+! Programmer: Pedro Vicente
!
! Date: October 12, 2004
!
@@ -505,7 +505,7 @@ CONTAINS
!
! Purpose: Reads one field
!
-! Programmer: pvn@ncsa.uiuc.edu
+! Programmer: Pedro Vicente
!
! Date: October 12, 2004
!
@@ -586,7 +586,7 @@ CONTAINS
!
! Purpose: Writes one field
!
-! Programmer: pvn@ncsa.uiuc.edu
+! Programmer: Pedro Vicente
!
! Date: October 12, 2004
!
@@ -661,7 +661,7 @@ CONTAINS
!
! Purpose: Reads one field
!
-! Programmer: pvn@ncsa.uiuc.edu
+! Programmer: Pedro Vicente
!
! Date: October 12, 2004
!
@@ -734,7 +734,7 @@ CONTAINS
!
! Purpose: Inserts one field
!
-! Programmer: pvn@ncsa.uiuc.edu
+! Programmer: Pedro Vicente
!
! Date: October 13, 2004
!
@@ -807,7 +807,7 @@ CONTAINS
!
! Purpose: Inserts one field
!
-! Programmer: pvn@ncsa.uiuc.edu
+! Programmer: Pedro Vicente
!
! Date: October 13, 2004
!
@@ -858,7 +858,7 @@ CONTAINS
!
! Return: Success: 0, Failure: -1
!
-! Programmer: pvn@ncsa.uiuc.edu
+! Programmer: Pedro Vicente
!
! Date: October 13, 2004
!
@@ -909,7 +909,7 @@ CONTAINS
!
! Return: Success: 0, Failure: -1
!
-! Programmer: pvn@ncsa.uiuc.edu
+! Programmer: Pedro Vicente
!
! Date: October 13, 2004
!
diff --git a/hl/src/H5DS.c b/hl/src/H5DS.c
index e127fa2..216cf46 100644
--- a/hl/src/H5DS.c
+++ b/hl/src/H5DS.c
@@ -11,9 +11,6 @@
* help@hdfgroup.org. *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-#include <assert.h>
-#include <stdlib.h>
-#include <string.h>
#include "H5DSprivate.h"
#include "H5LTprivate.h"
#include "H5IMprivate.h"
@@ -34,17 +31,12 @@ static hid_t H5DS_get_REFLIST_type(void);
*
* Return: Success: SUCCEED, Failure: FAIL
*
- * Programmer: pvn@ncsa.uiuc.edu
+ * Programmer: Pedro Vicente
*
* Date: January 04, 2005
*
- * Comments:
- *
- * Modifications:
- *
*-------------------------------------------------------------------------
*/
-
herr_t
H5DSset_scale(hid_t dsid, const char *dimname)
{
@@ -105,17 +97,12 @@ H5DSset_scale(hid_t dsid, const char *dimname)
* If DSID is not a Dimension Scale
* If DID is a Dimension Scale (A Dimension Scale cannot have scales)
*
- * Programmer: pvn@ncsa.uiuc.edu
+ * Programmer: Pedro Vicente
*
* Date: December 20, 2004
*
- * Comments:
- *
- * Modifications:
- *
*-------------------------------------------------------------------------
*/
-
herr_t
H5DSattach_scale(hid_t did, hid_t dsid, unsigned int idx)
{
@@ -558,19 +545,12 @@ out:
* Note that a scale may be associated with more than dimension of the same dataset.
* If so, the detach operation only deletes one of the associations, for DID.
*
- * Programmer: pvn@ncsa.uiuc.edu
+ * Programmer: Pedro Vicente
*
* Date: December 20, 2004
*
- * Comments:
- *
- * Modifications: Function didn't delete DIMENSION_LIST attribute, when
- * all dimension scales were detached from a dataset; added.
- * 2010/05/13 EIP
- *
*-------------------------------------------------------------------------
*/
-
herr_t
H5DSdetach_scale(hid_t did, hid_t dsid, unsigned int idx)
{
@@ -944,17 +924,12 @@ out:
* If DSID is not a Dimension Scale
* If DID is a Dimension Scale (A Dimension Scale cannot have scales)
*
- * Programmer: pvn@ncsa.uiuc.edu
+ * Programmer: Pedro Vicente
*
* Date: February 18, 2005
*
- * Comments:
- *
- * Modifications:
- *
*-------------------------------------------------------------------------
*/
-
htri_t
H5DSis_attached(hid_t did, hid_t dsid, unsigned int idx)
{
@@ -1263,17 +1238,12 @@ out:
* C. Negative causes the iterator to immediately return that value,
* indicating failure.
*
- * Programmer: pvn@ncsa.uiuc.edu
+ * Programmer: Pedro Vicente
*
* Date: January 31, 2005
*
- * Comments:
- *
- * Modifications:
- *
*-------------------------------------------------------------------------
*/
-
herr_t
H5DSiterate_scales(hid_t did, unsigned int dim, int *ds_idx, H5DS_iterate_t visitor, void *visitor_data)
{
@@ -1433,17 +1403,12 @@ out:
*
* Return: Success: SUCCEED, Failure: FAIL
*
- * Programmer: pvn@ncsa.uiuc.edu
+ * Programmer: Pedro Vicente
*
* Date: January 11, 2005
*
- * Comments:
- *
- * Modifications:
- *
*-------------------------------------------------------------------------
*/
-
herr_t
H5DSset_label(hid_t did, unsigned int idx, const char *label)
{
@@ -1459,6 +1424,9 @@ H5DSset_label(hid_t did, unsigned int idx, const char *label)
char ** buf; /* discarding the 'const' qualifier in the free */
char const **const_buf; /* buf calls */
} u;
+
+ HDmemset(&u, 0, sizeof(u));
+
/*-------------------------------------------------------------------------
* parameter checking
*-------------------------------------------------------------------------
@@ -1638,16 +1606,10 @@ out:
*
* Return: 0 if no label found, size of label if found, Failure: FAIL
*
- * Programmer: pvn@ncsa.uiuc.edu
+ * Programmer: Pedro Vicente
*
* Date: January 11, 2005
*
- * Comments:
- *
- * Modifications:
- * JIRA HDFFV-7673: Added a check to see if the label name exists,
- * if not then returns zero. July 30, 2011. MSB
- *
*-------------------------------------------------------------------------
*/
ssize_t
@@ -1793,19 +1755,12 @@ out:
*
* Return: size of name if found, zero if not found, Failure: FAIL
*
- * Programmer: pvn@ncsa.uiuc.edu
+ * Programmer: Pedro Vicente
*
* Date: January 04, 2005
*
- * Comments:
- *
- * Modifications:
- * The size of the name returned should not include the NULL termination
- * in its value so as to be consistent with other HDF5 APIs.
- *
*-------------------------------------------------------------------------
*/
-
ssize_t
H5DSget_scale_name(hid_t did, char *name, size_t size)
{
@@ -1917,17 +1872,12 @@ out:
*
* Return: 1, is, 0, not, FAIL, error
*
- * Programmer: pvn@ncsa.uiuc.edu
+ * Programmer: Pedro Vicente
*
* Date: January 04, 2005
*
- * Comments:
- *
- * Modifications:
- *
*-------------------------------------------------------------------------
*/
-
htri_t
H5DSis_scale(hid_t did)
{
@@ -1939,7 +1889,7 @@ H5DSis_scale(hid_t did)
char * buf; /* Name of attribute */
hsize_t storage_size; /* Size of storage for attribute */
- /*-------------------------------------------------------------------------
+ /*------------------------------------------------------------------------
* parameter checking
*-------------------------------------------------------------------------
*/
@@ -2021,17 +1971,12 @@ out:
* Success: number of scales
* Failure: FAIL
*
- * Programmer: pvn@ncsa.uiuc.edu
+ * Programmer: Pedro Vicente
*
* Date: January 13, 2005
*
- * Comments:
- *
- * Modifications:
- *
*-------------------------------------------------------------------------
*/
-
int
H5DSget_num_scales(hid_t did, unsigned int idx)
{
@@ -2144,17 +2089,12 @@ out:
*
* Return: true, false, fail
*
- * Programmer: pvn@ncsa.uiuc.edu
+ * Programmer: Pedro Vicente
*
* Date: March 19, 2005
*
- * Comments:
- *
- * Modifications:
- *
*-------------------------------------------------------------------------
*/
-
static herr_t
H5DS_is_reserved(hid_t did)
{
@@ -2235,17 +2175,12 @@ out:
*
* Return: Type identifier on success and negative on failure
*
- * Programmer: epourmal@hdfgroup.org
+ * Programmer: Elena Pourmal
*
* Date: May 22, 2010
*
- * Comments:
- *
- * Modifications:
- *
*-------------------------------------------------------------------------
*/
-
static hid_t
H5DS_get_REFLIST_type(void)
{
diff --git a/hl/src/H5IM.c b/hl/src/H5IM.c
index e08d006..fb2ccb3 100644
--- a/hl/src/H5IM.c
+++ b/hl/src/H5IM.c
@@ -13,8 +13,6 @@
#include "H5IMprivate.h"
#include "H5LTprivate.h"
-#include <string.h>
-#include <stdlib.h>
/*-------------------------------------------------------------------------
* Function: H5IMmake_image_8bit
@@ -23,7 +21,7 @@
*
* Return: Success: 0, Failure: -1
*
- * Programmer: Pedro Vicente Nunes, pvn@ncsa.uiuc.edu
+ * Programmer: Pedro Vicente Nunes
*
* Date: June 13, 2001
*
@@ -75,7 +73,7 @@ H5IMmake_image_8bit(hid_t loc_id, const char *dset_name, hsize_t width, hsize_t
*
* Return: Success: 0, Failure: -1
*
- * Programmer: Pedro Vicente Nunes, pvn@ncsa.uiuc.edu
+ * Programmer: Pedro Vicente Nunes
*
* Date: June 13, 2001
*
@@ -151,7 +149,7 @@ H5IMmake_image_24bit(hid_t loc_id, const char *dset_name, hsize_t width, hsize_t
*
* Return:
*
- * Programmer: Pedro Vicente Nunes, pvn@ncsa.uiuc.edu
+ * Programmer: Pedro Vicente Nunes
*
* Date: May 28, 2001
*
@@ -192,7 +190,7 @@ find_palette(hid_t loc_id, const char *name, const H5A_info_t *ainfo, void *op_d
*
* Return: Success: 1, Failure: 0
*
- * Programmer: Pedro Vicente Nunes, pvn@ncsa.uiuc.edu
+ * Programmer: Pedro Vicente Nunes
*
* Date: May 11, 2001
*
@@ -218,7 +216,7 @@ H5IM_find_palette(hid_t loc_id)
*
* Return: Success: 0, Failure: -1
*
- * Programmer: Pedro Vicente Nunes, pvn@ncsa.uiuc.edu
+ * Programmer: Pedro Vicente Nunes
*
* Date: July 25, 2001
*
@@ -386,7 +384,7 @@ out:
*
* Return: Success: 0, Failure: -1
*
- * Programmer: Pedro Vicente Nunes, pvn@ncsa.uiuc.edu
+ * Programmer: Pedro Vicente Nunes
*
* Date: June 13, 2001
*
@@ -433,7 +431,7 @@ out:
*
* Return: Success: 0, Failure: -1
*
- * Programmer: Pedro Vicente Nunes, pvn@ncsa.uiuc.edu
+ * Programmer: Pedro Vicente Nunes
*
* Date: May 01, 2001
*
@@ -485,7 +483,7 @@ H5IMmake_palette(hid_t loc_id, const char *pal_name, const hsize_t *pal_dims, co
*
* Return: Success: 0, Failure: -1
*
- * Programmer: Pedro Vicente Nunes, pvn@ncsa.uiuc.edu
+ * Programmer: Pedro Vicente Nunes
*
* Date: May 01, 2001
*
@@ -655,7 +653,7 @@ out:
*
* Return: Success: 0, Failure: -1
*
- * Programmer: Pedro Vicente Nunes, pvn@ncsa.uiuc.edu
+ * Programmer: Pedro Vicente Nunes
*
* Date: September 10, 2001
*
@@ -752,7 +750,7 @@ out:
*
* Return: Success: 0, Failure: -1
*
- * Programmer: Pedro Vicente Nunes, pvn@ncsa.uiuc.edu
+ * Programmer: Pedro Vicente Nunes
*
* Date: July 22, 2001
*
@@ -837,7 +835,7 @@ out:
*
* Return: Success: 0, Failure: -1
*
- * Programmer: Pedro Vicente Nunes, pvn@ncsa.uiuc.edu
+ * Programmer: Pedro Vicente Nunes
*
* Date: July 22, 2001
*
@@ -946,7 +944,7 @@ out:
*
* Return: Success: 0, Failure: -1
*
- * Programmer: Pedro Vicente Nunes, pvn@ncsa.uiuc.edu
+ * Programmer: Pedro Vicente Nunes
*
* Date: August 30, 2001
*
@@ -1048,7 +1046,7 @@ out:
*
* Return: true, false, fail
*
- * Programmer: Pedro Vicente Nunes, pvn@ncsa.uiuc.edu
+ * Programmer: Pedro Vicente Nunes
*
* Date: August 30, 2001
*
@@ -1148,7 +1146,7 @@ out:
*
* Return: true, false, fail
*
- * Programmer: Pedro Vicente Nunes, pvn@ncsa.uiuc.edu
+ * Programmer: Pedro Vicente Nunes
*
* Date: August 30, 2001
*
diff --git a/hl/src/H5LD.c b/hl/src/H5LD.c
index 55c60dd..73043a5 100644
--- a/hl/src/H5LD.c
+++ b/hl/src/H5LD.c
@@ -11,10 +11,6 @@
* help@hdfgroup.org. *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-#include <string.h>
-#include <stdlib.h>
-#include <assert.h>
-#include <stdio.h>
#include "H5LDprivate.h"
/*-------------------------------------------------------------------------
diff --git a/hl/src/H5PT.c b/hl/src/H5PT.c
index f397365..7e18d33 100644
--- a/hl/src/H5PT.c
+++ b/hl/src/H5PT.c
@@ -11,8 +11,6 @@
* help@hdfgroup.org. *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-#include <stdlib.h>
-
#include "H5PTprivate.h"
#include "H5TBprivate.h"
@@ -52,8 +50,8 @@ static herr_t H5PT_get_index(htbl_t *table_id, hsize_t *pt_index);
*
* Return: Success: table ID, Failure: FAIL
*
- * Programmer: Nat Furrer, nfurrer@ncsa.uiuc.edu (Author of H5PTcreate_fl)
- * James Laird, jlaird@ncsa.uiuc.edu (Author of H5PTcreate_fl)
+ * Programmer: Nat Furrer (Author of H5PTcreate_fl)
+ * James Laird (Author of H5PTcreate_fl)
*
* Date: March 12, 2004
*
@@ -177,8 +175,8 @@ error:
*
* Return: Success: table ID, Failure: Negative
*
- * Programmer: Nat Furrer, nfurrer@ncsa.uiuc.edu
- * James Laird, jlaird@ncsa.uiuc.edu
+ * Programmer: Nat Furrer
+ * James Laird
*
* Date: March 12, 2004
*
@@ -293,8 +291,8 @@ error:
*
* Return: Success: table ID, Failure: Negative
*
- * Programmer: Nat Furrer, nfurrer@ncsa.uiuc.edu
- * James Laird, jlaird@ncsa.uiuc.edu
+ * Programmer: Nat Furrer
+ * James Laird
*
* Date: March 10, 2004
*
@@ -418,8 +416,8 @@ H5PT_free_id(void *id)
*
* Return: Success: SUCCEED, Failure: FAIL
*
- * Programmer: Nat Furrer, nfurrer@ncsa.uiuc.edu
- * James Laird, jlaird@ncsa.uiuc.edu
+ * Programmer: Nat Furrer
+ * James Laird
*
* Date: March 10, 2004
*
@@ -466,8 +464,8 @@ error:
*
* Return: Success: SUCCEED, Failure: FAIL
*
- * Programmer: Nat Furrer, nfurrer@ncsa.uiuc.edu
- * James Laird, jlaird@ncsa.uiuc.edu
+ * Programmer: Nat Furrer
+ * James Laird
*
* Date: April 21, 2004
*
@@ -520,8 +518,8 @@ error:
*
* Return: Success: SUCCEED, Failure: FAIL
*
- * Programmer: Nat Furrer, nfurrer@ncsa.uiuc.edu
- * James Laird, jlaird@ncsa.uiuc.edu
+ * Programmer: Nat Furrer
+ * James Laird
*
* Date: March 12, 2004
*
@@ -570,8 +568,8 @@ error:
*
* Return: Success: SUCCEED, Failure: FAIL
*
- * Programmer: Nat Furrer, nfurrer@ncsa.uiuc.edu
- * James Laird, jlaird@ncsa.uiuc.edu
+ * Programmer: Nat Furrer
+ * James Laird
*
* Date: March 10, 2004
*
@@ -614,8 +612,8 @@ error:
*
* Return: Success: SUCCEED, Failure: FAIL
*
- * Programmer: Nat Furrer, nfurrer@ncsa.uiuc.edu
- * James Laird, jlaird@ncsa.uiuc.edu
+ * Programmer: Nat Furrer
+ * James Laird
*
* Date: March 12, 2004
*
@@ -663,8 +661,8 @@ error:
*
* Return: Success: SUCCEED, Failure: FAIL
*
- * Programmer: Nat Furrer, nfurrer@ncsa.uiuc.edu
- * James Laird, jlaird@ncsa.uiuc.edu
+ * Programmer: Nat Furrer
+ * James Laird
*
* Date: March 12, 2004
*
@@ -716,8 +714,8 @@ H5PT_get_index(htbl_t *table, hsize_t *pt_index)
*
* Return: Success: SUCCEED, Failure: FAIL
*
- * Programmer: Nat Furrer, nfurrer@ncsa.uiuc.edu
- * James Laird, jlaird@ncsa.uiuc.edu
+ * Programmer: Nat Furrer
+ * James Laird
*
* Date: April 23, 2004
*
@@ -777,8 +775,8 @@ H5PTget_index(hid_t table_id, hsize_t *pt_index)
*
* Return: Success: SUCCEED, Failure: FAIL
*
- * Programmer: Nat Furrer, nfurrer@ncsa.uiuc.edu
- * James Laird, jlaird@ncsa.uiuc.edu
+ * Programmer: Nat Furrer
+ * James Laird
*
* Date: March 12, 2004
*
@@ -814,8 +812,8 @@ error:
*
* Return: Success: SUCCEED, Failure: FAIL
*
- * Programmer: Nat Furrer, nfurrer@ncsa.uiuc.edu
- * James Laird, jlaird@ncsa.uiuc.edu
+ * Programmer: Nat Furrer
+ * James Laird
*
* Date: March 12, 2004
*
@@ -844,8 +842,8 @@ H5PTis_valid(hid_t table_id)
*
* Return: True: 1, False: 0, Failure: FAIL
*
- * Programmer: Nat Furrer, nfurrer@ncsa.uiuc.edu
- * James Laird, jlaird@ncsa.uiuc.edu
+ * Programmer: Nat Furrer
+ * James Laird
*
* Date: April 14, 2004
*
@@ -894,8 +892,8 @@ error:
* Return: Success: SUCCEED, Failure: FAIL
* -2 if memory was reclaimed but another error occurred
*
- * Programmer: Nat Furrer, nfurrer@ncsa.uiuc.edu
- * James Laird, jlaird@ncsa.uiuc.edu
+ * Programmer: Nat Furrer
+ * James Laird
*
* Date: April 12, 2004
*
diff --git a/hl/src/H5TB.c b/hl/src/H5TB.c
index 5d51856..a3dfdae 100644
--- a/hl/src/H5TB.c
+++ b/hl/src/H5TB.c
@@ -11,9 +11,6 @@
* help@hdfgroup.org. *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-#include <stdlib.h>
-#include <string.h>
-
#include "H5LTprivate.h"
#include "H5TBprivate.h"
@@ -46,7 +43,7 @@ static hid_t H5TB_create_type(hid_t loc_id, const char *dset_name, size_t type_s
*
* Return: Success: 0, Failure: -1
*
- * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
+ * Programmer: Pedro Vicente
* Quincey Koziol
*
* Date: January 17, 2001
@@ -257,7 +254,7 @@ out:
* Return: Success: 0, Failure: -1
*
* Programmers:
- * Pedro Vicente, pvn@ncsa.uiuc.edu
+ * Pedro Vicente
* Quincey Koziol
*
* Date: November 19, 2001
@@ -323,7 +320,7 @@ out:
*
* Return: Success: 0, Failure: -1
*
- * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
+ * Programmer: Pedro Vicente
*
* Date: November 19, 2001
*
@@ -415,7 +412,7 @@ out:
*
* Return: Success: 0, Failure: -1
*
- * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
+ * Programmer: Pedro Vicente
*
* Date: November 21, 2001
*
@@ -573,7 +570,7 @@ out:
*
* Return: Success: 0, Failure: -1
*
- * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
+ * Programmer: Pedro Vicente
*
* Date: November 21, 2001
*
@@ -738,7 +735,7 @@ out:
*
* Return: Success: 0, Failure: -1
*
- * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
+ * Programmer: Pedro Vicente
*
* Date: November 20, 2001
*
@@ -811,7 +808,7 @@ out:
*
* Return: Success: 0, Failure: -1
*
- * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
+ * Programmer: Pedro Vicente
*
* Date: November 19, 2001
*
@@ -877,7 +874,7 @@ out:
*
* Return: Success: 0, Failure: -1
*
- * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
+ * Programmer: Pedro Vicente
*
* Date: November 19, 2001
*
@@ -1034,7 +1031,7 @@ out:
*
* Return: Success: 0, Failure: -1
*
- * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
+ * Programmer: Pedro Vicente
*
* Date: November 19, 2001
*
@@ -1192,7 +1189,7 @@ out:
*
* Return: Success: 0, Failure: -1
*
- * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
+ * Programmer: Pedro Vicente
*
* Date: November 26, 2001
*
@@ -1352,7 +1349,7 @@ out:
*
* Return: Success: 0, Failure: -1
*
- * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
+ * Programmer: Pedro Vicente
*
* Date: November 26, 2001
*
@@ -1504,7 +1501,7 @@ out:
*
* Return: Success: 0, Failure: -1
*
- * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
+ * Programmer: Pedro Vicente
*
* Date: December 5, 2001
*
@@ -1633,7 +1630,7 @@ out:
*
* Return: Success: 0, Failure: -1
*
- * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
+ * Programmer: Pedro Vicente
*
* Date: December 10, 2001
*
@@ -1989,7 +1986,7 @@ out:
*
* Return: Success: 0, Failure: -1
*
- * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
+ * Programmer: Pedro Vicente
*
* Date: January 30, 2002
*
@@ -2406,7 +2403,7 @@ out:
*
* Return: Success: 0, Failure: -1
*
- * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
+ * Programmer: Pedro Vicente
*
* Date: January 30, 2002
*
@@ -2858,7 +2855,7 @@ out:
*
* Return: Success: 0, Failure: -1
*
- * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
+ * Programmer: Pedro Vicente
*
* Date: January 30, 2001
*
@@ -2884,7 +2881,7 @@ H5TBAget_title(hid_t loc_id, char *table_title)
*
* Return: Success: TRUE/FALSE, Failure: -1
*
- * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
+ * Programmer: Pedro Vicente
*
* Date: January 30, 2002
*
@@ -2954,7 +2951,7 @@ out:
*
* Return: Success: 0, Failure: -1
*
- * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
+ * Programmer: Pedro Vicente
*
* Date: November 19, 2001
*
@@ -3039,7 +3036,7 @@ out:
*
* Return: Success: 0, Failure: -1
*
- * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
+ * Programmer: Pedro Vicente
*
* Date: November 19, 2001
*
@@ -3156,7 +3153,7 @@ out:
*
* Return: Success: TRUE/FALSE, Failure: N/A
*
- * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
+ * Programmer: Pedro Vicente
*
* Date: November 19, 2001
*
@@ -3197,7 +3194,7 @@ H5TB_find_field(const char *field, const char *field_list)
*
* Return: Success: 0, Failure: -1
*
- * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
+ * Programmer: Pedro Vicente
*
* Date: December 6, 2001
*
@@ -3258,7 +3255,7 @@ out:
*
* Return: Success: the memory type ID, Failure: -1
*
- * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
+ * Programmer: Pedro Vicente
*
* Date: March 31, 2004
*
@@ -3354,8 +3351,8 @@ out:
*
* Return: Success: 0, Failure: -1
*
- * Programmer: Nat Furrer, nfurrer@ncsa.uiuc.edu
- * James Laird, jlaird@ncsa.uiuc.edu
+ * Programmer: Nat Furrer
+ * James Laird
*
* Date: March 8, 2004
*
@@ -3419,8 +3416,8 @@ out:
*
* Return: Success: 0, Failure: -1
*
- * Programmer: Nat Furrer, nfurrer@ncsa.uiuc.edu
- * James Laird, jlaird@ncsa.uiuc.edu
+ * Programmer: Nat Furrer
+ * James Laird
*
* Date: March 8, 2004
*
diff --git a/hl/test/gen_test_ds.c b/hl/test/gen_test_ds.c
index 0138e19..27c3a0b 100644
--- a/hl/test/gen_test_ds.c
+++ b/hl/test/gen_test_ds.c
@@ -23,8 +23,6 @@
* in test_ds.c will read them.
*/
-#include <stdlib.h>
-#include <string.h>
#include "h5hltest.h"
#include "H5DSpublic.h"
#include "H5LTpublic.h"
diff --git a/hl/test/h5hltest.h b/hl/test/h5hltest.h
index d694f0c..4ccdd78 100644
--- a/hl/test/h5hltest.h
+++ b/hl/test/h5hltest.h
@@ -12,7 +12,7 @@
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/*
- * Programmer: Quincey Koziol <koziol@ncsa.uiuc.edu>
+ * Programmer: Quincey Koziol
* Friday, April 28, 2006
*
* Purpose: Test support stuff.
diff --git a/hl/test/test_ds.c b/hl/test/test_ds.c
index cd7f09d..9e56ff0 100644
--- a/hl/test/test_ds.c
+++ b/hl/test/test_ds.c
@@ -11,8 +11,6 @@
* help@hdfgroup.org. *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-#include <stdlib.h>
-#include <string.h>
#include "h5hltest.h"
#include "H5srcdir.h"
#include "H5DSpublic.h"
diff --git a/hl/test/test_dset_append.c b/hl/test/test_dset_append.c
index c5cffca..9c5efdd 100644
--- a/hl/test/test_dset_append.c
+++ b/hl/test/test_dset_append.c
@@ -11,10 +11,6 @@
* help@hdfgroup.org. *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-#include <math.h>
-#include <stdlib.h>
-#include <string.h>
-
#include "h5hltest.h"
#include "H5DOpublic.h"
diff --git a/hl/test/test_image.c b/hl/test/test_image.c
index 2eea47d..0cdb2d3 100644
--- a/hl/test/test_image.c
+++ b/hl/test/test_image.c
@@ -11,10 +11,6 @@
* help@hdfgroup.org. *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-#include <limits.h>
-#include <stdlib.h>
-#include <string.h>
-
#include "h5hltest.h"
#include "H5srcdir.h"
#include "H5LTpublic.h"
diff --git a/hl/test/test_ld.c b/hl/test/test_ld.c
index 28a0ba0..cc98fc9 100644
--- a/hl/test/test_ld.c
+++ b/hl/test/test_ld.c
@@ -11,11 +11,6 @@
* help@hdfgroup.org. *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <errno.h>
-#include <setjmp.h>
#include "h5hltest.h"
#include "H5srcdir.h"
#include "H5LDpublic.h"
diff --git a/hl/test/test_lite.c b/hl/test/test_lite.c
index a255e50..558211e 100644
--- a/hl/test/test_lite.c
+++ b/hl/test/test_lite.c
@@ -11,8 +11,6 @@
* help@hdfgroup.org. *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-#include <stdlib.h>
-#include <string.h>
#include "h5hltest.h"
#include "H5srcdir.h"
#include "H5LTpublic.h"
diff --git a/hl/test/test_packet.c b/hl/test/test_packet.c
index fe17d38..1224f0f 100644
--- a/hl/test/test_packet.c
+++ b/hl/test/test_packet.c
@@ -11,8 +11,6 @@
* help@hdfgroup.org. *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-#include <stdlib.h>
-#include <string.h>
#include "h5hltest.h"
#include "H5PTpublic.h"
#include "H5TBpublic.h"
diff --git a/hl/test/test_table.c b/hl/test/test_table.c
index 3f953d4..2f98f4a 100644
--- a/hl/test/test_table.c
+++ b/hl/test/test_table.c
@@ -11,8 +11,6 @@
* help@hdfgroup.org. *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-#include <stdlib.h>
-#include <string.h>
#include "h5hltest.h"
#include "H5srcdir.h"
#include "H5TBpublic.h"
diff --git a/hl/tools/gif2h5/h52gifgentst.c b/hl/tools/gif2h5/h52gifgentst.c
index 9bd7874..020fe26 100644
--- a/hl/tools/gif2h5/h52gifgentst.c
+++ b/hl/tools/gif2h5/h52gifgentst.c
@@ -22,7 +22,7 @@
*
* Purpose: generate files for h52gif testing
*
- * Programmer: Pedro Vicente, pvn@hdfgroup.org
+ * Programmer: Pedro Vicente
*
* Date: March 15, 2007
*
diff --git a/hl/tools/h5watch/h5watch.c b/hl/tools/h5watch/h5watch.c
index 9bf8047..0190545 100644
--- a/hl/tools/h5watch/h5watch.c
+++ b/hl/tools/h5watch/h5watch.c
@@ -182,7 +182,7 @@ doprint(hid_t did, hsize_t *start, hsize_t *block, int rank)
info.dset_format = "DSET-%s ";
info.dset_hidefileno = 0;
- info.obj_format = "-%lu:" H5_PRINTF_HADDR_FMT;
+ info.obj_format = "-%lu:%" PRIuHADDR;
info.obj_hidefileno = 0;
info.dset_blockformat_pre = "%sBlk%lu: ";
@@ -340,7 +340,8 @@ monitor_dataset(hid_t fid, char *dsetname)
if (i != ndims) {
/* Printing changes in dimension sizes */
for (u = 0; u < ndims; u++) {
- HDfprintf(stdout, "dimension %u: %Hu->%Hu", (unsigned)u, prev_dims[u], cur_dims[u]);
+ HDfprintf(stdout, "dimension %d: %" PRIuHSIZE "->%" PRIuHSIZE "", u, prev_dims[u],
+ cur_dims[u]);
if (cur_dims[u] > prev_dims[u])
HDfprintf(stdout, " (increases)\n");
else if (cur_dims[u] < prev_dims[u])
diff --git a/src/H5A.c b/src/H5A.c
index 282d0ed..7071f05 100644
--- a/src/H5A.c
+++ b/src/H5A.c
@@ -299,7 +299,7 @@ H5Acreate2(hid_t loc_id, const char *attr_name, hid_t type_id, hid_t space_id, h
/* Register the new attribute and get an ID for it */
if ((ret_value = H5VL_register(H5I_ATTR, attr, vol_obj->connector, TRUE)) < 0)
- HGOTO_ERROR(H5E_ATTR, H5E_CANTREGISTER, H5I_INVALID_HID, "unable to atomize attribute handle")
+ HGOTO_ERROR(H5E_ATTR, H5E_CANTREGISTER, H5I_INVALID_HID, "unable to register attribute for ID")
done:
/* Cleanup on failure */
@@ -387,7 +387,7 @@ H5Acreate_by_name(hid_t loc_id, const char *obj_name, const char *attr_name, hid
/* Register the new attribute and get an ID for it */
if ((ret_value = H5VL_register(H5I_ATTR, attr, vol_obj->connector, TRUE)) < 0)
- HGOTO_ERROR(H5E_ATTR, H5E_CANTREGISTER, H5I_INVALID_HID, "unable to atomize attribute handle")
+ HGOTO_ERROR(H5E_ATTR, H5E_CANTREGISTER, H5I_INVALID_HID, "unable to register attribute for ID")
done:
/* Cleanup on failure */
@@ -455,7 +455,7 @@ H5Aopen(hid_t loc_id, const char *attr_name, hid_t aapl_id)
/* Register the attribute and get an ID for it */
if ((ret_value = H5VL_register(H5I_ATTR, attr, vol_obj->connector, TRUE)) < 0)
- HGOTO_ERROR(H5E_ATTR, H5E_CANTREGISTER, H5I_INVALID_HID, "unable to atomize attribute handle")
+ HGOTO_ERROR(H5E_ATTR, H5E_CANTREGISTER, H5I_INVALID_HID, "unable to register attribute for ID")
done:
/* Cleanup on failure */
@@ -1004,7 +1004,7 @@ H5Aget_info(hid_t attr_id, H5A_info_t *ainfo)
FUNC_ENTER_API(FAIL)
H5TRACE2("e", "i*x", attr_id, ainfo);
- /* Check arguments */
+ /* Check args */
if (NULL == (vol_obj = (H5VL_object_t *)H5I_object_verify(attr_id, H5I_ATTR)))
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not an attribute")
if (!ainfo)
@@ -1145,7 +1145,8 @@ done:
*
* Purpose: Rename an attribute
*
- * Return: SUCCEED/FAIL
+ * Return: Success: Non-negative
+ * Failure: Negative
*
* Programmer: Raymond Lu
* October 23, 2002
@@ -1160,7 +1161,7 @@ H5Arename(hid_t loc_id, const char *old_name, const char *new_name)
FUNC_ENTER_API(FAIL)
H5TRACE3("e", "i*s*s", loc_id, old_name, new_name);
- /* check arguments */
+ /* Check arguments */
if (H5I_ATTR == H5I_get_type(loc_id))
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "location is not valid for an attribute")
if (!old_name)
@@ -1180,7 +1181,6 @@ H5Arename(hid_t loc_id, const char *old_name, const char *new_name)
loc_params.type = H5VL_OBJECT_BY_SELF;
loc_params.obj_type = H5I_get_type(loc_id);
- /* Get the location object */
if (NULL == (vol_obj = H5VL_vol_object(loc_id)))
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid location identifier")
@@ -1203,7 +1203,8 @@ done:
*
* Purpose: Rename an attribute
*
- * Return: SUCCEED/FAIL
+ * Return: Success: Non-negative
+ * Failure: Negative
*
* Programmer: Quincey Koziol
* February 20, 2007
@@ -1380,14 +1381,14 @@ herr_t
H5Aiterate_by_name(hid_t loc_id, const char *obj_name, H5_index_t idx_type, H5_iter_order_t order,
hsize_t *idx, H5A_operator2_t op, void *op_data, hid_t lapl_id)
{
- H5VL_object_t * vol_obj = NULL; /* object of loc_id */
+ H5VL_object_t * vol_obj = NULL; /* Object location */
H5VL_loc_params_t loc_params;
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API(FAIL)
H5TRACE8("e", "i*sIiIo*hx*xi", loc_id, obj_name, idx_type, order, idx, op, op_data, lapl_id);
- /* check arguments */
+ /* Check arguments */
if (H5I_ATTR == H5I_get_type(loc_id))
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "location is not valid for an attribute")
if (!obj_name || !*obj_name)
@@ -1590,7 +1591,7 @@ H5Adelete_by_idx(hid_t loc_id, const char *obj_name, H5_index_t idx_type, H5_ite
if (NULL == (vol_obj = H5VL_vol_object(loc_id)))
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid object identifier")
- /* Delete the attribute through the VOL */
+ /* Delete the attribute */
if (H5VL_attr_specific(vol_obj, &loc_params, H5VL_ATTR_DELETE, H5P_DATASET_XFER_DEFAULT, H5_REQUEST_NULL,
NULL) < 0)
HGOTO_ERROR(H5E_ATTR, H5E_CANTDELETE, FAIL, "unable to delete attribute")
diff --git a/src/H5AC.c b/src/H5AC.c
index 6664fbb..9777134 100644
--- a/src/H5AC.c
+++ b/src/H5AC.c
@@ -131,8 +131,8 @@ static const H5AC_class_t *const H5AC_class_s[] = {
*
* Purpose: Initialize the interface from some other layer.
*
- * Return: Success: non-negative
- * Failure: negative
+ * Return: Success: non-negative
+ * Failure: negative
*
* Programmer: Quincey Koziol
* Saturday, January 18, 2003
@@ -152,7 +152,7 @@ done:
} /* end H5AC_init() */
/*-------------------------------------------------------------------------
- * Function H5AC__init_package
+ * Function: H5AC__init_package
*
* Purpose: Initialize interface-specific information
*
@@ -191,9 +191,9 @@ H5AC__init_package(void)
*
* Purpose: Terminate this interface.
*
- * Return: Success: Positive if anything was done that might
- * affect other interfaces; zero otherwise.
- * Failure: Negative.
+ * Return: Success: Positive if anything was done that might
+ * affect other interfaces; zero otherwise.
+ * Failure: Negative.
*
* Programmer: Quincey Koziol
* Thursday, July 18, 2002
@@ -475,18 +475,23 @@ H5AC_dest(H5F_t *f)
/* Check if log messages are being emitted */
if (H5C_get_logging_status(f->shared->cache, &log_enabled, &curr_logging) < 0)
+
HGOTO_ERROR(H5E_CACHE, H5E_LOGGING, FAIL, "unable to get logging status")
if (log_enabled && curr_logging)
if (H5C_log_write_destroy_cache_msg(f->shared->cache) < 0)
+
HDONE_ERROR(H5E_CACHE, H5E_LOGGING, FAIL, "unable to emit log message")
/* Tear down logging */
if (log_enabled)
if (H5C_log_tear_down(f->shared->cache) < 0)
+
HGOTO_ERROR(H5E_CACHE, H5E_LOGGING, FAIL, "mdc logging tear-down failed")
#ifdef H5_HAVE_PARALLEL
+
/* destroying the cache, so clear all collective entries */
if (H5C_clear_coll_entries(f->shared->cache, FALSE) < 0)
+
HGOTO_ERROR(H5E_CACHE, H5E_CANTGET, FAIL, "H5C_clear_coll_entries() failed")
aux_ptr = (H5AC_aux_t *)H5C_get_aux_ptr(f->shared->cache);
@@ -507,25 +512,39 @@ H5AC_dest(H5F_t *f)
/* Destroy the cache */
if (H5C_dest(f) < 0)
+
HGOTO_ERROR(H5E_CACHE, H5E_CANTFREE, FAIL, "can't destroy cache")
+
f->shared->cache = NULL;
#ifdef H5_HAVE_PARALLEL
+
if (aux_ptr != NULL) {
+
if (aux_ptr->d_slist_ptr != NULL) {
+
HDassert(H5SL_count(aux_ptr->d_slist_ptr) == 0);
H5SL_close(aux_ptr->d_slist_ptr);
+
} /* end if */
+
if (aux_ptr->c_slist_ptr != NULL) {
+
HDassert(H5SL_count(aux_ptr->c_slist_ptr) == 0);
H5SL_close(aux_ptr->c_slist_ptr);
+
} /* end if */
+
if (aux_ptr->candidate_slist_ptr != NULL) {
+
HDassert(H5SL_count(aux_ptr->candidate_slist_ptr) == 0);
H5SL_close(aux_ptr->candidate_slist_ptr);
+
} /* end if */
+
aux_ptr->magic = 0;
aux_ptr = H5FL_FREE(H5AC_aux_t, aux_ptr);
+
} /* end if */
#endif /* H5_HAVE_PARALLEL */
@@ -2461,8 +2480,8 @@ H5AC_set_ring(H5AC_ring_t ring, H5AC_ring_t *orig_ring)
* Note that this function simply passes the call on to
* the metadata cache proper, and returns the result.
*
- * Return: Success: Non-negative
- * Failure: Negative
+ * Return: Success: Non-negative
+ * Failure: Negative
*
* Programmer: Quincey Koziol
* September 17, 2016
diff --git a/src/H5ACmpio.c b/src/H5ACmpio.c
index b5e1462..7ffa0bc 100644
--- a/src/H5ACmpio.c
+++ b/src/H5ACmpio.c
@@ -1879,6 +1879,7 @@ H5AC__rsp__p0_only__flush(H5F_t *f)
*/
if (!H5CX_get_mpi_file_flushing())
if (MPI_SUCCESS != (mpi_result = MPI_Barrier(aux_ptr->mpi_comm)))
+
HMPI_GOTO_ERROR(FAIL, "MPI_Barrier failed", mpi_result)
/* Flush data to disk, from rank 0 process */
@@ -1896,6 +1897,7 @@ H5AC__rsp__p0_only__flush(H5F_t *f)
/* Check for error on the write operation */
if (result < 0)
+
HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "Can't flush.")
/* this code exists primarily for the test bed -- it allows us to
@@ -1908,10 +1910,13 @@ H5AC__rsp__p0_only__flush(H5F_t *f)
/* Propagate cleaned entries to other ranks. */
if (H5AC__propagate_flushed_and_still_clean_entries_list(f) < 0)
+
HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "Can't propagate clean entries list.")
done:
+
FUNC_LEAVE_NOAPI(ret_value)
+
} /* H5AC__rsp__p0_only__flush() */
/*-------------------------------------------------------------------------
@@ -2076,9 +2081,13 @@ H5AC__run_sync_point(H5F_t *f, int sync_point_op)
/* Sanity checks */
HDassert(f != NULL);
+
cache_ptr = f->shared->cache;
+
HDassert(cache_ptr != NULL);
+
aux_ptr = (H5AC_aux_t *)H5C_get_aux_ptr(cache_ptr);
+
HDassert(aux_ptr != NULL);
HDassert(aux_ptr->magic == H5AC__H5AC_AUX_T_MAGIC);
HDassert((sync_point_op == H5AC_SYNC_POINT_OP__FLUSH_TO_MIN_CLEAN) ||
@@ -2158,6 +2167,7 @@ H5AC__run_sync_point(H5F_t *f, int sync_point_op)
#endif /* H5AC_DEBUG_DIRTY_BYTES_CREATION */
done:
+
FUNC_LEAVE_NOAPI(ret_value)
} /* H5AC__run_sync_point() */
diff --git a/src/H5Abtree2.c b/src/H5Abtree2.c
index cd5e926..0a1346f 100644
--- a/src/H5Abtree2.c
+++ b/src/H5Abtree2.c
@@ -364,9 +364,8 @@ H5A__dense_btree2_name_debug(FILE *stream, int indent, int fwidth, const void *_
FUNC_ENTER_STATIC_NOERR
- HDfprintf(stream, "%*s%-*s {%016Hx, %02x, %u, %08lx}\n", indent, "", fwidth,
- "Record:", (hsize_t)nrecord->id.val, (unsigned)nrecord->flags, (unsigned)nrecord->corder,
- (unsigned long)nrecord->hash);
+ HDfprintf(stream, "%*s%-*s {%016" PRIx64 ", %02" PRIx8 ", %u, %08" PRIx32 "}\n", indent, "", fwidth,
+ "Record:", nrecord->id.val, nrecord->flags, (unsigned)nrecord->corder, nrecord->hash);
FUNC_LEAVE_NOAPI(SUCCEED)
} /* H5A__dense_btree2_name_debug() */
@@ -516,8 +515,8 @@ H5A__dense_btree2_corder_debug(FILE *stream, int indent, int fwidth, const void
FUNC_ENTER_STATIC_NOERR
- HDfprintf(stream, "%*s%-*s {%016Hx, %02x, %u}\n", indent, "", fwidth, "Record:", (hsize_t)nrecord->id.val,
- (unsigned)nrecord->flags, (unsigned)nrecord->corder);
+ HDfprintf(stream, "%*s%-*s {%016" PRIx64 ", %02" PRIx8 ", %u}\n", indent, "", fwidth,
+ "Record:", nrecord->id.val, nrecord->flags, (unsigned)nrecord->corder);
FUNC_LEAVE_NOAPI(SUCCEED)
} /* H5A__dense_btree2_corder_debug() */
diff --git a/src/H5B.c b/src/H5B.c
index e38a14b..c92d429 100644
--- a/src/H5B.c
+++ b/src/H5B.c
@@ -13,9 +13,9 @@
/*-------------------------------------------------------------------------
*
- * Created: H5B.c
- * Jul 10 1997
- * Robb Matzke
+ * Created: H5B.c
+ * Jul 10 1997
+ * Robb Matzke
*
* Purpose: Implements balanced, sibling-linked, N-ary trees
* capable of storing any type of data with unique key
diff --git a/src/H5B2dbg.c b/src/H5B2dbg.c
index 988a626..b738d78 100644
--- a/src/H5B2dbg.c
+++ b/src/H5B2dbg.c
@@ -119,10 +119,12 @@ H5B2__hdr_debug(H5F_t *f, haddr_t addr, FILE *stream, int indent, int fwidth,
HDfprintf(stream, "%*s%-*s %s\n", indent, "", fwidth,
"Dirty flag:", hdr->cache_info.is_dirty ? "True" : "False");
HDfprintf(stream, "%*s%-*s %u\n", indent, "", fwidth, "Depth:", hdr->depth);
- HDfprintf(stream, "%*s%-*s %Hu\n", indent, "", fwidth, "Number of records in tree:", hdr->root.all_nrec);
+ HDfprintf(stream, "%*s%-*s %" PRIuHSIZE "\n", indent, "", fwidth,
+ "Number of records in tree:", hdr->root.all_nrec);
HDfprintf(stream, "%*s%-*s %u\n", indent, "", fwidth,
"Number of records in root node:", hdr->root.node_nrec);
- HDfprintf(stream, "%*s%-*s %a\n", indent, "", fwidth, "Address of root node:", hdr->root.addr);
+ HDfprintf(stream, "%*s%-*s %" PRIuHADDR "\n", indent, "", fwidth,
+ "Address of root node:", hdr->root.addr);
HDfprintf(stream, "%*s%-*s %u\n", indent, "", fwidth, "Split percent:", hdr->split_percent);
HDfprintf(stream, "%*s%-*s %u\n", indent, "", fwidth, "Merge percent:", hdr->merge_percent);
@@ -215,8 +217,8 @@ H5B2__int_debug(H5F_t *f, haddr_t addr, FILE *stream, int indent, int fwidth, co
for (u = 0; u < internal->nrec; u++) {
/* Print node pointer */
HDsnprintf(temp_str, sizeof(temp_str), "Node pointer #%u: (all/node/addr)", u);
- HDfprintf(stream, "%*s%-*s (%Hu/%u/%a)\n", indent + 3, "", MAX(0, fwidth - 3), temp_str,
- internal->node_ptrs[u].all_nrec, internal->node_ptrs[u].node_nrec,
+ HDfprintf(stream, "%*s%-*s (%" PRIuHSIZE "/%u/%" PRIuHADDR ")\n", indent + 3, "", MAX(0, fwidth - 3),
+ temp_str, internal->node_ptrs[u].all_nrec, internal->node_ptrs[u].node_nrec,
internal->node_ptrs[u].addr);
/* Print record */
@@ -229,8 +231,9 @@ H5B2__int_debug(H5F_t *f, haddr_t addr, FILE *stream, int indent, int fwidth, co
/* Print final node pointer */
HDsnprintf(temp_str, sizeof(temp_str), "Node pointer #%u: (all/node/addr)", u);
- HDfprintf(stream, "%*s%-*s (%Hu/%u/%a)\n", indent + 3, "", MAX(0, fwidth - 3), temp_str,
- internal->node_ptrs[u].all_nrec, internal->node_ptrs[u].node_nrec, internal->node_ptrs[u].addr);
+ HDfprintf(stream, "%*s%-*s (%" PRIuHSIZE "/%u/%" PRIuHADDR ")\n", indent + 3, "", MAX(0, fwidth - 3),
+ temp_str, internal->node_ptrs[u].all_nrec, internal->node_ptrs[u].node_nrec,
+ internal->node_ptrs[u].addr);
done:
if (hdr && H5B2__hdr_unprotect(hdr, H5AC__NO_FLAGS_SET) < 0)
diff --git a/src/H5B2test.c b/src/H5B2test.c
index e7c9f44..9f9d012 100644
--- a/src/H5B2test.c
+++ b/src/H5B2test.c
@@ -305,7 +305,7 @@ H5B2__test_debug(FILE *stream, int indent, int fwidth, const void *record, const
HDassert(record);
- HDfprintf(stream, "%*s%-*s %Hu\n", indent, "", fwidth, "Record:", *(const hsize_t *)record);
+ HDfprintf(stream, "%*s%-*s %" PRIuHSIZE "\n", indent, "", fwidth, "Record:", *(const hsize_t *)record);
FUNC_LEAVE_NOAPI(SUCCEED)
} /* H5B2__test_debug() */
@@ -435,7 +435,7 @@ H5B2__test2_debug(FILE *stream, int indent, int fwidth, const void *record, cons
HDassert(record);
- HDfprintf(stream, "%*s%-*s (%Hu, %Hu)\n", indent, "", fwidth,
+ HDfprintf(stream, "%*s%-*s (%" PRIuHSIZE ", %" PRIuHSIZE ")\n", indent, "", fwidth,
"Record:", ((const H5B2_test_rec_t *)record)->key, ((const H5B2_test_rec_t *)record)->val);
FUNC_LEAVE_NOAPI(SUCCEED)
diff --git a/src/H5Bdbg.c b/src/H5Bdbg.c
index 612d876..c27ab1c 100644
--- a/src/H5Bdbg.c
+++ b/src/H5Bdbg.c
@@ -95,13 +95,13 @@ H5B_debug(H5F_t *f, haddr_t addr, FILE *stream, int indent, int fwidth, const H5
((shared->type->id) == H5B_SNODE_ID
? "H5B_SNODE_ID"
: ((shared->type->id) == H5B_CHUNK_ID ? "H5B_CHUNK_ID" : "Unknown!")));
- HDfprintf(stream, "%*s%-*s %Zu\n", indent, "", fwidth, "Size of node:", shared->sizeof_rnode);
- HDfprintf(stream, "%*s%-*s %Zu\n", indent, "", fwidth, "Size of raw (disk) key:", shared->sizeof_rkey);
+ HDfprintf(stream, "%*s%-*s %zu\n", indent, "", fwidth, "Size of node:", shared->sizeof_rnode);
+ HDfprintf(stream, "%*s%-*s %zu\n", indent, "", fwidth, "Size of raw (disk) key:", shared->sizeof_rkey);
HDfprintf(stream, "%*s%-*s %s\n", indent, "", fwidth,
"Dirty flag:", bt->cache_info.is_dirty ? "True" : "False");
HDfprintf(stream, "%*s%-*s %u\n", indent, "", fwidth, "Level:", bt->level);
- HDfprintf(stream, "%*s%-*s %a\n", indent, "", fwidth, "Address of left sibling:", bt->left);
- HDfprintf(stream, "%*s%-*s %a\n", indent, "", fwidth, "Address of right sibling:", bt->right);
+ HDfprintf(stream, "%*s%-*s %" PRIuHADDR "\n", indent, "", fwidth, "Address of left sibling:", bt->left);
+ HDfprintf(stream, "%*s%-*s %" PRIuHADDR "\n", indent, "", fwidth, "Address of right sibling:", bt->right);
HDfprintf(stream, "%*s%-*s %u (%u)\n", indent, "", fwidth, "Number of children (max):", bt->nchildren,
shared->two_k);
@@ -110,7 +110,8 @@ H5B_debug(H5F_t *f, haddr_t addr, FILE *stream, int indent, int fwidth, const H5
*/
for (u = 0; u < bt->nchildren; u++) {
HDfprintf(stream, "%*sChild %d...\n", indent, "", u);
- HDfprintf(stream, "%*s%-*s %a\n", indent + 3, "", MAX(0, fwidth - 3), "Address:", bt->child[u]);
+ HDfprintf(stream, "%*s%-*s %" PRIuHADDR "\n", indent + 3, "", MAX(0, fwidth - 3),
+ "Address:", bt->child[u]);
/* If there is a key debugging routine, use it to display the left & right keys */
if (type->debug_key) {
diff --git a/src/H5C.c b/src/H5C.c
index 45cde7b..198557c 100644
--- a/src/H5C.c
+++ b/src/H5C.c
@@ -310,6 +310,10 @@ H5C_create(size_t max_cache_size, size_t min_clean_size, int max_type_id,
cache_ptr->slist_len = 0;
cache_ptr->slist_size = (size_t)0;
+ /* slist_ring_len, slist_ring_size, and
+ * slist_ptr initializaed above.
+ */
+
#if H5C_DO_SANITY_CHECKS
cache_ptr->slist_len_increase = 0;
cache_ptr->slist_size_increase = 0;
@@ -517,18 +521,18 @@ H5C_def_auto_resize_rpt_fcn(H5C_t *cache_ptr,
HDfprintf(stdout, "%sAuto cache resize -- hit rate (%lf) out of bounds low (%6.5lf).\n",
cache_ptr->prefix, hit_rate, (cache_ptr->resize_ctl).lower_hr_threshold);
- HDfprintf(stdout, "%scache size increased from (%Zu/%Zu) to (%Zu/%Zu).\n", cache_ptr->prefix,
+ HDfprintf(stdout, "%scache size increased from (%zu/%zu) to (%zu/%zu).\n", cache_ptr->prefix,
old_max_cache_size, old_min_clean_size, new_max_cache_size, new_min_clean_size);
break;
case flash_increase:
HDassert(old_max_cache_size < new_max_cache_size);
- HDfprintf(stdout, "%sflash cache resize(%d) -- size threshold = %Zu.\n", cache_ptr->prefix,
+ HDfprintf(stdout, "%sflash cache resize(%d) -- size threshold = %zu.\n", cache_ptr->prefix,
(int)((cache_ptr->resize_ctl).flash_incr_mode),
cache_ptr->flash_size_increase_threshold);
- HDfprintf(stdout, "%s cache size increased from (%Zu/%Zu) to (%Zu/%Zu).\n", cache_ptr->prefix,
+ HDfprintf(stdout, "%s cache size increased from (%zu/%zu) to (%zu/%zu).\n", cache_ptr->prefix,
old_max_cache_size, old_min_clean_size, new_max_cache_size, new_min_clean_size);
break;
@@ -569,7 +573,7 @@ H5C_def_auto_resize_rpt_fcn(H5C_t *cache_ptr,
cache_ptr->prefix, hit_rate);
}
- HDfprintf(stdout, "%s cache size decreased from (%Zu/%Zu) to (%Zu/%Zu).\n", cache_ptr->prefix,
+ HDfprintf(stdout, "%s cache size decreased from (%zu/%zu) to (%zu/%zu).\n", cache_ptr->prefix,
old_max_cache_size, old_min_clean_size, new_max_cache_size, new_min_clean_size);
break;
@@ -768,21 +772,31 @@ H5C_dest(H5F_t *f)
/* Flush and invalidate all cache entries */
if (H5C__flush_invalidate_cache(f, H5C__NO_FLAGS_SET) < 0)
+
HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "unable to flush cache")
/* Generate & write cache image if requested */
if (cache_ptr->image_ctl.generate_image)
if (H5C__generate_cache_image(f, cache_ptr) < 0)
+
HGOTO_ERROR(H5E_CACHE, H5E_CANTCREATE, FAIL, "Can't generate metadata cache image")
+ /* Question: Is it possible for cache_ptr->slist be non-null at this
+ * point? If no, shouldn't this if statement be an assert?
+ */
if (cache_ptr->slist_ptr != NULL) {
H5SL_close(cache_ptr->slist_ptr);
+
cache_ptr->slist_ptr = NULL;
+
} /* end if */
if (cache_ptr->tag_list != NULL) {
+
H5SL_destroy(cache_ptr->tag_list, H5C__free_tag_list_cb, NULL);
+
cache_ptr->tag_list = NULL;
+
} /* end if */
if (cache_ptr->log_info != NULL)
@@ -802,6 +816,7 @@ H5C_dest(H5F_t *f)
done:
FUNC_LEAVE_NOAPI(ret_value)
+
} /* H5C_dest() */
/*-------------------------------------------------------------------------
@@ -828,6 +843,7 @@ H5C_evict(H5F_t *f)
/* Flush and invalidate all cache entries except the pinned entries */
if (H5C__flush_invalidate_cache(f, H5C__EVICT_ALLOW_LAST_PINS_FLAG) < 0)
+
HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "unable to evict entries in the cache")
done:
@@ -838,8 +854,8 @@ done:
* Function: H5C_expunge_entry
*
* Purpose: Use this function to tell the cache to expunge an entry
- * from the cache without writing it to disk even if it is
- * dirty. The entry may not be either pinned or protected.
+ * from the cache without writing it to disk even if it is
+ * dirty. The entry may not be either pinned or protected.
*
* Return: Non-negative on success/Negative on failure
*
@@ -2759,8 +2775,8 @@ done:
* Programmer: John Mainzer
* 3/22/06
*
- * Changes: Added extreme sanity checks on entry and exit.
- JRM -- 4/26/14
+ * Changes: Added extreme sanity checks on entry and exit.
+ * JRM -- 4/26/14
*
*-------------------------------------------------------------------------
*/
@@ -2880,6 +2896,7 @@ H5C_unprotect(H5F_t *f, haddr_t addr, void *thing, unsigned flags)
#if H5C_DO_EXTREME_SANITY_CHECKS
if ((H5C__validate_protected_entry_list(cache_ptr) < 0) ||
(H5C__validate_pinned_entry_list(cache_ptr) < 0) || (H5C__validate_lru_list(cache_ptr) < 0))
+
HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "an extreme sanity check failed on entry")
#endif /* H5C_DO_EXTREME_SANITY_CHECKS */
@@ -2888,11 +2905,13 @@ H5C_unprotect(H5F_t *f, haddr_t addr, void *thing, unsigned flags)
* drops to zero.
*/
if (entry_ptr->ro_ref_count > 1) {
+
/* Sanity check */
HDassert(entry_ptr->is_protected);
HDassert(entry_ptr->is_read_only);
if (dirtied)
+
HGOTO_ERROR(H5E_CACHE, H5E_CANTUNPROTECT, FAIL, "Read only entry modified??")
/* Reduce the RO ref count */
@@ -2900,26 +2919,35 @@ H5C_unprotect(H5F_t *f, haddr_t addr, void *thing, unsigned flags)
/* Pin or unpin the entry as requested. */
if (pin_entry) {
+
/* Pin the entry from a client */
if (H5C__pin_entry_from_client(cache_ptr, entry_ptr) < 0)
+
HGOTO_ERROR(H5E_CACHE, H5E_CANTPIN, FAIL, "Can't pin entry by client")
}
else if (unpin_entry) {
+
/* Unpin the entry from a client */
if (H5C__unpin_entry_from_client(cache_ptr, entry_ptr, FALSE) < 0)
+
HGOTO_ERROR(H5E_CACHE, H5E_CANTUNPIN, FAIL, "Can't unpin entry by client")
+
} /* end if */
}
else {
+
if (entry_ptr->is_read_only) {
+
/* Sanity check */
HDassert(entry_ptr->ro_ref_count == 1);
if (dirtied)
+
HGOTO_ERROR(H5E_CACHE, H5E_CANTUNPROTECT, FAIL, "Read only entry modified??")
entry_ptr->is_read_only = FALSE;
entry_ptr->ro_ref_count = 0;
+
} /* end if */
#ifdef H5_HAVE_PARALLEL
@@ -2949,6 +2977,7 @@ H5C_unprotect(H5F_t *f, haddr_t addr, void *thing, unsigned flags)
#endif /* H5_HAVE_PARALLEL */
if (!entry_ptr->is_protected)
+
HGOTO_ERROR(H5E_CACHE, H5E_CANTUNPROTECT, FAIL, "Entry already unprotected??")
/* Mark the entry as dirty if appropriate */
@@ -2956,20 +2985,24 @@ H5C_unprotect(H5F_t *f, haddr_t addr, void *thing, unsigned flags)
if (dirtied)
if (entry_ptr->image_up_to_date) {
+
entry_ptr->image_up_to_date = FALSE;
if (entry_ptr->flush_dep_nparents > 0)
if (H5C__mark_flush_dep_unserialized(entry_ptr) < 0)
+
HGOTO_ERROR(H5E_CACHE, H5E_CANTNOTIFY, FAIL,
"Can't propagate serialization status to fd parents")
} /* end if */
/* Check for newly dirtied entry */
if (was_clean && entry_ptr->is_dirty) {
+
/* Update index for newly dirtied entry */
H5C__UPDATE_INDEX_FOR_ENTRY_DIRTY(cache_ptr, entry_ptr)
- /* If the entry's type has a 'notify' callback send a 'entry dirtied'
- * notice now that the entry is fully integrated into the cache.
+ /* If the entry's type has a 'notify' callback send a
+ * 'entry dirtied' notice now that the entry is fully
+ * integrated into the cache.
*/
if (entry_ptr->type->notify &&
(entry_ptr->type->notify)(H5C_NOTIFY_ACTION_ENTRY_DIRTIED, entry_ptr) < 0)
@@ -2979,12 +3012,15 @@ H5C_unprotect(H5F_t *f, haddr_t addr, void *thing, unsigned flags)
* if appropriate */
if (entry_ptr->flush_dep_nparents > 0)
if (H5C__mark_flush_dep_dirty(entry_ptr) < 0)
+
HGOTO_ERROR(H5E_CACHE, H5E_CANTMARKDIRTY, FAIL, "Can't propagate flush dep dirty flag")
} /* end if */
/* Check for newly clean entry */
else if (!was_clean && !entry_ptr->is_dirty) {
- /* If the entry's type has a 'notify' callback send a 'entry cleaned'
- * notice now that the entry is fully integrated into the cache.
+
+ /* If the entry's type has a 'notify' callback send a
+ * 'entry cleaned' notice now that the entry is fully
+ * integrated into the cache.
*/
if (entry_ptr->type->notify &&
(entry_ptr->type->notify)(H5C_NOTIFY_ACTION_ENTRY_CLEANED, entry_ptr) < 0)
@@ -2995,18 +3031,23 @@ H5C_unprotect(H5F_t *f, haddr_t addr, void *thing, unsigned flags)
* if appropriate */
if (entry_ptr->flush_dep_nparents > 0)
if (H5C__mark_flush_dep_clean(entry_ptr) < 0)
+
HGOTO_ERROR(H5E_CACHE, H5E_CANTMARKDIRTY, FAIL, "Can't propagate flush dep dirty flag")
} /* end else-if */
/* Pin or unpin the entry as requested. */
if (pin_entry) {
+
/* Pin the entry from a client */
if (H5C__pin_entry_from_client(cache_ptr, entry_ptr) < 0)
+
HGOTO_ERROR(H5E_CACHE, H5E_CANTPIN, FAIL, "Can't pin entry by client")
}
else if (unpin_entry) {
+
/* Unpin the entry from a client */
if (H5C__unpin_entry_from_client(cache_ptr, entry_ptr, FALSE) < 0)
+
HGOTO_ERROR(H5E_CACHE, H5E_CANTUNPIN, FAIL, "Can't unpin entry by client")
} /* end if */
@@ -3021,6 +3062,7 @@ H5C_unprotect(H5F_t *f, haddr_t addr, void *thing, unsigned flags)
* and then add it to the skip list if it isn't there already.
*/
if (entry_ptr->is_dirty) {
+
entry_ptr->flush_marker |= set_flush_marker;
if (!entry_ptr->in_slist)
H5C__INSERT_ENTRY_IN_SLIST(cache_ptr, entry_ptr, FAIL)
@@ -3036,13 +3078,18 @@ H5C_unprotect(H5F_t *f, haddr_t addr, void *thing, unsigned flags)
* JRM - 5/19/04
*/
if (deleted) {
+
unsigned flush_flags = (H5C__FLUSH_CLEAR_ONLY_FLAG | H5C__FLUSH_INVALIDATE_FLAG);
/* verify that the target entry is in the cache. */
H5C__SEARCH_INDEX(cache_ptr, addr, test_entry_ptr, FAIL)
+
if (test_entry_ptr == NULL)
+
HGOTO_ERROR(H5E_CACHE, H5E_CANTUNPROTECT, FAIL, "entry not in hash table?!?")
+
else if (test_entry_ptr != entry_ptr)
+
HGOTO_ERROR(H5E_CACHE, H5E_CANTUNPROTECT, FAIL,
"hash table contains multiple entries for addr?!?")
@@ -3059,22 +3106,29 @@ H5C_unprotect(H5F_t *f, haddr_t addr, void *thing, unsigned flags)
HDassert(((!was_clean) || dirtied) == entry_ptr->in_slist);
if (H5C__flush_single_entry(f, entry_ptr, flush_flags) < 0)
+
HGOTO_ERROR(H5E_CACHE, H5E_CANTUNPROTECT, FAIL, "Can't flush entry")
+
} /* end if */
#ifdef H5_HAVE_PARALLEL
else if (clear_entry) {
/* verify that the target entry is in the cache. */
H5C__SEARCH_INDEX(cache_ptr, addr, test_entry_ptr, FAIL)
+
if (test_entry_ptr == NULL)
+
HGOTO_ERROR(H5E_CACHE, H5E_CANTUNPROTECT, FAIL, "entry not in hash table?!?")
+
else if (test_entry_ptr != entry_ptr)
+
HGOTO_ERROR(H5E_CACHE, H5E_CANTUNPROTECT, FAIL,
"hash table contains multiple entries for addr?!?")
if (H5C__flush_single_entry(f, entry_ptr,
H5C__FLUSH_CLEAR_ONLY_FLAG | H5C__DEL_FROM_SLIST_ON_DESTROY_FLAG) < 0)
HGOTO_ERROR(H5E_CACHE, H5E_CANTUNPROTECT, FAIL, "Can't clear entry")
+
} /* end else if */
#endif /* H5_HAVE_PARALLEL */
}
@@ -3082,580 +3136,583 @@ H5C_unprotect(H5F_t *f, haddr_t addr, void *thing, unsigned flags)
H5C__UPDATE_STATS_FOR_UNPROTECT(cache_ptr)
done:
+
#if H5C_DO_EXTREME_SANITY_CHECKS
if ((H5C__validate_protected_entry_list(cache_ptr) < 0) ||
- (H5C__validate_pinned_entry_list(cache_ptr) < 0) || (H5C__validate_lru_list(cache_ptr) < 0)) {
+ (H5C__validate_pinned_entry_list(cache_ptr) < 0) || (H5C__validate_lru_list(cache_ptr) < 0))
+
HDONE_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "an extreme sanity check failed on exit")
#endif /* H5C_DO_EXTREME_SANITY_CHECKS */
- FUNC_LEAVE_NOAPI(ret_value)
- } /* H5C_unprotect() */
+ FUNC_LEAVE_NOAPI(ret_value)
+
+} /* H5C_unprotect() */
- /*-------------------------------------------------------------------------
- *
- * Function: H5C_unsettle_entry_ring
- *
- * Purpose: Advise the metadata cache that the specified entry's free space
- * manager ring is no longer settled (if it was on entry).
- *
- * If the target free space manager ring is already
- * unsettled, do nothing, and return SUCCEED.
- *
- * If the target free space manager ring is settled, and
- * we are not in the process of a file shutdown, mark
- * the ring as unsettled, and return SUCCEED.
- *
- * If the target free space manager is settled, and we
- * are in the process of a file shutdown, post an error
- * message, and return FAIL.
- *
- * Return: Non-negative on success/Negative on failure
- *
- * Programmer: Quincey Koziol
- * January 3, 2017
- *
- *-------------------------------------------------------------------------
- */
- herr_t H5C_unsettle_entry_ring(void *_entry)
- {
- H5C_cache_entry_t *entry = (H5C_cache_entry_t *)_entry; /* Entry whose ring to unsettle */
- H5C_t * cache; /* Cache for file */
- herr_t ret_value = SUCCEED; /* Return value */
+/*-------------------------------------------------------------------------
+ *
+ * Function: H5C_unsettle_entry_ring
+ *
+ * Purpose: Advise the metadata cache that the specified entry's free space
+ * manager ring is no longer settled (if it was on entry).
+ *
+ * If the target free space manager ring is already
+ * unsettled, do nothing, and return SUCCEED.
+ *
+ * If the target free space manager ring is settled, and
+ * we are not in the process of a file shutdown, mark
+ * the ring as unsettled, and return SUCCEED.
+ *
+ * If the target free space manager is settled, and we
+ * are in the process of a file shutdown, post an error
+ * message, and return FAIL.
+ *
+ * Return: Non-negative on success/Negative on failure
+ *
+ * Programmer: Quincey Koziol
+ * January 3, 2017
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5C_unsettle_entry_ring(void *_entry)
+{
+ H5C_cache_entry_t *entry = (H5C_cache_entry_t *)_entry; /* Entry whose ring to unsettle */
+ H5C_t * cache; /* Cache for file */
+ herr_t ret_value = SUCCEED; /* Return value */
- FUNC_ENTER_NOAPI(FAIL)
+ FUNC_ENTER_NOAPI(FAIL)
- /* Sanity checks */
- HDassert(entry);
- HDassert(entry->ring != H5C_RING_UNDEFINED);
- HDassert((H5C_RING_USER == entry->ring) || (H5C_RING_RDFSM == entry->ring) ||
- (H5C_RING_MDFSM == entry->ring));
- cache = entry->cache_ptr;
- HDassert(cache);
- HDassert(cache->magic == H5C__H5C_T_MAGIC);
-
- switch (entry->ring) {
- case H5C_RING_USER:
- /* Do nothing */
- break;
+ /* Sanity checks */
+ HDassert(entry);
+ HDassert(entry->ring != H5C_RING_UNDEFINED);
+ HDassert((H5C_RING_USER == entry->ring) || (H5C_RING_RDFSM == entry->ring) ||
+ (H5C_RING_MDFSM == entry->ring));
+ cache = entry->cache_ptr;
+ HDassert(cache);
+ HDassert(cache->magic == H5C__H5C_T_MAGIC);
+
+ switch (entry->ring) {
+ case H5C_RING_USER:
+ /* Do nothing */
+ break;
- case H5C_RING_RDFSM:
- if (cache->rdfsm_settled) {
- if (cache->flush_in_progress || cache->close_warning_received)
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "unexpected rdfsm ring unsettle")
- cache->rdfsm_settled = FALSE;
- } /* end if */
- break;
+ case H5C_RING_RDFSM:
+ if (cache->rdfsm_settled) {
+ if (cache->flush_in_progress || cache->close_warning_received)
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "unexpected rdfsm ring unsettle")
+ cache->rdfsm_settled = FALSE;
+ } /* end if */
+ break;
- case H5C_RING_MDFSM:
- if (cache->mdfsm_settled) {
- if (cache->flush_in_progress || cache->close_warning_received)
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "unexpected mdfsm ring unsettle")
- cache->mdfsm_settled = FALSE;
- } /* end if */
- break;
+ case H5C_RING_MDFSM:
+ if (cache->mdfsm_settled) {
+ if (cache->flush_in_progress || cache->close_warning_received)
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "unexpected mdfsm ring unsettle")
+ cache->mdfsm_settled = FALSE;
+ } /* end if */
+ break;
- default:
- HDassert(FALSE); /* this should be un-reachable */
- break;
- } /* end switch */
+ default:
+ HDassert(FALSE); /* this should be un-reachable */
+ break;
+ } /* end switch */
done:
- FUNC_LEAVE_NOAPI(ret_value)
- } /* H5C_unsettle_entry_ring() */
-
- /*-------------------------------------------------------------------------
- * Function: H5C_unsettle_ring()
- *
- * Purpose: Advise the metadata cache that the specified free space
- * manager ring is no longer settled (if it was on entry).
- *
- * If the target free space manager ring is already
- * unsettled, do nothing, and return SUCCEED.
- *
- * If the target free space manager ring is settled, and
- * we are not in the process of a file shutdown, mark
- * the ring as unsettled, and return SUCCEED.
- *
- * If the target free space manager is settled, and we
- * are in the process of a file shutdown, post an error
- * message, and return FAIL.
- *
- * Return: Non-negative on success/Negative on failure
- *
- * Programmer: John Mainzer
- * 10/15/16
- *
- *-------------------------------------------------------------------------
- */
- herr_t H5C_unsettle_ring(H5F_t * f, H5C_ring_t ring)
- {
- H5C_t *cache_ptr;
- herr_t ret_value = SUCCEED; /* Return value */
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* H5C_unsettle_entry_ring() */
- FUNC_ENTER_NOAPI(FAIL)
+/*-------------------------------------------------------------------------
+ * Function: H5C_unsettle_ring()
+ *
+ * Purpose: Advise the metadata cache that the specified free space
+ * manager ring is no longer settled (if it was on entry).
+ *
+ * If the target free space manager ring is already
+ * unsettled, do nothing, and return SUCCEED.
+ *
+ * If the target free space manager ring is settled, and
+ * we are not in the process of a file shutdown, mark
+ * the ring as unsettled, and return SUCCEED.
+ *
+ * If the target free space manager is settled, and we
+ * are in the process of a file shutdown, post an error
+ * message, and return FAIL.
+ *
+ * Return: Non-negative on success/Negative on failure
+ *
+ * Programmer: John Mainzer
+ * 10/15/16
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5C_unsettle_ring(H5F_t *f, H5C_ring_t ring)
+{
+ H5C_t *cache_ptr;
+ herr_t ret_value = SUCCEED; /* Return value */
- /* Sanity checks */
- HDassert(f);
- HDassert(f->shared);
- HDassert(f->shared->cache);
- HDassert((H5C_RING_RDFSM == ring) || (H5C_RING_MDFSM == ring));
- cache_ptr = f->shared->cache;
- HDassert(H5C__H5C_T_MAGIC == cache_ptr->magic);
+ FUNC_ENTER_NOAPI(FAIL)
- switch (ring) {
- case H5C_RING_RDFSM:
- if (cache_ptr->rdfsm_settled) {
- if (cache_ptr->close_warning_received)
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "unexpected rdfsm ring unsettle")
- cache_ptr->rdfsm_settled = FALSE;
- } /* end if */
- break;
+ /* Sanity checks */
+ HDassert(f);
+ HDassert(f->shared);
+ HDassert(f->shared->cache);
+ HDassert((H5C_RING_RDFSM == ring) || (H5C_RING_MDFSM == ring));
+ cache_ptr = f->shared->cache;
+ HDassert(H5C__H5C_T_MAGIC == cache_ptr->magic);
+
+ switch (ring) {
+ case H5C_RING_RDFSM:
+ if (cache_ptr->rdfsm_settled) {
+ if (cache_ptr->close_warning_received)
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "unexpected rdfsm ring unsettle")
+ cache_ptr->rdfsm_settled = FALSE;
+ } /* end if */
+ break;
- case H5C_RING_MDFSM:
- if (cache_ptr->mdfsm_settled) {
- if (cache_ptr->close_warning_received)
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "unexpected mdfsm ring unsettle")
- cache_ptr->mdfsm_settled = FALSE;
- } /* end if */
- break;
+ case H5C_RING_MDFSM:
+ if (cache_ptr->mdfsm_settled) {
+ if (cache_ptr->close_warning_received)
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "unexpected mdfsm ring unsettle")
+ cache_ptr->mdfsm_settled = FALSE;
+ } /* end if */
+ break;
- default:
- HDassert(FALSE); /* this should be un-reachable */
- break;
- } /* end switch */
+ default:
+ HDassert(FALSE); /* this should be un-reachable */
+ break;
+ } /* end switch */
done:
- FUNC_LEAVE_NOAPI(ret_value)
- } /* H5C_unsettle_ring() */
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* H5C_unsettle_ring() */
- /*-------------------------------------------------------------------------
- * Function: H5C_validate_resize_config()
- *
- * Purpose: Run a sanity check on the specified sections of the
- * provided instance of struct H5C_auto_size_ctl_t.
- *
- * Do nothing and return SUCCEED if no errors are detected,
- * and flag an error and return FAIL otherwise.
- *
- * Return: Non-negative on success/Negative on failure
- *
- * Programmer: John Mainzer
- * 3/23/05
- *
- *-------------------------------------------------------------------------
- */
- herr_t H5C_validate_resize_config(H5C_auto_size_ctl_t * config_ptr, unsigned int tests)
- {
- herr_t ret_value = SUCCEED; /* Return value */
+/*-------------------------------------------------------------------------
+ * Function: H5C_validate_resize_config()
+ *
+ * Purpose: Run a sanity check on the specified sections of the
+ * provided instance of struct H5C_auto_size_ctl_t.
+ *
+ * Do nothing and return SUCCEED if no errors are detected,
+ * and flag an error and return FAIL otherwise.
+ *
+ * Return: Non-negative on success/Negative on failure
+ *
+ * Programmer: John Mainzer
+ * 3/23/05
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5C_validate_resize_config(H5C_auto_size_ctl_t *config_ptr, unsigned int tests)
+{
+ herr_t ret_value = SUCCEED; /* Return value */
- FUNC_ENTER_NOAPI(FAIL)
+ FUNC_ENTER_NOAPI(FAIL)
- if (config_ptr == NULL)
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "NULL config_ptr on entry")
+ if (config_ptr == NULL)
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "NULL config_ptr on entry")
- if (config_ptr->version != H5C__CURR_AUTO_SIZE_CTL_VER)
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Unknown config version")
+ if (config_ptr->version != H5C__CURR_AUTO_SIZE_CTL_VER)
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Unknown config version")
- if ((tests & H5C_RESIZE_CFG__VALIDATE_GENERAL) != 0) {
+ if ((tests & H5C_RESIZE_CFG__VALIDATE_GENERAL) != 0) {
- if (config_ptr->max_size > H5C__MAX_MAX_CACHE_SIZE)
- HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "max_size too big")
+ if (config_ptr->max_size > H5C__MAX_MAX_CACHE_SIZE)
+ HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "max_size too big")
- if (config_ptr->min_size < H5C__MIN_MAX_CACHE_SIZE)
- HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "min_size too small")
+ if (config_ptr->min_size < H5C__MIN_MAX_CACHE_SIZE)
+ HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "min_size too small")
- if (config_ptr->min_size > config_ptr->max_size)
- HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "min_size > max_size")
+ if (config_ptr->min_size > config_ptr->max_size)
+ HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "min_size > max_size")
- if (config_ptr->set_initial_size && ((config_ptr->initial_size < config_ptr->min_size) ||
- (config_ptr->initial_size > config_ptr->max_size)))
- HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL,
- "initial_size must be in the interval [min_size, max_size]")
+ if (config_ptr->set_initial_size && ((config_ptr->initial_size < config_ptr->min_size) ||
+ (config_ptr->initial_size > config_ptr->max_size)))
+ HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL,
+ "initial_size must be in the interval [min_size, max_size]")
- if ((config_ptr->min_clean_fraction < (double)0.0f) ||
- (config_ptr->min_clean_fraction > (double)1.0f))
- HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL,
- "min_clean_fraction must be in the interval [0.0, 1.0]")
+ if ((config_ptr->min_clean_fraction < (double)0.0f) ||
+ (config_ptr->min_clean_fraction > (double)1.0f))
+ HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "min_clean_fraction must be in the interval [0.0, 1.0]")
- if (config_ptr->epoch_length < H5C__MIN_AR_EPOCH_LENGTH)
- HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "epoch_length too small")
+ if (config_ptr->epoch_length < H5C__MIN_AR_EPOCH_LENGTH)
+ HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "epoch_length too small")
- if (config_ptr->epoch_length > H5C__MAX_AR_EPOCH_LENGTH)
- HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "epoch_length too big")
- } /* H5C_RESIZE_CFG__VALIDATE_GENERAL */
+ if (config_ptr->epoch_length > H5C__MAX_AR_EPOCH_LENGTH)
+ HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "epoch_length too big")
+ } /* H5C_RESIZE_CFG__VALIDATE_GENERAL */
- if ((tests & H5C_RESIZE_CFG__VALIDATE_INCREMENT) != 0) {
- if ((config_ptr->incr_mode != H5C_incr__off) && (config_ptr->incr_mode != H5C_incr__threshold))
- HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "Invalid incr_mode")
+ if ((tests & H5C_RESIZE_CFG__VALIDATE_INCREMENT) != 0) {
+ if ((config_ptr->incr_mode != H5C_incr__off) && (config_ptr->incr_mode != H5C_incr__threshold))
+ HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "Invalid incr_mode")
- if (config_ptr->incr_mode == H5C_incr__threshold) {
- if ((config_ptr->lower_hr_threshold < (double)0.0f) ||
- (config_ptr->lower_hr_threshold > (double)1.0f))
- HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL,
- "lower_hr_threshold must be in the range [0.0, 1.0]")
+ if (config_ptr->incr_mode == H5C_incr__threshold) {
+ if ((config_ptr->lower_hr_threshold < (double)0.0f) ||
+ (config_ptr->lower_hr_threshold > (double)1.0f))
+ HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL,
+ "lower_hr_threshold must be in the range [0.0, 1.0]")
- if (config_ptr->increment < (double)1.0f)
- HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL,
- "increment must be greater than or equal to 1.0")
+ if (config_ptr->increment < (double)1.0f)
+ HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "increment must be greater than or equal to 1.0")
- /* no need to check max_increment, as it is a size_t,
- * and thus must be non-negative.
- */
- } /* H5C_incr__threshold */
+ /* no need to check max_increment, as it is a size_t,
+ * and thus must be non-negative.
+ */
+ } /* H5C_incr__threshold */
- switch (config_ptr->flash_incr_mode) {
- case H5C_flash_incr__off:
- /* nothing to do here */
- break;
+ switch (config_ptr->flash_incr_mode) {
+ case H5C_flash_incr__off:
+ /* nothing to do here */
+ break;
- case H5C_flash_incr__add_space:
- if ((config_ptr->flash_multiple < (double)0.1f) ||
- (config_ptr->flash_multiple > (double)10.0f))
- HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL,
- "flash_multiple must be in the range [0.1, 10.0]")
- if ((config_ptr->flash_threshold < (double)0.1f) ||
- (config_ptr->flash_threshold > (double)1.0f))
- HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL,
- "flash_threshold must be in the range [0.1, 1.0]")
- break;
+ case H5C_flash_incr__add_space:
+ if ((config_ptr->flash_multiple < (double)0.1f) ||
+ (config_ptr->flash_multiple > (double)10.0f))
+ HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL,
+ "flash_multiple must be in the range [0.1, 10.0]")
+ if ((config_ptr->flash_threshold < (double)0.1f) ||
+ (config_ptr->flash_threshold > (double)1.0f))
+ HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL,
+ "flash_threshold must be in the range [0.1, 1.0]")
+ break;
- default:
- HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "Invalid flash_incr_mode")
- break;
- } /* end switch */
- } /* H5C_RESIZE_CFG__VALIDATE_INCREMENT */
+ default:
+ HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "Invalid flash_incr_mode")
+ break;
+ } /* end switch */
+ } /* H5C_RESIZE_CFG__VALIDATE_INCREMENT */
- if ((tests & H5C_RESIZE_CFG__VALIDATE_DECREMENT) != 0) {
+ if ((tests & H5C_RESIZE_CFG__VALIDATE_DECREMENT) != 0) {
- if ((config_ptr->decr_mode != H5C_decr__off) && (config_ptr->decr_mode != H5C_decr__threshold) &&
- (config_ptr->decr_mode != H5C_decr__age_out) &&
- (config_ptr->decr_mode != H5C_decr__age_out_with_threshold)) {
+ if ((config_ptr->decr_mode != H5C_decr__off) && (config_ptr->decr_mode != H5C_decr__threshold) &&
+ (config_ptr->decr_mode != H5C_decr__age_out) &&
+ (config_ptr->decr_mode != H5C_decr__age_out_with_threshold)) {
- HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "Invalid decr_mode")
- }
+ HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "Invalid decr_mode")
+ }
- if (config_ptr->decr_mode == H5C_decr__threshold) {
- if (config_ptr->upper_hr_threshold > (double)1.0f)
- HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "upper_hr_threshold must be <= 1.0")
+ if (config_ptr->decr_mode == H5C_decr__threshold) {
+ if (config_ptr->upper_hr_threshold > (double)1.0f)
+ HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "upper_hr_threshold must be <= 1.0")
- if ((config_ptr->decrement > (double)1.0f) || (config_ptr->decrement < (double)0.0f))
- HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "decrement must be in the interval [0.0, 1.0]")
+ if ((config_ptr->decrement > (double)1.0f) || (config_ptr->decrement < (double)0.0f))
+ HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "decrement must be in the interval [0.0, 1.0]")
- /* no need to check max_decrement as it is a size_t
- * and thus must be non-negative.
- */
- } /* H5C_decr__threshold */
+ /* no need to check max_decrement as it is a size_t
+ * and thus must be non-negative.
+ */
+ } /* H5C_decr__threshold */
- if ((config_ptr->decr_mode == H5C_decr__age_out) ||
- (config_ptr->decr_mode == H5C_decr__age_out_with_threshold)) {
+ if ((config_ptr->decr_mode == H5C_decr__age_out) ||
+ (config_ptr->decr_mode == H5C_decr__age_out_with_threshold)) {
- if (config_ptr->epochs_before_eviction < 1)
- HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "epochs_before_eviction must be positive")
- if (config_ptr->epochs_before_eviction > H5C__MAX_EPOCH_MARKERS)
- HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "epochs_before_eviction too big")
+ if (config_ptr->epochs_before_eviction < 1)
+ HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "epochs_before_eviction must be positive")
+ if (config_ptr->epochs_before_eviction > H5C__MAX_EPOCH_MARKERS)
+ HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "epochs_before_eviction too big")
- if ((config_ptr->apply_empty_reserve) && ((config_ptr->empty_reserve > (double)1.0f) ||
- (config_ptr->empty_reserve < (double)0.0f)))
- HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL,
- "empty_reserve must be in the interval [0.0, 1.0]")
+ if ((config_ptr->apply_empty_reserve) &&
+ ((config_ptr->empty_reserve > (double)1.0f) || (config_ptr->empty_reserve < (double)0.0f)))
+ HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "empty_reserve must be in the interval [0.0, 1.0]")
- /* no need to check max_decrement as it is a size_t
- * and thus must be non-negative.
- */
- } /* H5C_decr__age_out || H5C_decr__age_out_with_threshold */
+ /* no need to check max_decrement as it is a size_t
+ * and thus must be non-negative.
+ */
+ } /* H5C_decr__age_out || H5C_decr__age_out_with_threshold */
- if (config_ptr->decr_mode == H5C_decr__age_out_with_threshold) {
- if ((config_ptr->upper_hr_threshold > (double)1.0f) ||
- (config_ptr->upper_hr_threshold < (double)0.0f))
- HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL,
- "upper_hr_threshold must be in the interval [0.0, 1.0]")
- } /* H5C_decr__age_out_with_threshold */
- } /* H5C_RESIZE_CFG__VALIDATE_DECREMENT */
-
- if ((tests & H5C_RESIZE_CFG__VALIDATE_INTERACTIONS) != 0) {
- if ((config_ptr->incr_mode == H5C_incr__threshold) &&
- ((config_ptr->decr_mode == H5C_decr__threshold) ||
- (config_ptr->decr_mode == H5C_decr__age_out_with_threshold)) &&
- (config_ptr->lower_hr_threshold >= config_ptr->upper_hr_threshold))
- HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "conflicting threshold fields in config")
- } /* H5C_RESIZE_CFG__VALIDATE_INTERACTIONS */
+ if (config_ptr->decr_mode == H5C_decr__age_out_with_threshold) {
+ if ((config_ptr->upper_hr_threshold > (double)1.0f) ||
+ (config_ptr->upper_hr_threshold < (double)0.0f))
+ HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL,
+ "upper_hr_threshold must be in the interval [0.0, 1.0]")
+ } /* H5C_decr__age_out_with_threshold */
+ } /* H5C_RESIZE_CFG__VALIDATE_DECREMENT */
+
+ if ((tests & H5C_RESIZE_CFG__VALIDATE_INTERACTIONS) != 0) {
+ if ((config_ptr->incr_mode == H5C_incr__threshold) &&
+ ((config_ptr->decr_mode == H5C_decr__threshold) ||
+ (config_ptr->decr_mode == H5C_decr__age_out_with_threshold)) &&
+ (config_ptr->lower_hr_threshold >= config_ptr->upper_hr_threshold))
+ HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "conflicting threshold fields in config")
+ } /* H5C_RESIZE_CFG__VALIDATE_INTERACTIONS */
done:
- FUNC_LEAVE_NOAPI(ret_value)
- } /* H5C_validate_resize_config() */
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* H5C_validate_resize_config() */
- /*-------------------------------------------------------------------------
- * Function: H5C_create_flush_dependency()
- *
- * Purpose: Initiates a parent<->child entry flush dependency. The parent
- * entry must be pinned or protected at the time of call, and must
- * have all dependencies removed before the cache can shut down.
- *
- * Note: Flush dependencies in the cache indicate that a child entry
- * must be flushed to the file before its parent. (This is
- * currently used to implement Single-Writer/Multiple-Reader (SWMR)
- * I/O access for data structures in the file).
- *
- * Creating a flush dependency between two entries will also pin
- * the parent entry.
- *
- * Return: Non-negative on success/Negative on failure
- *
- * Programmer: Quincey Koziol
- * 3/05/09
- *
- *-------------------------------------------------------------------------
- */
- herr_t H5C_create_flush_dependency(void *parent_thing, void *child_thing)
- {
- H5C_t * cache_ptr;
- H5C_cache_entry_t *parent_entry = (H5C_cache_entry_t *)parent_thing; /* Ptr to parent thing's entry */
- H5C_cache_entry_t *child_entry = (H5C_cache_entry_t *)child_thing; /* Ptr to child thing's entry */
- herr_t ret_value = SUCCEED; /* Return value */
+/*-------------------------------------------------------------------------
+ * Function: H5C_create_flush_dependency()
+ *
+ * Purpose: Initiates a parent<->child entry flush dependency. The parent
+ * entry must be pinned or protected at the time of call, and must
+ * have all dependencies removed before the cache can shut down.
+ *
+ * Note: Flush dependencies in the cache indicate that a child entry
+ * must be flushed to the file before its parent. (This is
+ * currently used to implement Single-Writer/Multiple-Reader (SWMR)
+ * I/O access for data structures in the file).
+ *
+ * Creating a flush dependency between two entries will also pin
+ * the parent entry.
+ *
+ * Return: Non-negative on success/Negative on failure
+ *
+ * Programmer: Quincey Koziol
+ * 3/05/09
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5C_create_flush_dependency(void *parent_thing, void *child_thing)
+{
+ H5C_t * cache_ptr;
+ H5C_cache_entry_t *parent_entry = (H5C_cache_entry_t *)parent_thing; /* Ptr to parent thing's entry */
+ H5C_cache_entry_t *child_entry = (H5C_cache_entry_t *)child_thing; /* Ptr to child thing's entry */
+ herr_t ret_value = SUCCEED; /* Return value */
- FUNC_ENTER_NOAPI(FAIL)
+ FUNC_ENTER_NOAPI(FAIL)
- /* Sanity checks */
- HDassert(parent_entry);
- HDassert(parent_entry->magic == H5C__H5C_CACHE_ENTRY_T_MAGIC);
- HDassert(H5F_addr_defined(parent_entry->addr));
- HDassert(child_entry);
- HDassert(child_entry->magic == H5C__H5C_CACHE_ENTRY_T_MAGIC);
- HDassert(H5F_addr_defined(child_entry->addr));
- cache_ptr = parent_entry->cache_ptr;
- HDassert(cache_ptr);
- HDassert(cache_ptr->magic == H5C__H5C_T_MAGIC);
- HDassert(cache_ptr == child_entry->cache_ptr);
+ /* Sanity checks */
+ HDassert(parent_entry);
+ HDassert(parent_entry->magic == H5C__H5C_CACHE_ENTRY_T_MAGIC);
+ HDassert(H5F_addr_defined(parent_entry->addr));
+ HDassert(child_entry);
+ HDassert(child_entry->magic == H5C__H5C_CACHE_ENTRY_T_MAGIC);
+ HDassert(H5F_addr_defined(child_entry->addr));
+ cache_ptr = parent_entry->cache_ptr;
+ HDassert(cache_ptr);
+ HDassert(cache_ptr->magic == H5C__H5C_T_MAGIC);
+ HDassert(cache_ptr == child_entry->cache_ptr);
#ifndef NDEBUG
- /* Make sure the parent is not already a parent */
- {
- unsigned u;
+ /* Make sure the parent is not already a parent */
+ {
+ unsigned u;
- for (u = 0; u < child_entry->flush_dep_nparents; u++)
- HDassert(child_entry->flush_dep_parent[u] != parent_entry);
- } /* end block */
-#endif /* NDEBUG */
+ for (u = 0; u < child_entry->flush_dep_nparents; u++)
+ HDassert(child_entry->flush_dep_parent[u] != parent_entry);
+ } /* end block */
+#endif /* NDEBUG */
- /* More sanity checks */
- if (child_entry == parent_entry)
- HGOTO_ERROR(H5E_CACHE, H5E_CANTDEPEND, FAIL,
- "Child entry flush dependency parent can't be itself")
- if (!(parent_entry->is_protected || parent_entry->is_pinned))
- HGOTO_ERROR(H5E_CACHE, H5E_CANTDEPEND, FAIL, "Parent entry isn't pinned or protected")
+ /* More sanity checks */
+ if (child_entry == parent_entry)
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTDEPEND, FAIL, "Child entry flush dependency parent can't be itself")
+ if (!(parent_entry->is_protected || parent_entry->is_pinned))
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTDEPEND, FAIL, "Parent entry isn't pinned or protected")
- /* Check for parent not pinned */
- if (!parent_entry->is_pinned) {
- /* Sanity check */
- HDassert(parent_entry->flush_dep_nchildren == 0);
- HDassert(!parent_entry->pinned_from_client);
- HDassert(!parent_entry->pinned_from_cache);
+ /* Check for parent not pinned */
+ if (!parent_entry->is_pinned) {
+ /* Sanity check */
+ HDassert(parent_entry->flush_dep_nchildren == 0);
+ HDassert(!parent_entry->pinned_from_client);
+ HDassert(!parent_entry->pinned_from_cache);
- /* Pin the parent entry */
- parent_entry->is_pinned = TRUE;
- H5C__UPDATE_STATS_FOR_PIN(cache_ptr, parent_entry)
- } /* end else */
+ /* Pin the parent entry */
+ parent_entry->is_pinned = TRUE;
+ H5C__UPDATE_STATS_FOR_PIN(cache_ptr, parent_entry)
+ } /* end else */
- /* Mark the entry as pinned from the cache's action (possibly redundantly) */
- parent_entry->pinned_from_cache = TRUE;
+ /* Mark the entry as pinned from the cache's action (possibly redundantly) */
+ parent_entry->pinned_from_cache = TRUE;
- /* Check if we need to resize the child's parent array */
- if (child_entry->flush_dep_nparents >= child_entry->flush_dep_parent_nalloc) {
- if (child_entry->flush_dep_parent_nalloc == 0) {
- /* Array does not exist yet, allocate it */
- HDassert(!child_entry->flush_dep_parent);
+ /* Check if we need to resize the child's parent array */
+ if (child_entry->flush_dep_nparents >= child_entry->flush_dep_parent_nalloc) {
+ if (child_entry->flush_dep_parent_nalloc == 0) {
+ /* Array does not exist yet, allocate it */
+ HDassert(!child_entry->flush_dep_parent);
- if (NULL == (child_entry->flush_dep_parent =
- H5FL_SEQ_MALLOC(H5C_cache_entry_ptr_t, H5C_FLUSH_DEP_PARENT_INIT)))
- HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL,
- "memory allocation failed for flush dependency parent list")
- child_entry->flush_dep_parent_nalloc = H5C_FLUSH_DEP_PARENT_INIT;
- } /* end if */
- else {
- /* Resize existing array */
- HDassert(child_entry->flush_dep_parent);
-
- if (NULL == (child_entry->flush_dep_parent =
- H5FL_SEQ_REALLOC(H5C_cache_entry_ptr_t, child_entry->flush_dep_parent,
- 2 * child_entry->flush_dep_parent_nalloc)))
- HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL,
- "memory allocation failed for flush dependency parent list")
- child_entry->flush_dep_parent_nalloc *= 2;
- } /* end else */
- cache_ptr->entry_fd_height_change_counter++;
+ if (NULL == (child_entry->flush_dep_parent =
+ H5FL_SEQ_MALLOC(H5C_cache_entry_ptr_t, H5C_FLUSH_DEP_PARENT_INIT)))
+ HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL,
+ "memory allocation failed for flush dependency parent list")
+ child_entry->flush_dep_parent_nalloc = H5C_FLUSH_DEP_PARENT_INIT;
} /* end if */
+ else {
+ /* Resize existing array */
+ HDassert(child_entry->flush_dep_parent);
- /* Add the dependency to the child's parent array */
- child_entry->flush_dep_parent[child_entry->flush_dep_nparents] = parent_entry;
- child_entry->flush_dep_nparents++;
+ if (NULL == (child_entry->flush_dep_parent =
+ H5FL_SEQ_REALLOC(H5C_cache_entry_ptr_t, child_entry->flush_dep_parent,
+ 2 * child_entry->flush_dep_parent_nalloc)))
+ HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL,
+ "memory allocation failed for flush dependency parent list")
+ child_entry->flush_dep_parent_nalloc *= 2;
+ } /* end else */
+ cache_ptr->entry_fd_height_change_counter++;
+ } /* end if */
- /* Increment parent's number of children */
- parent_entry->flush_dep_nchildren++;
+ /* Add the dependency to the child's parent array */
+ child_entry->flush_dep_parent[child_entry->flush_dep_nparents] = parent_entry;
+ child_entry->flush_dep_nparents++;
- /* Adjust the number of dirty children */
- if (child_entry->is_dirty) {
- /* Sanity check */
- HDassert(parent_entry->flush_dep_ndirty_children < parent_entry->flush_dep_nchildren);
+ /* Increment parent's number of children */
+ parent_entry->flush_dep_nchildren++;
- parent_entry->flush_dep_ndirty_children++;
+ /* Adjust the number of dirty children */
+ if (child_entry->is_dirty) {
+ /* Sanity check */
+ HDassert(parent_entry->flush_dep_ndirty_children < parent_entry->flush_dep_nchildren);
- /* If the parent has a 'notify' callback, send a 'child entry dirtied' notice */
- if (parent_entry->type->notify &&
- (parent_entry->type->notify)(H5C_NOTIFY_ACTION_CHILD_DIRTIED, parent_entry) < 0)
- HGOTO_ERROR(H5E_CACHE, H5E_CANTNOTIFY, FAIL,
- "can't notify parent about child entry dirty flag set")
- } /* end if */
+ parent_entry->flush_dep_ndirty_children++;
- /* adjust the parent's number of unserialized children. Note
- * that it is possible for and entry to be clean and unserialized.
- */
- if (!child_entry->image_up_to_date) {
- HDassert(parent_entry->flush_dep_nunser_children < parent_entry->flush_dep_nchildren);
+ /* If the parent has a 'notify' callback, send a 'child entry dirtied' notice */
+ if (parent_entry->type->notify &&
+ (parent_entry->type->notify)(H5C_NOTIFY_ACTION_CHILD_DIRTIED, parent_entry) < 0)
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTNOTIFY, FAIL,
+ "can't notify parent about child entry dirty flag set")
+ } /* end if */
- parent_entry->flush_dep_nunser_children++;
+ /* adjust the parent's number of unserialized children. Note
+ * that it is possible for and entry to be clean and unserialized.
+ */
+ if (!child_entry->image_up_to_date) {
+ HDassert(parent_entry->flush_dep_nunser_children < parent_entry->flush_dep_nchildren);
- /* If the parent has a 'notify' callback, send a 'child entry unserialized' notice */
- if (parent_entry->type->notify &&
- (parent_entry->type->notify)(H5C_NOTIFY_ACTION_CHILD_UNSERIALIZED, parent_entry) < 0)
- HGOTO_ERROR(H5E_CACHE, H5E_CANTNOTIFY, FAIL,
- "can't notify parent about child entry serialized flag reset")
- } /* end if */
+ parent_entry->flush_dep_nunser_children++;
+
+ /* If the parent has a 'notify' callback, send a 'child entry unserialized' notice */
+ if (parent_entry->type->notify &&
+ (parent_entry->type->notify)(H5C_NOTIFY_ACTION_CHILD_UNSERIALIZED, parent_entry) < 0)
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTNOTIFY, FAIL,
+ "can't notify parent about child entry serialized flag reset")
+ } /* end if */
- /* Post-conditions, for successful operation */
- HDassert(parent_entry->is_pinned);
- HDassert(parent_entry->flush_dep_nchildren > 0);
- HDassert(child_entry->flush_dep_parent);
- HDassert(child_entry->flush_dep_nparents > 0);
- HDassert(child_entry->flush_dep_parent_nalloc > 0);
+ /* Post-conditions, for successful operation */
+ HDassert(parent_entry->is_pinned);
+ HDassert(parent_entry->flush_dep_nchildren > 0);
+ HDassert(child_entry->flush_dep_parent);
+ HDassert(child_entry->flush_dep_nparents > 0);
+ HDassert(child_entry->flush_dep_parent_nalloc > 0);
#ifndef NDEBUG
- H5C__assert_flush_dep_nocycle(parent_entry, child_entry);
+ H5C__assert_flush_dep_nocycle(parent_entry, child_entry);
#endif /* NDEBUG */
done:
- FUNC_LEAVE_NOAPI(ret_value)
- } /* H5C_create_flush_dependency() */
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* H5C_create_flush_dependency() */
- /*-------------------------------------------------------------------------
- * Function: H5C_destroy_flush_dependency()
- *
- * Purpose: Terminates a parent<-> child entry flush dependency. The
- * parent entry must be pinned.
- *
- * Return: Non-negative on success/Negative on failure
- *
- * Programmer: Quincey Koziol
- * 3/05/09
- *
- *-------------------------------------------------------------------------
- */
- herr_t H5C_destroy_flush_dependency(void *parent_thing, void *child_thing)
- {
- H5C_t * cache_ptr;
- H5C_cache_entry_t *parent_entry = (H5C_cache_entry_t *)parent_thing; /* Ptr to parent entry */
- H5C_cache_entry_t *child_entry = (H5C_cache_entry_t *)child_thing; /* Ptr to child entry */
- unsigned u; /* Local index variable */
- herr_t ret_value = SUCCEED; /* Return value */
+/*-------------------------------------------------------------------------
+ * Function: H5C_destroy_flush_dependency()
+ *
+ * Purpose: Terminates a parent<-> child entry flush dependency. The
+ * parent entry must be pinned.
+ *
+ * Return: Non-negative on success/Negative on failure
+ *
+ * Programmer: Quincey Koziol
+ * 3/05/09
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5C_destroy_flush_dependency(void *parent_thing, void *child_thing)
+{
+ H5C_t * cache_ptr;
+ H5C_cache_entry_t *parent_entry = (H5C_cache_entry_t *)parent_thing; /* Ptr to parent entry */
+ H5C_cache_entry_t *child_entry = (H5C_cache_entry_t *)child_thing; /* Ptr to child entry */
+ unsigned u; /* Local index variable */
+ herr_t ret_value = SUCCEED; /* Return value */
- FUNC_ENTER_NOAPI(FAIL)
+ FUNC_ENTER_NOAPI(FAIL)
- /* Sanity checks */
- HDassert(parent_entry);
- HDassert(parent_entry->magic == H5C__H5C_CACHE_ENTRY_T_MAGIC);
- HDassert(H5F_addr_defined(parent_entry->addr));
- HDassert(child_entry);
- HDassert(child_entry->magic == H5C__H5C_CACHE_ENTRY_T_MAGIC);
- HDassert(H5F_addr_defined(child_entry->addr));
- cache_ptr = parent_entry->cache_ptr;
- HDassert(cache_ptr);
- HDassert(cache_ptr->magic == H5C__H5C_T_MAGIC);
- HDassert(cache_ptr == child_entry->cache_ptr);
-
- /* Usage checks */
- if (!parent_entry->is_pinned)
- HGOTO_ERROR(H5E_CACHE, H5E_CANTUNDEPEND, FAIL, "Parent entry isn't pinned")
- if (NULL == child_entry->flush_dep_parent)
- HGOTO_ERROR(H5E_CACHE, H5E_CANTUNDEPEND, FAIL,
- "Child entry doesn't have a flush dependency parent array")
- if (0 == parent_entry->flush_dep_nchildren)
- HGOTO_ERROR(H5E_CACHE, H5E_CANTUNDEPEND, FAIL,
- "Parent entry flush dependency ref. count has no child dependencies")
-
- /* Search for parent in child's parent array. This is a linear search
- * because we do not expect large numbers of parents. If this changes, we
- * may wish to change the parent array to a skip list */
- for (u = 0; u < child_entry->flush_dep_nparents; u++)
- if (child_entry->flush_dep_parent[u] == parent_entry)
- break;
- if (u == child_entry->flush_dep_nparents)
- HGOTO_ERROR(H5E_CACHE, H5E_CANTUNDEPEND, FAIL,
- "Parent entry isn't a flush dependency parent for child entry")
-
- /* Remove parent entry from child's parent array */
- if (u < (child_entry->flush_dep_nparents - 1))
- HDmemmove(&child_entry->flush_dep_parent[u], &child_entry->flush_dep_parent[u + 1],
- (child_entry->flush_dep_nparents - u - 1) * sizeof(child_entry->flush_dep_parent[0]));
- child_entry->flush_dep_nparents--;
-
- /* Adjust parent entry's nchildren and unpin parent if it goes to zero */
- parent_entry->flush_dep_nchildren--;
- if (0 == parent_entry->flush_dep_nchildren) {
- /* Sanity check */
- HDassert(parent_entry->pinned_from_cache);
+ /* Sanity checks */
+ HDassert(parent_entry);
+ HDassert(parent_entry->magic == H5C__H5C_CACHE_ENTRY_T_MAGIC);
+ HDassert(H5F_addr_defined(parent_entry->addr));
+ HDassert(child_entry);
+ HDassert(child_entry->magic == H5C__H5C_CACHE_ENTRY_T_MAGIC);
+ HDassert(H5F_addr_defined(child_entry->addr));
+ cache_ptr = parent_entry->cache_ptr;
+ HDassert(cache_ptr);
+ HDassert(cache_ptr->magic == H5C__H5C_T_MAGIC);
+ HDassert(cache_ptr == child_entry->cache_ptr);
+
+ /* Usage checks */
+ if (!parent_entry->is_pinned)
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTUNDEPEND, FAIL, "Parent entry isn't pinned")
+ if (NULL == child_entry->flush_dep_parent)
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTUNDEPEND, FAIL,
+ "Child entry doesn't have a flush dependency parent array")
+ if (0 == parent_entry->flush_dep_nchildren)
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTUNDEPEND, FAIL,
+ "Parent entry flush dependency ref. count has no child dependencies")
+
+ /* Search for parent in child's parent array. This is a linear search
+ * because we do not expect large numbers of parents. If this changes, we
+ * may wish to change the parent array to a skip list */
+ for (u = 0; u < child_entry->flush_dep_nparents; u++)
+ if (child_entry->flush_dep_parent[u] == parent_entry)
+ break;
+ if (u == child_entry->flush_dep_nparents)
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTUNDEPEND, FAIL,
+ "Parent entry isn't a flush dependency parent for child entry")
+
+ /* Remove parent entry from child's parent array */
+ if (u < (child_entry->flush_dep_nparents - 1))
+ HDmemmove(&child_entry->flush_dep_parent[u], &child_entry->flush_dep_parent[u + 1],
+ (child_entry->flush_dep_nparents - u - 1) * sizeof(child_entry->flush_dep_parent[0]));
+ child_entry->flush_dep_nparents--;
+
+ /* Adjust parent entry's nchildren and unpin parent if it goes to zero */
+ parent_entry->flush_dep_nchildren--;
+ if (0 == parent_entry->flush_dep_nchildren) {
+ /* Sanity check */
+ HDassert(parent_entry->pinned_from_cache);
- /* Check if we should unpin parent entry now */
- if (!parent_entry->pinned_from_client)
- if (H5C__unpin_entry_real(cache_ptr, parent_entry, TRUE) < 0)
- HGOTO_ERROR(H5E_CACHE, H5E_CANTUNPIN, FAIL, "Can't unpin entry")
+ /* Check if we should unpin parent entry now */
+ if (!parent_entry->pinned_from_client)
+ if (H5C__unpin_entry_real(cache_ptr, parent_entry, TRUE) < 0)
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTUNPIN, FAIL, "Can't unpin entry")
- /* Mark the entry as unpinned from the cache's action */
- parent_entry->pinned_from_cache = FALSE;
- } /* end if */
+ /* Mark the entry as unpinned from the cache's action */
+ parent_entry->pinned_from_cache = FALSE;
+ } /* end if */
- /* Adjust parent entry's ndirty_children */
- if (child_entry->is_dirty) {
- /* Sanity check */
- HDassert(parent_entry->flush_dep_ndirty_children > 0);
+ /* Adjust parent entry's ndirty_children */
+ if (child_entry->is_dirty) {
+ /* Sanity check */
+ HDassert(parent_entry->flush_dep_ndirty_children > 0);
- parent_entry->flush_dep_ndirty_children--;
+ parent_entry->flush_dep_ndirty_children--;
- /* If the parent has a 'notify' callback, send a 'child entry cleaned' notice */
- if (parent_entry->type->notify &&
- (parent_entry->type->notify)(H5C_NOTIFY_ACTION_CHILD_CLEANED, parent_entry) < 0)
- HGOTO_ERROR(H5E_CACHE, H5E_CANTNOTIFY, FAIL,
- "can't notify parent about child entry dirty flag reset")
- } /* end if */
+ /* If the parent has a 'notify' callback, send a 'child entry cleaned' notice */
+ if (parent_entry->type->notify &&
+ (parent_entry->type->notify)(H5C_NOTIFY_ACTION_CHILD_CLEANED, parent_entry) < 0)
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTNOTIFY, FAIL,
+ "can't notify parent about child entry dirty flag reset")
+ } /* end if */
- /* adjust parent entry's number of unserialized children */
- if (!child_entry->image_up_to_date) {
- HDassert(parent_entry->flush_dep_nunser_children > 0);
+ /* adjust parent entry's number of unserialized children */
+ if (!child_entry->image_up_to_date) {
+ HDassert(parent_entry->flush_dep_nunser_children > 0);
- parent_entry->flush_dep_nunser_children--;
+ parent_entry->flush_dep_nunser_children--;
- /* If the parent has a 'notify' callback, send a 'child entry serialized' notice */
- if (parent_entry->type->notify &&
- (parent_entry->type->notify)(H5C_NOTIFY_ACTION_CHILD_SERIALIZED, parent_entry) < 0)
- HGOTO_ERROR(H5E_CACHE, H5E_CANTNOTIFY, FAIL,
- "can't notify parent about child entry serialized flag set")
- } /* end if */
+ /* If the parent has a 'notify' callback, send a 'child entry serialized' notice */
+ if (parent_entry->type->notify &&
+ (parent_entry->type->notify)(H5C_NOTIFY_ACTION_CHILD_SERIALIZED, parent_entry) < 0)
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTNOTIFY, FAIL,
+ "can't notify parent about child entry serialized flag set")
+ } /* end if */
- /* Shrink or free the parent array if apporpriate */
- if (child_entry->flush_dep_nparents == 0) {
- child_entry->flush_dep_parent =
- H5FL_SEQ_FREE(H5C_cache_entry_ptr_t, child_entry->flush_dep_parent);
- child_entry->flush_dep_parent_nalloc = 0;
- } /* end if */
- else if (child_entry->flush_dep_parent_nalloc > H5C_FLUSH_DEP_PARENT_INIT &&
- child_entry->flush_dep_nparents <= (child_entry->flush_dep_parent_nalloc / 4)) {
- if (NULL == (child_entry->flush_dep_parent =
- H5FL_SEQ_REALLOC(H5C_cache_entry_ptr_t, child_entry->flush_dep_parent,
- child_entry->flush_dep_parent_nalloc / 4)))
- HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL,
- "memory allocation failed for flush dependency parent list")
- child_entry->flush_dep_parent_nalloc /= 4;
- } /* end if */
+ /* Shrink or free the parent array if apporpriate */
+ if (child_entry->flush_dep_nparents == 0) {
+ child_entry->flush_dep_parent = H5FL_SEQ_FREE(H5C_cache_entry_ptr_t, child_entry->flush_dep_parent);
+ child_entry->flush_dep_parent_nalloc = 0;
+ } /* end if */
+ else if (child_entry->flush_dep_parent_nalloc > H5C_FLUSH_DEP_PARENT_INIT &&
+ child_entry->flush_dep_nparents <= (child_entry->flush_dep_parent_nalloc / 4)) {
+ if (NULL == (child_entry->flush_dep_parent =
+ H5FL_SEQ_REALLOC(H5C_cache_entry_ptr_t, child_entry->flush_dep_parent,
+ child_entry->flush_dep_parent_nalloc / 4)))
+ HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL,
+ "memory allocation failed for flush dependency parent list")
+ child_entry->flush_dep_parent_nalloc /= 4;
+ } /* end if */
done:
- FUNC_LEAVE_NOAPI(ret_value)
- } /* H5C_destroy_flush_dependency() */
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* H5C_destroy_flush_dependency() */
/*************************************************************************/
/**************************** Private Functions: *************************/
@@ -3674,3229 +3731,3230 @@ done:
*-------------------------------------------------------------------------
*/
#if H5C_COLLECT_CACHE_STATS
- static herr_t H5C__pin_entry_from_client(H5C_t * cache_ptr, H5C_cache_entry_t * entry_ptr)
+static herr_t
+H5C__pin_entry_from_client(H5C_t *cache_ptr, H5C_cache_entry_t *entry_ptr)
#else
static herr_t
H5C__pin_entry_from_client(H5C_t H5_ATTR_UNUSED *cache_ptr, H5C_cache_entry_t *entry_ptr)
#endif
- {
- herr_t ret_value = SUCCEED; /* Return value */
+{
+ herr_t ret_value = SUCCEED; /* Return value */
- FUNC_ENTER_STATIC
+ FUNC_ENTER_STATIC
- /* Sanity checks */
- HDassert(cache_ptr);
- HDassert(entry_ptr);
- HDassert(entry_ptr->is_protected);
+ /* Sanity checks */
+ HDassert(cache_ptr);
+ HDassert(entry_ptr);
+ HDassert(entry_ptr->is_protected);
- /* Check if the entry is already pinned */
- if (entry_ptr->is_pinned) {
- /* Check if the entry was pinned through an explicit pin from a client */
- if (entry_ptr->pinned_from_client)
- HGOTO_ERROR(H5E_CACHE, H5E_CANTPIN, FAIL, "entry is already pinned")
- } /* end if */
- else {
- entry_ptr->is_pinned = TRUE;
+ /* Check if the entry is already pinned */
+ if (entry_ptr->is_pinned) {
+ /* Check if the entry was pinned through an explicit pin from a client */
+ if (entry_ptr->pinned_from_client)
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTPIN, FAIL, "entry is already pinned")
+ } /* end if */
+ else {
+ entry_ptr->is_pinned = TRUE;
- H5C__UPDATE_STATS_FOR_PIN(cache_ptr, entry_ptr)
- } /* end else */
+ H5C__UPDATE_STATS_FOR_PIN(cache_ptr, entry_ptr)
+ } /* end else */
- /* Mark that the entry was pinned through an explicit pin from a client */
- entry_ptr->pinned_from_client = TRUE;
+ /* Mark that the entry was pinned through an explicit pin from a client */
+ entry_ptr->pinned_from_client = TRUE;
done:
- FUNC_LEAVE_NOAPI(ret_value)
- } /* H5C__pin_entry_from_client() */
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* H5C__pin_entry_from_client() */
- /*-------------------------------------------------------------------------
- * Function: H5C__unpin_entry_real()
- *
- * Purpose: Internal routine to unpin a cache entry.
- *
- * Return: Non-negative on success/Negative on failure
- *
- * Programmer: Quincey Koziol
- * 1/6/18
- *
- *-------------------------------------------------------------------------
- */
- static herr_t H5C__unpin_entry_real(H5C_t * cache_ptr, H5C_cache_entry_t * entry_ptr, hbool_t update_rp)
- {
- herr_t ret_value = SUCCEED; /* Return value */
+/*-------------------------------------------------------------------------
+ * Function: H5C__unpin_entry_real()
+ *
+ * Purpose: Internal routine to unpin a cache entry.
+ *
+ * Return: Non-negative on success/Negative on failure
+ *
+ * Programmer: Quincey Koziol
+ * 1/6/18
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5C__unpin_entry_real(H5C_t *cache_ptr, H5C_cache_entry_t *entry_ptr, hbool_t update_rp)
+{
+ herr_t ret_value = SUCCEED; /* Return value */
#if H5C_DO_SANITY_CHECKS
- FUNC_ENTER_STATIC
+ FUNC_ENTER_STATIC
#else
FUNC_ENTER_STATIC_NOERR
#endif
- /* Sanity checking */
- HDassert(cache_ptr);
- HDassert(entry_ptr);
- HDassert(entry_ptr->is_pinned);
+ /* Sanity checking */
+ HDassert(cache_ptr);
+ HDassert(entry_ptr);
+ HDassert(entry_ptr->is_pinned);
- /* If requested, update the replacement policy if the entry is not protected */
- if (update_rp && !entry_ptr->is_protected)
- H5C__UPDATE_RP_FOR_UNPIN(cache_ptr, entry_ptr, FAIL)
+ /* If requested, update the replacement policy if the entry is not protected */
+ if (update_rp && !entry_ptr->is_protected)
+ H5C__UPDATE_RP_FOR_UNPIN(cache_ptr, entry_ptr, FAIL)
- /* Unpin the entry now */
- entry_ptr->is_pinned = FALSE;
+ /* Unpin the entry now */
+ entry_ptr->is_pinned = FALSE;
- /* Update the stats for an unpin operation */
- H5C__UPDATE_STATS_FOR_UNPIN(cache_ptr, entry_ptr)
+ /* Update the stats for an unpin operation */
+ H5C__UPDATE_STATS_FOR_UNPIN(cache_ptr, entry_ptr)
#if H5C_DO_SANITY_CHECKS
done:
#endif
- FUNC_LEAVE_NOAPI(ret_value)
- } /* H5C__unpin_entry_real() */
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* H5C__unpin_entry_real() */
- /*-------------------------------------------------------------------------
- * Function: H5C__unpin_entry_from_client()
- *
- * Purpose: Internal routine to unpin a cache entry from a client action.
- *
- * Return: Non-negative on success/Negative on failure
- *
- * Programmer: Quincey Koziol
- * 3/24/09
- *
- *-------------------------------------------------------------------------
- */
- static herr_t H5C__unpin_entry_from_client(H5C_t * cache_ptr, H5C_cache_entry_t * entry_ptr,
- hbool_t update_rp)
- {
- herr_t ret_value = SUCCEED; /* Return value */
+/*-------------------------------------------------------------------------
+ * Function: H5C__unpin_entry_from_client()
+ *
+ * Purpose: Internal routine to unpin a cache entry from a client action.
+ *
+ * Return: Non-negative on success/Negative on failure
+ *
+ * Programmer: Quincey Koziol
+ * 3/24/09
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5C__unpin_entry_from_client(H5C_t *cache_ptr, H5C_cache_entry_t *entry_ptr, hbool_t update_rp)
+{
+ herr_t ret_value = SUCCEED; /* Return value */
- FUNC_ENTER_STATIC
+ FUNC_ENTER_STATIC
- /* Sanity checking */
- HDassert(cache_ptr);
- HDassert(entry_ptr);
+ /* Sanity checking */
+ HDassert(cache_ptr);
+ HDassert(entry_ptr);
- /* Error checking (should be sanity checks?) */
- if (!entry_ptr->is_pinned)
- HGOTO_ERROR(H5E_CACHE, H5E_CANTUNPIN, FAIL, "entry isn't pinned")
- if (!entry_ptr->pinned_from_client)
- HGOTO_ERROR(H5E_CACHE, H5E_CANTUNPIN, FAIL, "entry wasn't pinned by cache client")
+ /* Error checking (should be sanity checks?) */
+ if (!entry_ptr->is_pinned)
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTUNPIN, FAIL, "entry isn't pinned")
+ if (!entry_ptr->pinned_from_client)
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTUNPIN, FAIL, "entry wasn't pinned by cache client")
- /* Check if the entry is not pinned from a flush dependency */
- if (!entry_ptr->pinned_from_cache)
- if (H5C__unpin_entry_real(cache_ptr, entry_ptr, update_rp) < 0)
- HGOTO_ERROR(H5E_CACHE, H5E_CANTUNPIN, FAIL, "can't unpin entry")
+ /* Check if the entry is not pinned from a flush dependency */
+ if (!entry_ptr->pinned_from_cache)
+ if (H5C__unpin_entry_real(cache_ptr, entry_ptr, update_rp) < 0)
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTUNPIN, FAIL, "can't unpin entry")
- /* Mark the entry as explicitly unpinned by the client */
- entry_ptr->pinned_from_client = FALSE;
+ /* Mark the entry as explicitly unpinned by the client */
+ entry_ptr->pinned_from_client = FALSE;
done:
- FUNC_LEAVE_NOAPI(ret_value)
- } /* H5C__unpin_entry_from_client() */
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* H5C__unpin_entry_from_client() */
- /*-------------------------------------------------------------------------
- *
- * Function: H5C__auto_adjust_cache_size
- *
- * Purpose: Obtain the current full cache hit rate, and compare it
- * with the hit rate thresholds for modifying cache size.
- * If one of the thresholds has been crossed, adjusts the
- * size of the cache accordingly.
- *
- * The function then resets the full cache hit rate
- * statistics, and exits.
- *
- * Return: Non-negative on success/Negative on failure or if there was
- * an attempt to flush a protected item.
- *
- *
- * Programmer: John Mainzer, 10/7/04
- *
- *-------------------------------------------------------------------------
- */
- static herr_t H5C__auto_adjust_cache_size(H5F_t * f, hbool_t write_permitted)
- {
- H5C_t * cache_ptr = f->shared->cache;
- hbool_t reentrant_call = FALSE;
- hbool_t inserted_epoch_marker = FALSE;
- size_t new_max_cache_size = 0;
- size_t old_max_cache_size = 0;
- size_t new_min_clean_size = 0;
- size_t old_min_clean_size = 0;
- double hit_rate;
- enum H5C_resize_status status = in_spec; /* will change if needed */
- herr_t ret_value = SUCCEED; /* Return value */
-
- FUNC_ENTER_STATIC
-
- HDassert(f);
- HDassert(cache_ptr);
- HDassert(cache_ptr->magic == H5C__H5C_T_MAGIC);
- HDassert(cache_ptr->cache_accesses >= (cache_ptr->resize_ctl).epoch_length);
- HDassert((double)0.0f <= (cache_ptr->resize_ctl).min_clean_fraction);
- HDassert((cache_ptr->resize_ctl).min_clean_fraction <= (double)100.0f);
-
- /* check to see if cache_ptr->resize_in_progress is TRUE. If it, this
- * is a re-entrant call via a client callback called in the resize
- * process. To avoid an infinite recursion, set reentrant_call to
- * TRUE, and goto done.
- */
- if (cache_ptr->resize_in_progress) {
- reentrant_call = TRUE;
- HGOTO_DONE(SUCCEED)
- } /* end if */
+/*-------------------------------------------------------------------------
+ *
+ * Function: H5C__auto_adjust_cache_size
+ *
+ * Purpose: Obtain the current full cache hit rate, and compare it
+ * with the hit rate thresholds for modifying cache size.
+ * If one of the thresholds has been crossed, adjusts the
+ * size of the cache accordingly.
+ *
+ * The function then resets the full cache hit rate
+ * statistics, and exits.
+ *
+ * Return: Non-negative on success/Negative on failure or if there was
+ * an attempt to flush a protected item.
+ *
+ *
+ * Programmer: John Mainzer, 10/7/04
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5C__auto_adjust_cache_size(H5F_t *f, hbool_t write_permitted)
+{
+ H5C_t * cache_ptr = f->shared->cache;
+ hbool_t reentrant_call = FALSE;
+ hbool_t inserted_epoch_marker = FALSE;
+ size_t new_max_cache_size = 0;
+ size_t old_max_cache_size = 0;
+ size_t new_min_clean_size = 0;
+ size_t old_min_clean_size = 0;
+ double hit_rate;
+ enum H5C_resize_status status = in_spec; /* will change if needed */
+ herr_t ret_value = SUCCEED; /* Return value */
+
+ FUNC_ENTER_STATIC
- cache_ptr->resize_in_progress = TRUE;
+ HDassert(f);
+ HDassert(cache_ptr);
+ HDassert(cache_ptr->magic == H5C__H5C_T_MAGIC);
+ HDassert(cache_ptr->cache_accesses >= (cache_ptr->resize_ctl).epoch_length);
+ HDassert((double)0.0f <= (cache_ptr->resize_ctl).min_clean_fraction);
+ HDassert((cache_ptr->resize_ctl).min_clean_fraction <= (double)100.0f);
+
+ /* check to see if cache_ptr->resize_in_progress is TRUE. If it, this
+ * is a re-entrant call via a client callback called in the resize
+ * process. To avoid an infinite recursion, set reentrant_call to
+ * TRUE, and goto done.
+ */
+ if (cache_ptr->resize_in_progress) {
+ reentrant_call = TRUE;
+ HGOTO_DONE(SUCCEED)
+ } /* end if */
- if (!cache_ptr->resize_enabled)
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Auto cache resize disabled")
+ cache_ptr->resize_in_progress = TRUE;
- HDassert(((cache_ptr->resize_ctl).incr_mode != H5C_incr__off) ||
- ((cache_ptr->resize_ctl).decr_mode != H5C_decr__off));
+ if (!cache_ptr->resize_enabled)
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Auto cache resize disabled")
- if (H5C_get_cache_hit_rate(cache_ptr, &hit_rate) != SUCCEED)
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Can't get hit rate")
+ HDassert(((cache_ptr->resize_ctl).incr_mode != H5C_incr__off) ||
+ ((cache_ptr->resize_ctl).decr_mode != H5C_decr__off));
- HDassert(((double)0.0f <= hit_rate) && (hit_rate <= (double)1.0f));
+ if (H5C_get_cache_hit_rate(cache_ptr, &hit_rate) != SUCCEED)
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Can't get hit rate")
- switch ((cache_ptr->resize_ctl).incr_mode) {
- case H5C_incr__off:
- if (cache_ptr->size_increase_possible)
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "size_increase_possible but H5C_incr__off?!?!?")
- break;
+ HDassert(((double)0.0f <= hit_rate) && (hit_rate <= (double)1.0f));
- case H5C_incr__threshold:
- if (hit_rate < (cache_ptr->resize_ctl).lower_hr_threshold) {
+ switch ((cache_ptr->resize_ctl).incr_mode) {
+ case H5C_incr__off:
+ if (cache_ptr->size_increase_possible)
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "size_increase_possible but H5C_incr__off?!?!?")
+ break;
- if (!cache_ptr->size_increase_possible) {
+ case H5C_incr__threshold:
+ if (hit_rate < (cache_ptr->resize_ctl).lower_hr_threshold) {
- status = increase_disabled;
- }
- else if (cache_ptr->max_cache_size >= (cache_ptr->resize_ctl).max_size) {
+ if (!cache_ptr->size_increase_possible) {
- HDassert(cache_ptr->max_cache_size == (cache_ptr->resize_ctl).max_size);
- status = at_max_size;
- }
- else if (!cache_ptr->cache_full) {
+ status = increase_disabled;
+ }
+ else if (cache_ptr->max_cache_size >= (cache_ptr->resize_ctl).max_size) {
- status = not_full;
- }
- else {
+ HDassert(cache_ptr->max_cache_size == (cache_ptr->resize_ctl).max_size);
+ status = at_max_size;
+ }
+ else if (!cache_ptr->cache_full) {
- new_max_cache_size = (size_t)(((double)(cache_ptr->max_cache_size)) *
- (cache_ptr->resize_ctl).increment);
+ status = not_full;
+ }
+ else {
- /* clip to max size if necessary */
- if (new_max_cache_size > (cache_ptr->resize_ctl).max_size) {
+ new_max_cache_size =
+ (size_t)(((double)(cache_ptr->max_cache_size)) * (cache_ptr->resize_ctl).increment);
- new_max_cache_size = (cache_ptr->resize_ctl).max_size;
- }
+ /* clip to max size if necessary */
+ if (new_max_cache_size > (cache_ptr->resize_ctl).max_size) {
- /* clip to max increment if necessary */
- if (((cache_ptr->resize_ctl).apply_max_increment) &&
- ((cache_ptr->max_cache_size + (cache_ptr->resize_ctl).max_increment) <
- new_max_cache_size)) {
+ new_max_cache_size = (cache_ptr->resize_ctl).max_size;
+ }
- new_max_cache_size =
- cache_ptr->max_cache_size + (cache_ptr->resize_ctl).max_increment;
- }
+ /* clip to max increment if necessary */
+ if (((cache_ptr->resize_ctl).apply_max_increment) &&
+ ((cache_ptr->max_cache_size + (cache_ptr->resize_ctl).max_increment) <
+ new_max_cache_size)) {
- status = increase;
+ new_max_cache_size =
+ cache_ptr->max_cache_size + (cache_ptr->resize_ctl).max_increment;
}
+
+ status = increase;
}
- break;
+ }
+ break;
- default:
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "unknown incr_mode")
- }
+ default:
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "unknown incr_mode")
+ }
- /* If the decr_mode is either age out or age out with threshold, we
- * must run the marker maintenance code, whether we run the size
- * reduction code or not. We do this in two places -- here we
- * insert a new marker if the number of active epoch markers is
- * is less than the the current epochs before eviction, and after
- * the ageout call, we cycle the markers.
- *
- * However, we can't call the ageout code or cycle the markers
- * unless there was a full complement of markers in place on
- * entry. The inserted_epoch_marker flag is used to track this.
- */
+ /* If the decr_mode is either age out or age out with threshold, we
+ * must run the marker maintenance code, whether we run the size
+ * reduction code or not. We do this in two places -- here we
+ * insert a new marker if the number of active epoch markers is
+ * is less than the the current epochs before eviction, and after
+ * the ageout call, we cycle the markers.
+ *
+ * However, we can't call the ageout code or cycle the markers
+ * unless there was a full complement of markers in place on
+ * entry. The inserted_epoch_marker flag is used to track this.
+ */
- if ((((cache_ptr->resize_ctl).decr_mode == H5C_decr__age_out) ||
- ((cache_ptr->resize_ctl).decr_mode == H5C_decr__age_out_with_threshold)) &&
- (cache_ptr->epoch_markers_active < (cache_ptr->resize_ctl).epochs_before_eviction)) {
+ if ((((cache_ptr->resize_ctl).decr_mode == H5C_decr__age_out) ||
+ ((cache_ptr->resize_ctl).decr_mode == H5C_decr__age_out_with_threshold)) &&
+ (cache_ptr->epoch_markers_active < (cache_ptr->resize_ctl).epochs_before_eviction)) {
- if (H5C__autoadjust__ageout__insert_new_marker(cache_ptr) < 0)
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "can't insert new epoch marker")
+ if (H5C__autoadjust__ageout__insert_new_marker(cache_ptr) < 0)
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "can't insert new epoch marker")
- inserted_epoch_marker = TRUE;
- }
+ inserted_epoch_marker = TRUE;
+ }
- /* don't run the cache size decrease code unless the cache size
- * increase code is disabled, or the size increase code sees no need
- * for action. In either case, status == in_spec at this point.
- */
+ /* don't run the cache size decrease code unless the cache size
+ * increase code is disabled, or the size increase code sees no need
+ * for action. In either case, status == in_spec at this point.
+ */
- if (status == in_spec) {
+ if (status == in_spec) {
- switch ((cache_ptr->resize_ctl).decr_mode) {
- case H5C_decr__off:
- break;
+ switch ((cache_ptr->resize_ctl).decr_mode) {
+ case H5C_decr__off:
+ break;
- case H5C_decr__threshold:
- if (hit_rate > (cache_ptr->resize_ctl).upper_hr_threshold) {
+ case H5C_decr__threshold:
+ if (hit_rate > (cache_ptr->resize_ctl).upper_hr_threshold) {
- if (!cache_ptr->size_decrease_possible) {
+ if (!cache_ptr->size_decrease_possible) {
- status = decrease_disabled;
- }
- else if (cache_ptr->max_cache_size <= (cache_ptr->resize_ctl).min_size) {
-
- HDassert(cache_ptr->max_cache_size == (cache_ptr->resize_ctl).min_size);
- status = at_min_size;
- }
- else {
+ status = decrease_disabled;
+ }
+ else if (cache_ptr->max_cache_size <= (cache_ptr->resize_ctl).min_size) {
- new_max_cache_size = (size_t)(((double)(cache_ptr->max_cache_size)) *
- (cache_ptr->resize_ctl).decrement);
+ HDassert(cache_ptr->max_cache_size == (cache_ptr->resize_ctl).min_size);
+ status = at_min_size;
+ }
+ else {
- /* clip to min size if necessary */
- if (new_max_cache_size < (cache_ptr->resize_ctl).min_size) {
+ new_max_cache_size = (size_t)(((double)(cache_ptr->max_cache_size)) *
+ (cache_ptr->resize_ctl).decrement);
- new_max_cache_size = (cache_ptr->resize_ctl).min_size;
- }
+ /* clip to min size if necessary */
+ if (new_max_cache_size < (cache_ptr->resize_ctl).min_size) {
- /* clip to max decrement if necessary */
- if (((cache_ptr->resize_ctl).apply_max_decrement) &&
- (((cache_ptr->resize_ctl).max_decrement + new_max_cache_size) <
- cache_ptr->max_cache_size)) {
+ new_max_cache_size = (cache_ptr->resize_ctl).min_size;
+ }
- new_max_cache_size =
- cache_ptr->max_cache_size - (cache_ptr->resize_ctl).max_decrement;
- }
+ /* clip to max decrement if necessary */
+ if (((cache_ptr->resize_ctl).apply_max_decrement) &&
+ (((cache_ptr->resize_ctl).max_decrement + new_max_cache_size) <
+ cache_ptr->max_cache_size)) {
- status = decrease;
+ new_max_cache_size =
+ cache_ptr->max_cache_size - (cache_ptr->resize_ctl).max_decrement;
}
+
+ status = decrease;
}
- break;
+ }
+ break;
- case H5C_decr__age_out_with_threshold:
- case H5C_decr__age_out:
- if (!inserted_epoch_marker) {
- if (!cache_ptr->size_decrease_possible)
- status = decrease_disabled;
- else {
- if (H5C__autoadjust__ageout(f, hit_rate, &status, &new_max_cache_size,
- write_permitted) < 0)
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "ageout code failed")
- } /* end else */
- } /* end if */
- break;
+ case H5C_decr__age_out_with_threshold:
+ case H5C_decr__age_out:
+ if (!inserted_epoch_marker) {
+ if (!cache_ptr->size_decrease_possible)
+ status = decrease_disabled;
+ else {
+ if (H5C__autoadjust__ageout(f, hit_rate, &status, &new_max_cache_size,
+ write_permitted) < 0)
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "ageout code failed")
+ } /* end else */
+ } /* end if */
+ break;
- default:
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "unknown incr_mode")
- }
+ default:
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "unknown incr_mode")
}
+ }
- /* cycle the epoch markers here if appropriate */
- if ((((cache_ptr->resize_ctl).decr_mode == H5C_decr__age_out) ||
- ((cache_ptr->resize_ctl).decr_mode == H5C_decr__age_out_with_threshold)) &&
- (!inserted_epoch_marker)) {
+ /* cycle the epoch markers here if appropriate */
+ if ((((cache_ptr->resize_ctl).decr_mode == H5C_decr__age_out) ||
+ ((cache_ptr->resize_ctl).decr_mode == H5C_decr__age_out_with_threshold)) &&
+ (!inserted_epoch_marker)) {
- /* move last epoch marker to the head of the LRU list */
- if (H5C__autoadjust__ageout__cycle_epoch_marker(cache_ptr) < 0)
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "error cycling epoch marker")
- }
+ /* move last epoch marker to the head of the LRU list */
+ if (H5C__autoadjust__ageout__cycle_epoch_marker(cache_ptr) < 0)
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "error cycling epoch marker")
+ }
- if ((status == increase) || (status == decrease)) {
+ if ((status == increase) || (status == decrease)) {
- old_max_cache_size = cache_ptr->max_cache_size;
- old_min_clean_size = cache_ptr->min_clean_size;
+ old_max_cache_size = cache_ptr->max_cache_size;
+ old_min_clean_size = cache_ptr->min_clean_size;
- new_min_clean_size =
- (size_t)((double)new_max_cache_size * ((cache_ptr->resize_ctl).min_clean_fraction));
+ new_min_clean_size =
+ (size_t)((double)new_max_cache_size * ((cache_ptr->resize_ctl).min_clean_fraction));
- /* new_min_clean_size is of size_t, and thus must be non-negative.
- * Hence we have
- *
- * ( 0 <= new_min_clean_size ).
- *
- * by definition.
- */
- HDassert(new_min_clean_size <= new_max_cache_size);
- HDassert((cache_ptr->resize_ctl).min_size <= new_max_cache_size);
- HDassert(new_max_cache_size <= (cache_ptr->resize_ctl).max_size);
+ /* new_min_clean_size is of size_t, and thus must be non-negative.
+ * Hence we have
+ *
+ * ( 0 <= new_min_clean_size ).
+ *
+ * by definition.
+ */
+ HDassert(new_min_clean_size <= new_max_cache_size);
+ HDassert((cache_ptr->resize_ctl).min_size <= new_max_cache_size);
+ HDassert(new_max_cache_size <= (cache_ptr->resize_ctl).max_size);
- cache_ptr->max_cache_size = new_max_cache_size;
- cache_ptr->min_clean_size = new_min_clean_size;
+ cache_ptr->max_cache_size = new_max_cache_size;
+ cache_ptr->min_clean_size = new_min_clean_size;
- if (status == increase) {
+ if (status == increase) {
- cache_ptr->cache_full = FALSE;
- }
- else if (status == decrease) {
+ cache_ptr->cache_full = FALSE;
+ }
+ else if (status == decrease) {
- cache_ptr->size_decreased = TRUE;
- }
+ cache_ptr->size_decreased = TRUE;
+ }
- /* update flash cache size increase fields as appropriate */
- if (cache_ptr->flash_size_increase_possible) {
+ /* update flash cache size increase fields as appropriate */
+ if (cache_ptr->flash_size_increase_possible) {
- switch ((cache_ptr->resize_ctl).flash_incr_mode) {
- case H5C_flash_incr__off:
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL,
- "flash_size_increase_possible but H5C_flash_incr__off?!")
- break;
+ switch ((cache_ptr->resize_ctl).flash_incr_mode) {
+ case H5C_flash_incr__off:
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL,
+ "flash_size_increase_possible but H5C_flash_incr__off?!")
+ break;
- case H5C_flash_incr__add_space:
- cache_ptr->flash_size_increase_threshold =
- (size_t)(((double)(cache_ptr->max_cache_size)) *
- ((cache_ptr->resize_ctl).flash_threshold));
- break;
+ case H5C_flash_incr__add_space:
+ cache_ptr->flash_size_increase_threshold = (size_t)(
+ ((double)(cache_ptr->max_cache_size)) * ((cache_ptr->resize_ctl).flash_threshold));
+ break;
- default: /* should be unreachable */
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Unknown flash_incr_mode?!?!?")
- break;
- }
+ default: /* should be unreachable */
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Unknown flash_incr_mode?!?!?")
+ break;
}
}
+ }
- if ((cache_ptr->resize_ctl).rpt_fcn != NULL) {
- (*((cache_ptr->resize_ctl).rpt_fcn))(cache_ptr, H5C__CURR_AUTO_RESIZE_RPT_FCN_VER, hit_rate,
- status, old_max_cache_size, new_max_cache_size,
- old_min_clean_size, new_min_clean_size);
- }
+ if ((cache_ptr->resize_ctl).rpt_fcn != NULL) {
+ (*((cache_ptr->resize_ctl).rpt_fcn))(cache_ptr, H5C__CURR_AUTO_RESIZE_RPT_FCN_VER, hit_rate, status,
+ old_max_cache_size, new_max_cache_size, old_min_clean_size,
+ new_min_clean_size);
+ }
- if (H5C_reset_cache_hit_rate_stats(cache_ptr) < 0)
- /* this should be impossible... */
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "H5C_reset_cache_hit_rate_stats failed")
+ if (H5C_reset_cache_hit_rate_stats(cache_ptr) < 0)
+ /* this should be impossible... */
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "H5C_reset_cache_hit_rate_stats failed")
done:
- /* Sanity checks */
- HDassert(cache_ptr->resize_in_progress);
- if (!reentrant_call)
- cache_ptr->resize_in_progress = FALSE;
- HDassert((!reentrant_call) || (cache_ptr->resize_in_progress));
-
- FUNC_LEAVE_NOAPI(ret_value)
- } /* H5C__auto_adjust_cache_size() */
+ /* Sanity checks */
+ HDassert(cache_ptr->resize_in_progress);
+ if (!reentrant_call)
+ cache_ptr->resize_in_progress = FALSE;
+ HDassert((!reentrant_call) || (cache_ptr->resize_in_progress));
- /*-------------------------------------------------------------------------
- *
- * Function: H5C__autoadjust__ageout
- *
- * Purpose: Implement the ageout automatic cache size decrement
- * algorithm. Note that while this code evicts aged out
- * entries, the code does not change the maximum cache size.
- * Instead, the function simply computes the new value (if
- * any change is indicated) and reports this value in
- * *new_max_cache_size_ptr.
- *
- * Return: Non-negative on success/Negative on failure or if there was
- * an attempt to flush a protected item.
- *
- *
- * Programmer: John Mainzer, 11/18/04
- *
- *-------------------------------------------------------------------------
- */
- static herr_t H5C__autoadjust__ageout(H5F_t * f, double hit_rate, enum H5C_resize_status *status_ptr,
- size_t *new_max_cache_size_ptr, hbool_t write_permitted)
- {
- H5C_t *cache_ptr = f->shared->cache;
- size_t test_size;
- herr_t ret_value = SUCCEED; /* Return value */
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* H5C__auto_adjust_cache_size() */
- FUNC_ENTER_STATIC
+/*-------------------------------------------------------------------------
+ *
+ * Function: H5C__autoadjust__ageout
+ *
+ * Purpose: Implement the ageout automatic cache size decrement
+ * algorithm. Note that while this code evicts aged out
+ * entries, the code does not change the maximum cache size.
+ * Instead, the function simply computes the new value (if
+ * any change is indicated) and reports this value in
+ * *new_max_cache_size_ptr.
+ *
+ * Return: Non-negative on success/Negative on failure or if there was
+ * an attempt to flush a protected item.
+ *
+ *
+ * Programmer: John Mainzer, 11/18/04
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5C__autoadjust__ageout(H5F_t *f, double hit_rate, enum H5C_resize_status *status_ptr,
+ size_t *new_max_cache_size_ptr, hbool_t write_permitted)
+{
+ H5C_t *cache_ptr = f->shared->cache;
+ size_t test_size;
+ herr_t ret_value = SUCCEED; /* Return value */
- HDassert(f);
- HDassert(cache_ptr);
- HDassert(cache_ptr->magic == H5C__H5C_T_MAGIC);
- HDassert((status_ptr) && (*status_ptr == in_spec));
- HDassert((new_max_cache_size_ptr) && (*new_max_cache_size_ptr == 0));
+ FUNC_ENTER_STATIC
- /* remove excess epoch markers if any */
- if (cache_ptr->epoch_markers_active > (cache_ptr->resize_ctl).epochs_before_eviction)
- if (H5C__autoadjust__ageout__remove_excess_markers(cache_ptr) < 0)
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "can't remove excess epoch markers")
+ HDassert(f);
+ HDassert(cache_ptr);
+ HDassert(cache_ptr->magic == H5C__H5C_T_MAGIC);
+ HDassert((status_ptr) && (*status_ptr == in_spec));
+ HDassert((new_max_cache_size_ptr) && (*new_max_cache_size_ptr == 0));
- if (((cache_ptr->resize_ctl).decr_mode == H5C_decr__age_out) ||
- (((cache_ptr->resize_ctl).decr_mode == H5C_decr__age_out_with_threshold) &&
- (hit_rate >= (cache_ptr->resize_ctl).upper_hr_threshold))) {
+ /* remove excess epoch markers if any */
+ if (cache_ptr->epoch_markers_active > (cache_ptr->resize_ctl).epochs_before_eviction)
+ if (H5C__autoadjust__ageout__remove_excess_markers(cache_ptr) < 0)
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "can't remove excess epoch markers")
- if (cache_ptr->max_cache_size > (cache_ptr->resize_ctl).min_size) {
+ if (((cache_ptr->resize_ctl).decr_mode == H5C_decr__age_out) ||
+ (((cache_ptr->resize_ctl).decr_mode == H5C_decr__age_out_with_threshold) &&
+ (hit_rate >= (cache_ptr->resize_ctl).upper_hr_threshold))) {
- /* evict aged out cache entries if appropriate... */
- if (H5C__autoadjust__ageout__evict_aged_out_entries(f, write_permitted) < 0)
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "error flushing aged out entries")
+ if (cache_ptr->max_cache_size > (cache_ptr->resize_ctl).min_size) {
- /* ... and then reduce cache size if appropriate */
- if (cache_ptr->index_size < cache_ptr->max_cache_size) {
+ /* evict aged out cache entries if appropriate... */
+ if (H5C__autoadjust__ageout__evict_aged_out_entries(f, write_permitted) < 0)
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "error flushing aged out entries")
- if ((cache_ptr->resize_ctl).apply_empty_reserve) {
+ /* ... and then reduce cache size if appropriate */
+ if (cache_ptr->index_size < cache_ptr->max_cache_size) {
- test_size = (size_t)(((double)cache_ptr->index_size) /
- (1 - (cache_ptr->resize_ctl).empty_reserve));
+ if ((cache_ptr->resize_ctl).apply_empty_reserve) {
- if (test_size < cache_ptr->max_cache_size) {
+ test_size = (size_t)(((double)cache_ptr->index_size) /
+ (1 - (cache_ptr->resize_ctl).empty_reserve));
- *status_ptr = decrease;
- *new_max_cache_size_ptr = test_size;
- }
- }
- else {
+ if (test_size < cache_ptr->max_cache_size) {
*status_ptr = decrease;
- *new_max_cache_size_ptr = cache_ptr->index_size;
+ *new_max_cache_size_ptr = test_size;
}
+ }
+ else {
- if (*status_ptr == decrease) {
+ *status_ptr = decrease;
+ *new_max_cache_size_ptr = cache_ptr->index_size;
+ }
- /* clip to min size if necessary */
- if (*new_max_cache_size_ptr < (cache_ptr->resize_ctl).min_size) {
+ if (*status_ptr == decrease) {
- *new_max_cache_size_ptr = (cache_ptr->resize_ctl).min_size;
- }
+ /* clip to min size if necessary */
+ if (*new_max_cache_size_ptr < (cache_ptr->resize_ctl).min_size) {
- /* clip to max decrement if necessary */
- if (((cache_ptr->resize_ctl).apply_max_decrement) &&
- (((cache_ptr->resize_ctl).max_decrement + *new_max_cache_size_ptr) <
- cache_ptr->max_cache_size)) {
+ *new_max_cache_size_ptr = (cache_ptr->resize_ctl).min_size;
+ }
- *new_max_cache_size_ptr =
- cache_ptr->max_cache_size - (cache_ptr->resize_ctl).max_decrement;
- }
+ /* clip to max decrement if necessary */
+ if (((cache_ptr->resize_ctl).apply_max_decrement) &&
+ (((cache_ptr->resize_ctl).max_decrement + *new_max_cache_size_ptr) <
+ cache_ptr->max_cache_size)) {
+
+ *new_max_cache_size_ptr =
+ cache_ptr->max_cache_size - (cache_ptr->resize_ctl).max_decrement;
}
}
}
- else {
+ }
+ else {
- *status_ptr = at_min_size;
- }
+ *status_ptr = at_min_size;
}
+ }
done:
- FUNC_LEAVE_NOAPI(ret_value)
+ FUNC_LEAVE_NOAPI(ret_value)
- } /* H5C__autoadjust__ageout() */
+} /* H5C__autoadjust__ageout() */
- /*-------------------------------------------------------------------------
- *
- * Function: H5C__autoadjust__ageout__cycle_epoch_marker
- *
- * Purpose: Remove the oldest epoch marker from the LRU list,
- * and reinsert it at the head of the LRU list. Also
- * remove the epoch marker's index from the head of the
- * ring buffer, and re-insert it at the tail of the ring
- * buffer.
- *
- * Return: SUCCEED on success/FAIL on failure.
- *
- * Programmer: John Mainzer, 11/22/04
- *
- *-------------------------------------------------------------------------
- */
- static herr_t H5C__autoadjust__ageout__cycle_epoch_marker(H5C_t * cache_ptr)
- {
- int i;
- herr_t ret_value = SUCCEED; /* Return value */
+/*-------------------------------------------------------------------------
+ *
+ * Function: H5C__autoadjust__ageout__cycle_epoch_marker
+ *
+ * Purpose: Remove the oldest epoch marker from the LRU list,
+ * and reinsert it at the head of the LRU list. Also
+ * remove the epoch marker's index from the head of the
+ * ring buffer, and re-insert it at the tail of the ring
+ * buffer.
+ *
+ * Return: SUCCEED on success/FAIL on failure.
+ *
+ * Programmer: John Mainzer, 11/22/04
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5C__autoadjust__ageout__cycle_epoch_marker(H5C_t *cache_ptr)
+{
+ int i;
+ herr_t ret_value = SUCCEED; /* Return value */
- FUNC_ENTER_STATIC
+ FUNC_ENTER_STATIC
- HDassert(cache_ptr);
- HDassert(cache_ptr->magic == H5C__H5C_T_MAGIC);
+ HDassert(cache_ptr);
+ HDassert(cache_ptr->magic == H5C__H5C_T_MAGIC);
- if (cache_ptr->epoch_markers_active <= 0)
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "No active epoch markers on entry?!?!?")
+ if (cache_ptr->epoch_markers_active <= 0)
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "No active epoch markers on entry?!?!?")
- /* remove the last marker from both the ring buffer and the LRU list */
+ /* remove the last marker from both the ring buffer and the LRU list */
- i = cache_ptr->epoch_marker_ringbuf[cache_ptr->epoch_marker_ringbuf_first];
+ i = cache_ptr->epoch_marker_ringbuf[cache_ptr->epoch_marker_ringbuf_first];
- cache_ptr->epoch_marker_ringbuf_first =
- (cache_ptr->epoch_marker_ringbuf_first + 1) % (H5C__MAX_EPOCH_MARKERS + 1);
+ cache_ptr->epoch_marker_ringbuf_first =
+ (cache_ptr->epoch_marker_ringbuf_first + 1) % (H5C__MAX_EPOCH_MARKERS + 1);
- cache_ptr->epoch_marker_ringbuf_size -= 1;
+ cache_ptr->epoch_marker_ringbuf_size -= 1;
- if (cache_ptr->epoch_marker_ringbuf_size < 0)
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "ring buffer underflow")
- if ((cache_ptr->epoch_marker_active)[i] != TRUE)
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "unused marker in LRU?!?")
+ if (cache_ptr->epoch_marker_ringbuf_size < 0)
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "ring buffer underflow")
+ if ((cache_ptr->epoch_marker_active)[i] != TRUE)
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "unused marker in LRU?!?")
- H5C__DLL_REMOVE((&((cache_ptr->epoch_markers)[i])), (cache_ptr)->LRU_head_ptr,
- (cache_ptr)->LRU_tail_ptr, (cache_ptr)->LRU_list_len, (cache_ptr)->LRU_list_size,
- (FAIL))
+ H5C__DLL_REMOVE((&((cache_ptr->epoch_markers)[i])), (cache_ptr)->LRU_head_ptr, (cache_ptr)->LRU_tail_ptr,
+ (cache_ptr)->LRU_list_len, (cache_ptr)->LRU_list_size, (FAIL))
- /* now, re-insert it at the head of the LRU list, and at the tail of
- * the ring buffer.
- */
+ /* now, re-insert it at the head of the LRU list, and at the tail of
+ * the ring buffer.
+ */
- HDassert(((cache_ptr->epoch_markers)[i]).addr == (haddr_t)i);
- HDassert(((cache_ptr->epoch_markers)[i]).next == NULL);
- HDassert(((cache_ptr->epoch_markers)[i]).prev == NULL);
+ HDassert(((cache_ptr->epoch_markers)[i]).addr == (haddr_t)i);
+ HDassert(((cache_ptr->epoch_markers)[i]).next == NULL);
+ HDassert(((cache_ptr->epoch_markers)[i]).prev == NULL);
- cache_ptr->epoch_marker_ringbuf_last =
- (cache_ptr->epoch_marker_ringbuf_last + 1) % (H5C__MAX_EPOCH_MARKERS + 1);
+ cache_ptr->epoch_marker_ringbuf_last =
+ (cache_ptr->epoch_marker_ringbuf_last + 1) % (H5C__MAX_EPOCH_MARKERS + 1);
- (cache_ptr->epoch_marker_ringbuf)[cache_ptr->epoch_marker_ringbuf_last] = i;
+ (cache_ptr->epoch_marker_ringbuf)[cache_ptr->epoch_marker_ringbuf_last] = i;
- cache_ptr->epoch_marker_ringbuf_size += 1;
+ cache_ptr->epoch_marker_ringbuf_size += 1;
- if (cache_ptr->epoch_marker_ringbuf_size > H5C__MAX_EPOCH_MARKERS)
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "ring buffer overflow")
+ if (cache_ptr->epoch_marker_ringbuf_size > H5C__MAX_EPOCH_MARKERS)
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "ring buffer overflow")
- H5C__DLL_PREPEND((&((cache_ptr->epoch_markers)[i])), (cache_ptr)->LRU_head_ptr,
- (cache_ptr)->LRU_tail_ptr, (cache_ptr)->LRU_list_len, (cache_ptr)->LRU_list_size,
- (FAIL))
+ H5C__DLL_PREPEND((&((cache_ptr->epoch_markers)[i])), (cache_ptr)->LRU_head_ptr, (cache_ptr)->LRU_tail_ptr,
+ (cache_ptr)->LRU_list_len, (cache_ptr)->LRU_list_size, (FAIL))
done:
- FUNC_LEAVE_NOAPI(ret_value)
+ FUNC_LEAVE_NOAPI(ret_value)
- } /* H5C__autoadjust__ageout__cycle_epoch_marker() */
+} /* H5C__autoadjust__ageout__cycle_epoch_marker() */
- /*-------------------------------------------------------------------------
- *
- * Function: H5C__autoadjust__ageout__evict_aged_out_entries
- *
- * Purpose: Evict clean entries in the cache that haven't
- * been accessed for at least
- * (cache_ptr->resize_ctl).epochs_before_eviction epochs,
- * and flush dirty entries that haven't been accessed for
- * that amount of time.
- *
- * Depending on configuration, the function will either
- * flush or evict all such entries, or all such entries it
- * encounters until it has freed the maximum amount of space
- * allowed under the maximum decrement.
- *
- * If we are running in parallel mode, writes may not be
- * permitted. If so, the function simply skips any dirty
- * entries it may encounter.
- *
- * The function makes no attempt to maintain the minimum
- * clean size, as there is no guarantee that the cache size
- * will be changed.
- *
- * If there is no cache size change, the minimum clean size
- * constraint will be met through a combination of clean
- * entries and free space in the cache.
- *
- * If there is a cache size reduction, the minimum clean size
- * will be re-calculated, and will be enforced the next time
- * we have to make space in the cache.
- *
- * Observe that this function cannot occasion a read.
- *
- * Return: Non-negative on success/Negative on failure.
- *
- * Programmer: John Mainzer, 11/22/04
- *
- *-------------------------------------------------------------------------
+/*-------------------------------------------------------------------------
+ *
+ * Function: H5C__autoadjust__ageout__evict_aged_out_entries
+ *
+ * Purpose: Evict clean entries in the cache that haven't
+ * been accessed for at least
+ * (cache_ptr->resize_ctl).epochs_before_eviction epochs,
+ * and flush dirty entries that haven't been accessed for
+ * that amount of time.
+ *
+ * Depending on configuration, the function will either
+ * flush or evict all such entries, or all such entries it
+ * encounters until it has freed the maximum amount of space
+ * allowed under the maximum decrement.
+ *
+ * If we are running in parallel mode, writes may not be
+ * permitted. If so, the function simply skips any dirty
+ * entries it may encounter.
+ *
+ * The function makes no attempt to maintain the minimum
+ * clean size, as there is no guarantee that the cache size
+ * will be changed.
+ *
+ * If there is no cache size change, the minimum clean size
+ * constraint will be met through a combination of clean
+ * entries and free space in the cache.
+ *
+ * If there is a cache size reduction, the minimum clean size
+ * will be re-calculated, and will be enforced the next time
+ * we have to make space in the cache.
+ *
+ * Observe that this function cannot occasion a read.
+ *
+ * Return: Non-negative on success/Negative on failure.
+ *
+ * Programmer: John Mainzer, 11/22/04
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5C__autoadjust__ageout__evict_aged_out_entries(H5F_t *f, hbool_t write_permitted)
+{
+ H5C_t * cache_ptr = f->shared->cache;
+ size_t eviction_size_limit;
+ size_t bytes_evicted = 0;
+ hbool_t prev_is_dirty = FALSE;
+ hbool_t restart_scan;
+ H5C_cache_entry_t *entry_ptr;
+ H5C_cache_entry_t *next_ptr;
+ H5C_cache_entry_t *prev_ptr;
+ herr_t ret_value = SUCCEED; /* Return value */
+
+ FUNC_ENTER_STATIC
+
+ HDassert(f);
+ HDassert(cache_ptr);
+ HDassert(cache_ptr->magic == H5C__H5C_T_MAGIC);
+
+ /* if there is a limit on the amount that the cache size can be decrease
+ * in any one round of the cache size reduction algorithm, load that
+ * limit into eviction_size_limit. Otherwise, set eviction_size_limit
+ * to the equivalent of infinity. The current size of the index will
+ * do nicely.
*/
- static herr_t H5C__autoadjust__ageout__evict_aged_out_entries(H5F_t * f, hbool_t write_permitted)
- {
- H5C_t * cache_ptr = f->shared->cache;
- size_t eviction_size_limit;
- size_t bytes_evicted = 0;
- hbool_t prev_is_dirty = FALSE;
- hbool_t restart_scan;
- H5C_cache_entry_t *entry_ptr;
- H5C_cache_entry_t *next_ptr;
- H5C_cache_entry_t *prev_ptr;
- herr_t ret_value = SUCCEED; /* Return value */
+ if ((cache_ptr->resize_ctl).apply_max_decrement) {
- FUNC_ENTER_STATIC
+ eviction_size_limit = (cache_ptr->resize_ctl).max_decrement;
+ }
+ else {
- HDassert(f);
- HDassert(cache_ptr);
- HDassert(cache_ptr->magic == H5C__H5C_T_MAGIC);
+ eviction_size_limit = cache_ptr->index_size; /* i.e. infinity */
+ }
- /* if there is a limit on the amount that the cache size can be decrease
- * in any one round of the cache size reduction algorithm, load that
- * limit into eviction_size_limit. Otherwise, set eviction_size_limit
- * to the equivalent of infinity. The current size of the index will
- * do nicely.
- */
- if ((cache_ptr->resize_ctl).apply_max_decrement) {
+ if (write_permitted) {
- eviction_size_limit = (cache_ptr->resize_ctl).max_decrement;
- }
- else {
+ restart_scan = FALSE;
+ entry_ptr = cache_ptr->LRU_tail_ptr;
- eviction_size_limit = cache_ptr->index_size; /* i.e. infinity */
- }
+ while ((entry_ptr != NULL) && ((entry_ptr->type)->id != H5AC_EPOCH_MARKER_ID) &&
+ (bytes_evicted < eviction_size_limit)) {
+ hbool_t skipping_entry = FALSE;
- if (write_permitted) {
+ HDassert(entry_ptr->magic == H5C__H5C_CACHE_ENTRY_T_MAGIC);
+ HDassert(!(entry_ptr->is_protected));
+ HDassert(!(entry_ptr->is_read_only));
+ HDassert((entry_ptr->ro_ref_count) == 0);
- restart_scan = FALSE;
- entry_ptr = cache_ptr->LRU_tail_ptr;
+ next_ptr = entry_ptr->next;
+ prev_ptr = entry_ptr->prev;
- while ((entry_ptr != NULL) && ((entry_ptr->type)->id != H5AC_EPOCH_MARKER_ID) &&
- (bytes_evicted < eviction_size_limit)) {
- hbool_t skipping_entry = FALSE;
+ if (prev_ptr != NULL)
+ prev_is_dirty = prev_ptr->is_dirty;
- HDassert(entry_ptr->magic == H5C__H5C_CACHE_ENTRY_T_MAGIC);
- HDassert(!(entry_ptr->is_protected));
- HDassert(!(entry_ptr->is_read_only));
- HDassert((entry_ptr->ro_ref_count) == 0);
+ if (entry_ptr->is_dirty) {
+ HDassert(!entry_ptr->prefetched_dirty);
- next_ptr = entry_ptr->next;
- prev_ptr = entry_ptr->prev;
+ /* dirty corked entry is skipped */
+ if (entry_ptr->tag_info && entry_ptr->tag_info->corked)
+ skipping_entry = TRUE;
+ else {
+ /* reset entries_removed_counter and
+ * last_entry_removed_ptr prior to the call to
+ * H5C__flush_single_entry() so that we can spot
+ * unexpected removals of entries from the cache,
+ * and set the restart_scan flag if proceeding
+ * would be likely to cause us to scan an entry
+ * that is no longer in the cache.
+ */
+ cache_ptr->entries_removed_counter = 0;
+ cache_ptr->last_entry_removed_ptr = NULL;
- if (prev_ptr != NULL)
- prev_is_dirty = prev_ptr->is_dirty;
+ if (H5C__flush_single_entry(f, entry_ptr, H5C__NO_FLAGS_SET) < 0)
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "unable to flush entry")
- if (entry_ptr->is_dirty) {
- HDassert(!entry_ptr->prefetched_dirty);
+ if (cache_ptr->entries_removed_counter > 1 ||
+ cache_ptr->last_entry_removed_ptr == prev_ptr)
+ restart_scan = TRUE;
+ } /* end else */
+ } /* end if */
+ else if (!entry_ptr->prefetched_dirty) {
- /* dirty corked entry is skipped */
- if (entry_ptr->tag_info && entry_ptr->tag_info->corked)
- skipping_entry = TRUE;
- else {
- /* reset entries_removed_counter and
- * last_entry_removed_ptr prior to the call to
- * H5C__flush_single_entry() so that we can spot
- * unexpected removals of entries from the cache,
- * and set the restart_scan flag if proceeding
- * would be likely to cause us to scan an entry
- * that is no longer in the cache.
- */
- cache_ptr->entries_removed_counter = 0;
- cache_ptr->last_entry_removed_ptr = NULL;
+ bytes_evicted += entry_ptr->size;
- if (H5C__flush_single_entry(f, entry_ptr, H5C__NO_FLAGS_SET) < 0)
- HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "unable to flush entry")
+ if (H5C__flush_single_entry(
+ f, entry_ptr, H5C__FLUSH_INVALIDATE_FLAG | H5C__DEL_FROM_SLIST_ON_DESTROY_FLAG) < 0)
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "unable to flush entry")
+ } /* end else-if */
+ else {
+ HDassert(!entry_ptr->is_dirty);
+ HDassert(entry_ptr->prefetched_dirty);
- if (cache_ptr->entries_removed_counter > 1 ||
- cache_ptr->last_entry_removed_ptr == prev_ptr)
- restart_scan = TRUE;
- } /* end else */
- } /* end if */
- else if (!entry_ptr->prefetched_dirty) {
+ skipping_entry = TRUE;
+ } /* end else */
- bytes_evicted += entry_ptr->size;
+ if (prev_ptr != NULL) {
+ if (skipping_entry)
+ entry_ptr = prev_ptr;
+ else if (restart_scan || (prev_ptr->is_dirty != prev_is_dirty) ||
+ (prev_ptr->next != next_ptr) || (prev_ptr->is_protected) || (prev_ptr->is_pinned)) {
+ /* Something has happened to the LRU -- start over
+ * from the tail.
+ */
+ restart_scan = FALSE;
+ entry_ptr = cache_ptr->LRU_tail_ptr;
- if (H5C__flush_single_entry(f, entry_ptr,
- H5C__FLUSH_INVALIDATE_FLAG |
- H5C__DEL_FROM_SLIST_ON_DESTROY_FLAG) < 0)
- HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "unable to flush entry")
+ H5C__UPDATE_STATS_FOR_LRU_SCAN_RESTART(cache_ptr)
} /* end else-if */
- else {
- HDassert(!entry_ptr->is_dirty);
- HDassert(entry_ptr->prefetched_dirty);
+ else
+ entry_ptr = prev_ptr;
+ } /* end if */
+ else
+ entry_ptr = NULL;
+ } /* end while */
- skipping_entry = TRUE;
- } /* end else */
+ /* for now at least, don't bother to maintain the minimum clean size,
+ * as the cache should now be less than its maximum size. Due to
+ * the vaguries of the cache size reduction algorthim, we may not
+ * reduce the size of the cache.
+ *
+ * If we do, we will calculate a new minimum clean size, which will
+ * be enforced the next time we try to make space in the cache.
+ *
+ * If we don't, no action is necessary, as we have just evicted and/or
+ * or flushed a bunch of entries and therefore the sum of the clean
+ * and free space in the cache must be greater than or equal to the
+ * min clean space requirement (assuming that requirement was met on
+ * entry).
+ */
- if (prev_ptr != NULL) {
- if (skipping_entry)
- entry_ptr = prev_ptr;
- else if (restart_scan || (prev_ptr->is_dirty != prev_is_dirty) ||
- (prev_ptr->next != next_ptr) || (prev_ptr->is_protected) ||
- (prev_ptr->is_pinned)) {
- /* Something has happened to the LRU -- start over
- * from the tail.
- */
- restart_scan = FALSE;
- entry_ptr = cache_ptr->LRU_tail_ptr;
+ } /* end if */
+ else /* ! write_permitted */ {
+ /* Since we are not allowed to write, all we can do is evict
+ * any clean entries that we may encounter before we either
+ * hit the eviction size limit, or encounter the epoch marker.
+ *
+ * If we are operating read only, this isn't an issue, as there
+ * will not be any dirty entries.
+ *
+ * If we are operating in R/W mode, all the dirty entries we
+ * skip will be flushed the next time we attempt to make space
+ * when writes are permitted. This may have some local
+ * performance implications, but it shouldn't cause any net
+ * slowdown.
+ */
+ HDassert(H5C_MAINTAIN_CLEAN_AND_DIRTY_LRU_LISTS);
+ entry_ptr = cache_ptr->LRU_tail_ptr;
+ while (entry_ptr != NULL && ((entry_ptr->type)->id != H5AC_EPOCH_MARKER_ID) &&
+ (bytes_evicted < eviction_size_limit)) {
+ HDassert(!(entry_ptr->is_protected));
- H5C__UPDATE_STATS_FOR_LRU_SCAN_RESTART(cache_ptr)
- } /* end else-if */
- else
- entry_ptr = prev_ptr;
- } /* end if */
- else
- entry_ptr = NULL;
- } /* end while */
+ prev_ptr = entry_ptr->prev;
- /* for now at least, don't bother to maintain the minimum clean size,
- * as the cache should now be less than its maximum size. Due to
- * the vaguries of the cache size reduction algorthim, we may not
- * reduce the size of the cache.
- *
- * If we do, we will calculate a new minimum clean size, which will
- * be enforced the next time we try to make space in the cache.
- *
- * If we don't, no action is necessary, as we have just evicted and/or
- * or flushed a bunch of entries and therefore the sum of the clean
- * and free space in the cache must be greater than or equal to the
- * min clean space requirement (assuming that requirement was met on
- * entry).
- */
+ if (!(entry_ptr->is_dirty) && !(entry_ptr->prefetched_dirty))
+ if (H5C__flush_single_entry(
+ f, entry_ptr, H5C__FLUSH_INVALIDATE_FLAG | H5C__DEL_FROM_SLIST_ON_DESTROY_FLAG) < 0)
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "unable to flush clean entry")
- } /* end if */
- else /* ! write_permitted */ {
- /* Since we are not allowed to write, all we can do is evict
- * any clean entries that we may encounter before we either
- * hit the eviction size limit, or encounter the epoch marker.
+ /* just skip the entry if it is dirty, as we can't do
+ * anything with it now since we can't write.
*
- * If we are operating read only, this isn't an issue, as there
- * will not be any dirty entries.
- *
- * If we are operating in R/W mode, all the dirty entries we
- * skip will be flushed the next time we attempt to make space
- * when writes are permitted. This may have some local
- * performance implications, but it shouldn't cause any net
- * slowdown.
+ * Since all entries are clean, serialize() will not be called,
+ * and thus we needn't test to see if the LRU has been changed
+ * out from under us.
*/
- HDassert(H5C_MAINTAIN_CLEAN_AND_DIRTY_LRU_LISTS);
- entry_ptr = cache_ptr->LRU_tail_ptr;
- while (entry_ptr != NULL && ((entry_ptr->type)->id != H5AC_EPOCH_MARKER_ID) &&
- (bytes_evicted < eviction_size_limit)) {
- HDassert(!(entry_ptr->is_protected));
-
- prev_ptr = entry_ptr->prev;
-
- if (!(entry_ptr->is_dirty) && !(entry_ptr->prefetched_dirty))
- if (H5C__flush_single_entry(f, entry_ptr,
- H5C__FLUSH_INVALIDATE_FLAG |
- H5C__DEL_FROM_SLIST_ON_DESTROY_FLAG) < 0)
- HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "unable to flush clean entry")
-
- /* just skip the entry if it is dirty, as we can't do
- * anything with it now since we can't write.
- *
- * Since all entries are clean, serialize() will not be called,
- * and thus we needn't test to see if the LRU has been changed
- * out from under us.
- */
- entry_ptr = prev_ptr;
- } /* end while */
- } /* end else */
+ entry_ptr = prev_ptr;
+ } /* end while */
+ } /* end else */
- if (cache_ptr->index_size < cache_ptr->max_cache_size)
- cache_ptr->cache_full = FALSE;
+ if (cache_ptr->index_size < cache_ptr->max_cache_size)
+ cache_ptr->cache_full = FALSE;
done:
- FUNC_LEAVE_NOAPI(ret_value)
- } /* H5C__autoadjust__ageout__evict_aged_out_entries() */
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* H5C__autoadjust__ageout__evict_aged_out_entries() */
- /*-------------------------------------------------------------------------
- *
- * Function: H5C__autoadjust__ageout__insert_new_marker
- *
- * Purpose: Find an unused marker cache entry, mark it as used, and
- * insert it at the head of the LRU list. Also add the
- * marker's index in the epoch_markers array.
- *
- * Return: SUCCEED on success/FAIL on failure.
- *
- * Programmer: John Mainzer, 11/19/04
- *
- *-------------------------------------------------------------------------
- */
- static herr_t H5C__autoadjust__ageout__insert_new_marker(H5C_t * cache_ptr)
- {
- int i;
- herr_t ret_value = SUCCEED; /* Return value */
+/*-------------------------------------------------------------------------
+ *
+ * Function: H5C__autoadjust__ageout__insert_new_marker
+ *
+ * Purpose: Find an unused marker cache entry, mark it as used, and
+ * insert it at the head of the LRU list. Also add the
+ * marker's index in the epoch_markers array.
+ *
+ * Return: SUCCEED on success/FAIL on failure.
+ *
+ * Programmer: John Mainzer, 11/19/04
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5C__autoadjust__ageout__insert_new_marker(H5C_t *cache_ptr)
+{
+ int i;
+ herr_t ret_value = SUCCEED; /* Return value */
- FUNC_ENTER_STATIC
+ FUNC_ENTER_STATIC
- HDassert(cache_ptr);
- HDassert(cache_ptr->magic == H5C__H5C_T_MAGIC);
+ HDassert(cache_ptr);
+ HDassert(cache_ptr->magic == H5C__H5C_T_MAGIC);
- if (cache_ptr->epoch_markers_active >= (cache_ptr->resize_ctl).epochs_before_eviction)
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Already have a full complement of markers")
+ if (cache_ptr->epoch_markers_active >= (cache_ptr->resize_ctl).epochs_before_eviction)
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Already have a full complement of markers")
- /* find an unused marker */
- i = 0;
- while ((cache_ptr->epoch_marker_active)[i] && i < H5C__MAX_EPOCH_MARKERS)
- i++;
+ /* find an unused marker */
+ i = 0;
+ while ((cache_ptr->epoch_marker_active)[i] && i < H5C__MAX_EPOCH_MARKERS)
+ i++;
- if (i >= H5C__MAX_EPOCH_MARKERS)
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Can't find unused marker")
+ if (i >= H5C__MAX_EPOCH_MARKERS)
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Can't find unused marker")
- HDassert(((cache_ptr->epoch_markers)[i]).addr == (haddr_t)i);
- HDassert(((cache_ptr->epoch_markers)[i]).next == NULL);
- HDassert(((cache_ptr->epoch_markers)[i]).prev == NULL);
+ HDassert(((cache_ptr->epoch_markers)[i]).addr == (haddr_t)i);
+ HDassert(((cache_ptr->epoch_markers)[i]).next == NULL);
+ HDassert(((cache_ptr->epoch_markers)[i]).prev == NULL);
- (cache_ptr->epoch_marker_active)[i] = TRUE;
+ (cache_ptr->epoch_marker_active)[i] = TRUE;
- cache_ptr->epoch_marker_ringbuf_last =
- (cache_ptr->epoch_marker_ringbuf_last + 1) % (H5C__MAX_EPOCH_MARKERS + 1);
+ cache_ptr->epoch_marker_ringbuf_last =
+ (cache_ptr->epoch_marker_ringbuf_last + 1) % (H5C__MAX_EPOCH_MARKERS + 1);
- (cache_ptr->epoch_marker_ringbuf)[cache_ptr->epoch_marker_ringbuf_last] = i;
+ (cache_ptr->epoch_marker_ringbuf)[cache_ptr->epoch_marker_ringbuf_last] = i;
- cache_ptr->epoch_marker_ringbuf_size += 1;
+ cache_ptr->epoch_marker_ringbuf_size += 1;
- if (cache_ptr->epoch_marker_ringbuf_size > H5C__MAX_EPOCH_MARKERS) {
+ if (cache_ptr->epoch_marker_ringbuf_size > H5C__MAX_EPOCH_MARKERS) {
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "ring buffer overflow")
- }
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "ring buffer overflow")
+ }
- H5C__DLL_PREPEND((&((cache_ptr->epoch_markers)[i])), (cache_ptr)->LRU_head_ptr,
- (cache_ptr)->LRU_tail_ptr, (cache_ptr)->LRU_list_len, (cache_ptr)->LRU_list_size,
- (FAIL))
+ H5C__DLL_PREPEND((&((cache_ptr->epoch_markers)[i])), (cache_ptr)->LRU_head_ptr, (cache_ptr)->LRU_tail_ptr,
+ (cache_ptr)->LRU_list_len, (cache_ptr)->LRU_list_size, (FAIL))
- cache_ptr->epoch_markers_active += 1;
+ cache_ptr->epoch_markers_active += 1;
done:
- FUNC_LEAVE_NOAPI(ret_value)
+ FUNC_LEAVE_NOAPI(ret_value)
- } /* H5C__autoadjust__ageout__insert_new_marker() */
+} /* H5C__autoadjust__ageout__insert_new_marker() */
- /*-------------------------------------------------------------------------
- *
- * Function: H5C__autoadjust__ageout__remove_all_markers
- *
- * Purpose: Remove all epoch markers from the LRU list and mark them
- * as inactive.
- *
- * Return: SUCCEED on success/FAIL on failure.
- *
- * Programmer: John Mainzer, 11/22/04
- *
- *-------------------------------------------------------------------------
- */
- static herr_t H5C__autoadjust__ageout__remove_all_markers(H5C_t * cache_ptr)
- {
- int ring_buf_index;
- int i;
- herr_t ret_value = SUCCEED; /* Return value */
+/*-------------------------------------------------------------------------
+ *
+ * Function: H5C__autoadjust__ageout__remove_all_markers
+ *
+ * Purpose: Remove all epoch markers from the LRU list and mark them
+ * as inactive.
+ *
+ * Return: SUCCEED on success/FAIL on failure.
+ *
+ * Programmer: John Mainzer, 11/22/04
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5C__autoadjust__ageout__remove_all_markers(H5C_t *cache_ptr)
+{
+ int ring_buf_index;
+ int i;
+ herr_t ret_value = SUCCEED; /* Return value */
- FUNC_ENTER_STATIC
+ FUNC_ENTER_STATIC
- HDassert(cache_ptr);
- HDassert(cache_ptr->magic == H5C__H5C_T_MAGIC);
+ HDassert(cache_ptr);
+ HDassert(cache_ptr->magic == H5C__H5C_T_MAGIC);
- while (cache_ptr->epoch_markers_active > 0) {
- /* get the index of the last epoch marker in the LRU list
- * and remove it from the ring buffer.
- */
+ while (cache_ptr->epoch_markers_active > 0) {
+ /* get the index of the last epoch marker in the LRU list
+ * and remove it from the ring buffer.
+ */
- ring_buf_index = cache_ptr->epoch_marker_ringbuf_first;
- i = (cache_ptr->epoch_marker_ringbuf)[ring_buf_index];
+ ring_buf_index = cache_ptr->epoch_marker_ringbuf_first;
+ i = (cache_ptr->epoch_marker_ringbuf)[ring_buf_index];
- cache_ptr->epoch_marker_ringbuf_first =
- (cache_ptr->epoch_marker_ringbuf_first + 1) % (H5C__MAX_EPOCH_MARKERS + 1);
+ cache_ptr->epoch_marker_ringbuf_first =
+ (cache_ptr->epoch_marker_ringbuf_first + 1) % (H5C__MAX_EPOCH_MARKERS + 1);
- cache_ptr->epoch_marker_ringbuf_size -= 1;
+ cache_ptr->epoch_marker_ringbuf_size -= 1;
- if (cache_ptr->epoch_marker_ringbuf_size < 0)
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "ring buffer underflow")
+ if (cache_ptr->epoch_marker_ringbuf_size < 0)
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "ring buffer underflow")
- if ((cache_ptr->epoch_marker_active)[i] != TRUE)
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "unused marker in LRU?!?")
+ if ((cache_ptr->epoch_marker_active)[i] != TRUE)
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "unused marker in LRU?!?")
- /* remove the epoch marker from the LRU list */
- H5C__DLL_REMOVE((&((cache_ptr->epoch_markers)[i])), (cache_ptr)->LRU_head_ptr,
- (cache_ptr)->LRU_tail_ptr, (cache_ptr)->LRU_list_len, (cache_ptr)->LRU_list_size,
- (FAIL))
+ /* remove the epoch marker from the LRU list */
+ H5C__DLL_REMOVE((&((cache_ptr->epoch_markers)[i])), (cache_ptr)->LRU_head_ptr,
+ (cache_ptr)->LRU_tail_ptr, (cache_ptr)->LRU_list_len, (cache_ptr)->LRU_list_size,
+ (FAIL))
- /* mark the epoch marker as unused. */
- (cache_ptr->epoch_marker_active)[i] = FALSE;
+ /* mark the epoch marker as unused. */
+ (cache_ptr->epoch_marker_active)[i] = FALSE;
- HDassert(((cache_ptr->epoch_markers)[i]).addr == (haddr_t)i);
- HDassert(((cache_ptr->epoch_markers)[i]).next == NULL);
- HDassert(((cache_ptr->epoch_markers)[i]).prev == NULL);
+ HDassert(((cache_ptr->epoch_markers)[i]).addr == (haddr_t)i);
+ HDassert(((cache_ptr->epoch_markers)[i]).next == NULL);
+ HDassert(((cache_ptr->epoch_markers)[i]).prev == NULL);
- /* decrement the number of active epoch markers */
- cache_ptr->epoch_markers_active -= 1;
+ /* decrement the number of active epoch markers */
+ cache_ptr->epoch_markers_active -= 1;
- HDassert(cache_ptr->epoch_markers_active == cache_ptr->epoch_marker_ringbuf_size);
- }
+ HDassert(cache_ptr->epoch_markers_active == cache_ptr->epoch_marker_ringbuf_size);
+ }
done:
- FUNC_LEAVE_NOAPI(ret_value)
+ FUNC_LEAVE_NOAPI(ret_value)
- } /* H5C__autoadjust__ageout__remove_all_markers() */
+} /* H5C__autoadjust__ageout__remove_all_markers() */
- /*-------------------------------------------------------------------------
- *
- * Function: H5C__autoadjust__ageout__remove_excess_markers
- *
- * Purpose: Remove epoch markers from the end of the LRU list and
- * mark them as inactive until the number of active markers
- * equals the the current value of
- * (cache_ptr->resize_ctl).epochs_before_eviction.
- *
- * Return: SUCCEED on success/FAIL on failure.
- *
- * Programmer: John Mainzer, 11/19/04
- *
- *-------------------------------------------------------------------------
- */
- static herr_t H5C__autoadjust__ageout__remove_excess_markers(H5C_t * cache_ptr)
- {
- int ring_buf_index;
- int i;
- herr_t ret_value = SUCCEED; /* Return value */
+/*-------------------------------------------------------------------------
+ *
+ * Function: H5C__autoadjust__ageout__remove_excess_markers
+ *
+ * Purpose: Remove epoch markers from the end of the LRU list and
+ * mark them as inactive until the number of active markers
+ * equals the the current value of
+ * (cache_ptr->resize_ctl).epochs_before_eviction.
+ *
+ * Return: SUCCEED on success/FAIL on failure.
+ *
+ * Programmer: John Mainzer, 11/19/04
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5C__autoadjust__ageout__remove_excess_markers(H5C_t *cache_ptr)
+{
+ int ring_buf_index;
+ int i;
+ herr_t ret_value = SUCCEED; /* Return value */
- FUNC_ENTER_STATIC
+ FUNC_ENTER_STATIC
- HDassert(cache_ptr);
- HDassert(cache_ptr->magic == H5C__H5C_T_MAGIC);
+ HDassert(cache_ptr);
+ HDassert(cache_ptr->magic == H5C__H5C_T_MAGIC);
- if (cache_ptr->epoch_markers_active <= (cache_ptr->resize_ctl).epochs_before_eviction)
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "no excess markers on entry")
+ if (cache_ptr->epoch_markers_active <= (cache_ptr->resize_ctl).epochs_before_eviction)
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "no excess markers on entry")
- while (cache_ptr->epoch_markers_active > (cache_ptr->resize_ctl).epochs_before_eviction) {
- /* get the index of the last epoch marker in the LRU list
- * and remove it from the ring buffer.
- */
+ while (cache_ptr->epoch_markers_active > (cache_ptr->resize_ctl).epochs_before_eviction) {
+ /* get the index of the last epoch marker in the LRU list
+ * and remove it from the ring buffer.
+ */
- ring_buf_index = cache_ptr->epoch_marker_ringbuf_first;
- i = (cache_ptr->epoch_marker_ringbuf)[ring_buf_index];
+ ring_buf_index = cache_ptr->epoch_marker_ringbuf_first;
+ i = (cache_ptr->epoch_marker_ringbuf)[ring_buf_index];
- cache_ptr->epoch_marker_ringbuf_first =
- (cache_ptr->epoch_marker_ringbuf_first + 1) % (H5C__MAX_EPOCH_MARKERS + 1);
+ cache_ptr->epoch_marker_ringbuf_first =
+ (cache_ptr->epoch_marker_ringbuf_first + 1) % (H5C__MAX_EPOCH_MARKERS + 1);
- cache_ptr->epoch_marker_ringbuf_size -= 1;
+ cache_ptr->epoch_marker_ringbuf_size -= 1;
- if (cache_ptr->epoch_marker_ringbuf_size < 0)
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "ring buffer underflow")
- if ((cache_ptr->epoch_marker_active)[i] != TRUE)
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "unused marker in LRU?!?")
+ if (cache_ptr->epoch_marker_ringbuf_size < 0)
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "ring buffer underflow")
+ if ((cache_ptr->epoch_marker_active)[i] != TRUE)
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "unused marker in LRU?!?")
- /* remove the epoch marker from the LRU list */
- H5C__DLL_REMOVE((&((cache_ptr->epoch_markers)[i])), (cache_ptr)->LRU_head_ptr,
- (cache_ptr)->LRU_tail_ptr, (cache_ptr)->LRU_list_len, (cache_ptr)->LRU_list_size,
- (FAIL))
+ /* remove the epoch marker from the LRU list */
+ H5C__DLL_REMOVE((&((cache_ptr->epoch_markers)[i])), (cache_ptr)->LRU_head_ptr,
+ (cache_ptr)->LRU_tail_ptr, (cache_ptr)->LRU_list_len, (cache_ptr)->LRU_list_size,
+ (FAIL))
- /* mark the epoch marker as unused. */
- (cache_ptr->epoch_marker_active)[i] = FALSE;
+ /* mark the epoch marker as unused. */
+ (cache_ptr->epoch_marker_active)[i] = FALSE;
- HDassert(((cache_ptr->epoch_markers)[i]).addr == (haddr_t)i);
- HDassert(((cache_ptr->epoch_markers)[i]).next == NULL);
- HDassert(((cache_ptr->epoch_markers)[i]).prev == NULL);
+ HDassert(((cache_ptr->epoch_markers)[i]).addr == (haddr_t)i);
+ HDassert(((cache_ptr->epoch_markers)[i]).next == NULL);
+ HDassert(((cache_ptr->epoch_markers)[i]).prev == NULL);
- /* decrement the number of active epoch markers */
- cache_ptr->epoch_markers_active -= 1;
+ /* decrement the number of active epoch markers */
+ cache_ptr->epoch_markers_active -= 1;
- HDassert(cache_ptr->epoch_markers_active == cache_ptr->epoch_marker_ringbuf_size);
- }
+ HDassert(cache_ptr->epoch_markers_active == cache_ptr->epoch_marker_ringbuf_size);
+ }
done:
- FUNC_LEAVE_NOAPI(ret_value)
+ FUNC_LEAVE_NOAPI(ret_value)
- } /* H5C__autoadjust__ageout__remove_excess_markers() */
+} /* H5C__autoadjust__ageout__remove_excess_markers() */
- /*-------------------------------------------------------------------------
- *
- * Function: H5C__flash_increase_cache_size
- *
- * Purpose: If there is not at least new_entry_size - old_entry_size
- * bytes of free space in the cache and the current
- * max_cache_size is less than (cache_ptr->resize_ctl).max_size,
- * perform a flash increase in the cache size and then reset
- * the full cache hit rate statistics, and exit.
- *
- * Return: Non-negative on success/Negative on failure.
- *
- * Programmer: John Mainzer, 12/31/07
- *
- *-------------------------------------------------------------------------
- */
- static herr_t H5C__flash_increase_cache_size(H5C_t * cache_ptr, size_t old_entry_size,
- size_t new_entry_size)
- {
- size_t new_max_cache_size = 0;
- size_t old_max_cache_size = 0;
- size_t new_min_clean_size = 0;
- size_t old_min_clean_size = 0;
- size_t space_needed;
- enum H5C_resize_status status = flash_increase; /* may change */
- double hit_rate;
- herr_t ret_value = SUCCEED; /* Return value */
-
- FUNC_ENTER_STATIC
-
- HDassert(cache_ptr);
- HDassert(cache_ptr->magic == H5C__H5C_T_MAGIC);
- HDassert(cache_ptr->flash_size_increase_possible);
- HDassert(new_entry_size > cache_ptr->flash_size_increase_threshold);
- HDassert(old_entry_size < new_entry_size);
+/*-------------------------------------------------------------------------
+ *
+ * Function: H5C__flash_increase_cache_size
+ *
+ * Purpose: If there is not at least new_entry_size - old_entry_size
+ * bytes of free space in the cache and the current
+ * max_cache_size is less than (cache_ptr->resize_ctl).max_size,
+ * perform a flash increase in the cache size and then reset
+ * the full cache hit rate statistics, and exit.
+ *
+ * Return: Non-negative on success/Negative on failure.
+ *
+ * Programmer: John Mainzer, 12/31/07
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5C__flash_increase_cache_size(H5C_t *cache_ptr, size_t old_entry_size, size_t new_entry_size)
+{
+ size_t new_max_cache_size = 0;
+ size_t old_max_cache_size = 0;
+ size_t new_min_clean_size = 0;
+ size_t old_min_clean_size = 0;
+ size_t space_needed;
+ enum H5C_resize_status status = flash_increase; /* may change */
+ double hit_rate;
+ herr_t ret_value = SUCCEED; /* Return value */
- if (old_entry_size >= new_entry_size)
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "old_entry_size >= new_entry_size")
+ FUNC_ENTER_STATIC
- space_needed = new_entry_size - old_entry_size;
+ HDassert(cache_ptr);
+ HDassert(cache_ptr->magic == H5C__H5C_T_MAGIC);
+ HDassert(cache_ptr->flash_size_increase_possible);
+ HDassert(new_entry_size > cache_ptr->flash_size_increase_threshold);
+ HDassert(old_entry_size < new_entry_size);
- if (((cache_ptr->index_size + space_needed) > cache_ptr->max_cache_size) &&
- (cache_ptr->max_cache_size < (cache_ptr->resize_ctl).max_size)) {
+ if (old_entry_size >= new_entry_size)
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "old_entry_size >= new_entry_size")
- /* we have work to do */
+ space_needed = new_entry_size - old_entry_size;
- switch ((cache_ptr->resize_ctl).flash_incr_mode) {
- case H5C_flash_incr__off:
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL,
- "flash_size_increase_possible but H5C_flash_incr__off?!")
- break;
+ if (((cache_ptr->index_size + space_needed) > cache_ptr->max_cache_size) &&
+ (cache_ptr->max_cache_size < (cache_ptr->resize_ctl).max_size)) {
- case H5C_flash_incr__add_space:
- if (cache_ptr->index_size < cache_ptr->max_cache_size) {
+ /* we have work to do */
- HDassert((cache_ptr->max_cache_size - cache_ptr->index_size) < space_needed);
- space_needed -= cache_ptr->max_cache_size - cache_ptr->index_size;
- }
- space_needed = (size_t)(((double)space_needed) * (cache_ptr->resize_ctl).flash_multiple);
+ switch ((cache_ptr->resize_ctl).flash_incr_mode) {
+ case H5C_flash_incr__off:
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL,
+ "flash_size_increase_possible but H5C_flash_incr__off?!")
+ break;
- new_max_cache_size = cache_ptr->max_cache_size + space_needed;
+ case H5C_flash_incr__add_space:
+ if (cache_ptr->index_size < cache_ptr->max_cache_size) {
- break;
+ HDassert((cache_ptr->max_cache_size - cache_ptr->index_size) < space_needed);
+ space_needed -= cache_ptr->max_cache_size - cache_ptr->index_size;
+ }
+ space_needed = (size_t)(((double)space_needed) * (cache_ptr->resize_ctl).flash_multiple);
- default: /* should be unreachable */
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Unknown flash_incr_mode?!?!?")
- break;
- }
+ new_max_cache_size = cache_ptr->max_cache_size + space_needed;
- if (new_max_cache_size > (cache_ptr->resize_ctl).max_size) {
+ break;
- new_max_cache_size = (cache_ptr->resize_ctl).max_size;
- }
+ default: /* should be unreachable */
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Unknown flash_incr_mode?!?!?")
+ break;
+ }
- HDassert(new_max_cache_size > cache_ptr->max_cache_size);
+ if (new_max_cache_size > (cache_ptr->resize_ctl).max_size) {
- new_min_clean_size =
- (size_t)((double)new_max_cache_size * ((cache_ptr->resize_ctl).min_clean_fraction));
+ new_max_cache_size = (cache_ptr->resize_ctl).max_size;
+ }
- HDassert(new_min_clean_size <= new_max_cache_size);
+ HDassert(new_max_cache_size > cache_ptr->max_cache_size);
- old_max_cache_size = cache_ptr->max_cache_size;
- old_min_clean_size = cache_ptr->min_clean_size;
+ new_min_clean_size =
+ (size_t)((double)new_max_cache_size * ((cache_ptr->resize_ctl).min_clean_fraction));
- cache_ptr->max_cache_size = new_max_cache_size;
- cache_ptr->min_clean_size = new_min_clean_size;
+ HDassert(new_min_clean_size <= new_max_cache_size);
- /* update flash cache size increase fields as appropriate */
- HDassert(cache_ptr->flash_size_increase_possible);
+ old_max_cache_size = cache_ptr->max_cache_size;
+ old_min_clean_size = cache_ptr->min_clean_size;
- switch ((cache_ptr->resize_ctl).flash_incr_mode) {
- case H5C_flash_incr__off:
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL,
- "flash_size_increase_possible but H5C_flash_incr__off?!")
- break;
+ cache_ptr->max_cache_size = new_max_cache_size;
+ cache_ptr->min_clean_size = new_min_clean_size;
- case H5C_flash_incr__add_space:
- cache_ptr->flash_size_increase_threshold = (size_t)(
- ((double)(cache_ptr->max_cache_size)) * ((cache_ptr->resize_ctl).flash_threshold));
- break;
+ /* update flash cache size increase fields as appropriate */
+ HDassert(cache_ptr->flash_size_increase_possible);
- default: /* should be unreachable */
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Unknown flash_incr_mode?!?!?")
- break;
- }
+ switch ((cache_ptr->resize_ctl).flash_incr_mode) {
+ case H5C_flash_incr__off:
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL,
+ "flash_size_increase_possible but H5C_flash_incr__off?!")
+ break;
- /* note that we don't cycle the epoch markers. We can
- * argue either way as to whether we should, but for now
- * we don't.
- */
+ case H5C_flash_incr__add_space:
+ cache_ptr->flash_size_increase_threshold = (size_t)(
+ ((double)(cache_ptr->max_cache_size)) * ((cache_ptr->resize_ctl).flash_threshold));
+ break;
- if ((cache_ptr->resize_ctl).rpt_fcn != NULL) {
+ default: /* should be unreachable */
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Unknown flash_incr_mode?!?!?")
+ break;
+ }
- /* get the hit rate for the reporting function. Should still
- * be good as we haven't reset the hit rate statistics.
- */
- if (H5C_get_cache_hit_rate(cache_ptr, &hit_rate) != SUCCEED)
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Can't get hit rate")
+ /* note that we don't cycle the epoch markers. We can
+ * argue either way as to whether we should, but for now
+ * we don't.
+ */
- (*((cache_ptr->resize_ctl).rpt_fcn))(cache_ptr, H5C__CURR_AUTO_RESIZE_RPT_FCN_VER, hit_rate,
- status, old_max_cache_size, new_max_cache_size,
- old_min_clean_size, new_min_clean_size);
- }
+ if ((cache_ptr->resize_ctl).rpt_fcn != NULL) {
- if (H5C_reset_cache_hit_rate_stats(cache_ptr) < 0)
- /* this should be impossible... */
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "H5C_reset_cache_hit_rate_stats failed")
+ /* get the hit rate for the reporting function. Should still
+ * be good as we haven't reset the hit rate statistics.
+ */
+ if (H5C_get_cache_hit_rate(cache_ptr, &hit_rate) != SUCCEED)
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Can't get hit rate")
+
+ (*((cache_ptr->resize_ctl).rpt_fcn))(cache_ptr, H5C__CURR_AUTO_RESIZE_RPT_FCN_VER, hit_rate,
+ status, old_max_cache_size, new_max_cache_size,
+ old_min_clean_size, new_min_clean_size);
}
+ if (H5C_reset_cache_hit_rate_stats(cache_ptr) < 0)
+ /* this should be impossible... */
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "H5C_reset_cache_hit_rate_stats failed")
+ }
+
done:
- FUNC_LEAVE_NOAPI(ret_value)
+ FUNC_LEAVE_NOAPI(ret_value)
- } /* H5C__flash_increase_cache_size() */
+} /* H5C__flash_increase_cache_size() */
- /*-------------------------------------------------------------------------
- * Function: H5C__flush_invalidate_cache
- *
- * Purpose: Flush and destroy the entries contained in the target
- * cache.
- *
- * If the cache contains protected entries, the function will
- * fail, as protected entries cannot be either flushed or
- * destroyed. However all unprotected entries should be
- * flushed and destroyed before the function returns failure.
- *
- * While pinned entries can usually be flushed, they cannot
- * be destroyed. However, they should be unpinned when all
- * the entries that reference them have been destroyed (thus
- * reduding the pinned entry's reference count to 0, allowing
- * it to be unpinned).
- *
- * If pinned entries are present, the function makes repeated
- * passes through the cache, flushing all dirty entries
- * (including the pinned dirty entries where permitted) and
- * destroying all unpinned entries. This process is repeated
- * until either the cache is empty, or the number of pinned
- * entries stops decreasing on each pass.
- *
- * Return: Non-negative on success/Negative on failure or if there was
- * a request to flush all items and something was protected.
- *
- * Programmer: John Mainzer
- * 3/24/065
- *
- *-------------------------------------------------------------------------
- */
- static herr_t H5C__flush_invalidate_cache(H5F_t * f, unsigned flags)
- {
- H5C_t * cache_ptr;
- H5C_ring_t ring;
- herr_t ret_value = SUCCEED;
+/*-------------------------------------------------------------------------
+ * Function: H5C__flush_invalidate_cache
+ *
+ * Purpose: Flush and destroy the entries contained in the target
+ * cache.
+ *
+ * If the cache contains protected entries, the function will
+ * fail, as protected entries cannot be either flushed or
+ * destroyed. However all unprotected entries should be
+ * flushed and destroyed before the function returns failure.
+ *
+ * While pinned entries can usually be flushed, they cannot
+ * be destroyed. However, they should be unpinned when all
+ * the entries that reference them have been destroyed (thus
+ * reduding the pinned entry's reference count to 0, allowing
+ * it to be unpinned).
+ *
+ * If pinned entries are present, the function makes repeated
+ * passes through the cache, flushing all dirty entries
+ * (including the pinned dirty entries where permitted) and
+ * destroying all unpinned entries. This process is repeated
+ * until either the cache is empty, or the number of pinned
+ * entries stops decreasing on each pass.
+ *
+ * Return: Non-negative on success/Negative on failure or if there was
+ * a request to flush all items and something was protected.
+ *
+ * Programmer: John Mainzer
+ * 3/24/065
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5C__flush_invalidate_cache(H5F_t *f, unsigned flags)
+{
+ H5C_t * cache_ptr;
+ H5C_ring_t ring;
+ herr_t ret_value = SUCCEED;
- FUNC_ENTER_STATIC
+ FUNC_ENTER_STATIC
- HDassert(f);
- HDassert(f->shared);
- cache_ptr = f->shared->cache;
- HDassert(cache_ptr);
- HDassert(cache_ptr->magic == H5C__H5C_T_MAGIC);
- HDassert(cache_ptr->slist_ptr);
+ HDassert(f);
+ HDassert(f->shared);
+ cache_ptr = f->shared->cache;
+ HDassert(cache_ptr);
+ HDassert(cache_ptr->magic == H5C__H5C_T_MAGIC);
+ HDassert(cache_ptr->slist_ptr);
#if H5C_DO_SANITY_CHECKS
- {
- int32_t i;
- uint32_t index_len = 0;
- uint32_t slist_len = 0;
- size_t index_size = (size_t)0;
- size_t clean_index_size = (size_t)0;
- size_t dirty_index_size = (size_t)0;
- size_t slist_size = (size_t)0;
-
- HDassert(cache_ptr->index_ring_len[H5C_RING_UNDEFINED] == 0);
- HDassert(cache_ptr->index_ring_size[H5C_RING_UNDEFINED] == (size_t)0);
- HDassert(cache_ptr->clean_index_ring_size[H5C_RING_UNDEFINED] == (size_t)0);
- HDassert(cache_ptr->dirty_index_ring_size[H5C_RING_UNDEFINED] == (size_t)0);
- HDassert(cache_ptr->slist_ring_len[H5C_RING_UNDEFINED] == 0);
- HDassert(cache_ptr->slist_ring_size[H5C_RING_UNDEFINED] == (size_t)0);
-
- for (i = H5C_RING_USER; i < H5C_RING_NTYPES; i++) {
- index_len += cache_ptr->index_ring_len[i];
- index_size += cache_ptr->index_ring_size[i];
- clean_index_size += cache_ptr->clean_index_ring_size[i];
- dirty_index_size += cache_ptr->dirty_index_ring_size[i];
-
- slist_len += cache_ptr->slist_ring_len[i];
- slist_size += cache_ptr->slist_ring_size[i];
- } /* end for */
-
- HDassert(cache_ptr->index_len == index_len);
- HDassert(cache_ptr->index_size == index_size);
- HDassert(cache_ptr->clean_index_size == clean_index_size);
- HDassert(cache_ptr->dirty_index_size == dirty_index_size);
- HDassert(cache_ptr->slist_len == slist_len);
- HDassert(cache_ptr->slist_size == slist_size);
- }
+ {
+ int32_t i;
+ uint32_t index_len = 0;
+ uint32_t slist_len = 0;
+ size_t index_size = (size_t)0;
+ size_t clean_index_size = (size_t)0;
+ size_t dirty_index_size = (size_t)0;
+ size_t slist_size = (size_t)0;
+
+ HDassert(cache_ptr->index_ring_len[H5C_RING_UNDEFINED] == 0);
+ HDassert(cache_ptr->index_ring_size[H5C_RING_UNDEFINED] == (size_t)0);
+ HDassert(cache_ptr->clean_index_ring_size[H5C_RING_UNDEFINED] == (size_t)0);
+ HDassert(cache_ptr->dirty_index_ring_size[H5C_RING_UNDEFINED] == (size_t)0);
+ HDassert(cache_ptr->slist_ring_len[H5C_RING_UNDEFINED] == 0);
+ HDassert(cache_ptr->slist_ring_size[H5C_RING_UNDEFINED] == (size_t)0);
+
+ for (i = H5C_RING_USER; i < H5C_RING_NTYPES; i++) {
+ index_len += cache_ptr->index_ring_len[i];
+ index_size += cache_ptr->index_ring_size[i];
+ clean_index_size += cache_ptr->clean_index_ring_size[i];
+ dirty_index_size += cache_ptr->dirty_index_ring_size[i];
+
+ slist_len += cache_ptr->slist_ring_len[i];
+ slist_size += cache_ptr->slist_ring_size[i];
+ } /* end for */
+
+ HDassert(cache_ptr->index_len == index_len);
+ HDassert(cache_ptr->index_size == index_size);
+ HDassert(cache_ptr->clean_index_size == clean_index_size);
+ HDassert(cache_ptr->dirty_index_size == dirty_index_size);
+ HDassert(cache_ptr->slist_len == slist_len);
+ HDassert(cache_ptr->slist_size == slist_size);
+ }
#endif /* H5C_DO_SANITY_CHECKS */
- /* remove ageout markers if present */
- if (cache_ptr->epoch_markers_active > 0)
- if (H5C__autoadjust__ageout__remove_all_markers(cache_ptr) < 0)
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "error removing all epoch markers")
+ /* remove ageout markers if present */
+ if (cache_ptr->epoch_markers_active > 0)
+ if (H5C__autoadjust__ageout__remove_all_markers(cache_ptr) < 0)
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "error removing all epoch markers")
- /* flush invalidate each ring, starting from the outermost ring and
- * working inward.
- */
- ring = H5C_RING_USER;
- while (ring < H5C_RING_NTYPES) {
- if (H5C__flush_invalidate_ring(f, ring, flags) < 0)
- HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "flush invalidate ring failed")
- ring++;
- } /* end while */
+ /* flush invalidate each ring, starting from the outermost ring and
+ * working inward.
+ */
+ ring = H5C_RING_USER;
+ while (ring < H5C_RING_NTYPES) {
+ if (H5C__flush_invalidate_ring(f, ring, flags) < 0)
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "flush invalidate ring failed")
+ ring++;
+ } /* end while */
+
+ /* Invariants, after destroying all entries in the hash table */
+ if (!(flags & H5C__EVICT_ALLOW_LAST_PINS_FLAG)) {
+ HDassert(cache_ptr->index_size == 0);
+ HDassert(cache_ptr->clean_index_size == 0);
+ HDassert(cache_ptr->pel_len == 0);
+ HDassert(cache_ptr->pel_size == 0);
+ } /* end if */
+ else {
+ H5C_cache_entry_t *entry_ptr; /* Cache entry */
+ unsigned u; /* Local index variable */
+
+ /* All rings except ring 4 should be empty now */
+ /* (Ring 4 has the superblock) */
+ for (u = H5C_RING_USER; u < H5C_RING_SB; u++) {
+ HDassert(cache_ptr->index_ring_len[u] == 0);
+ HDassert(cache_ptr->index_ring_size[u] == 0);
+ HDassert(cache_ptr->clean_index_ring_size[u] == 0);
+ } /* end for */
- /* Invariants, after destroying all entries in the hash table */
- if (!(flags & H5C__EVICT_ALLOW_LAST_PINS_FLAG)) {
- HDassert(cache_ptr->index_size == 0);
- HDassert(cache_ptr->clean_index_size == 0);
- HDassert(cache_ptr->pel_len == 0);
- HDassert(cache_ptr->pel_size == 0);
- } /* end if */
- else {
- H5C_cache_entry_t *entry_ptr; /* Cache entry */
- unsigned u; /* Local index variable */
-
- /* All rings except ring 4 should be empty now */
- /* (Ring 4 has the superblock) */
- for (u = H5C_RING_USER; u < H5C_RING_SB; u++) {
- HDassert(cache_ptr->index_ring_len[u] == 0);
- HDassert(cache_ptr->index_ring_size[u] == 0);
- HDassert(cache_ptr->clean_index_ring_size[u] == 0);
- } /* end for */
-
- /* Check that any remaining pinned entries are in the superblock ring */
- entry_ptr = cache_ptr->pel_head_ptr;
- while (entry_ptr) {
- /* Check ring */
- HDassert(entry_ptr->ring == H5C_RING_SB);
-
- /* Advance to next entry in pinned entry list */
- entry_ptr = entry_ptr->next;
- } /* end while */
- } /* end else */
- HDassert(cache_ptr->dirty_index_size == 0);
- HDassert(cache_ptr->slist_len == 0);
- HDassert(cache_ptr->slist_size == 0);
- HDassert(cache_ptr->pl_len == 0);
- HDassert(cache_ptr->pl_size == 0);
- HDassert(cache_ptr->LRU_list_len == 0);
- HDassert(cache_ptr->LRU_list_size == 0);
+ /* Check that any remaining pinned entries are in the superblock ring */
+ entry_ptr = cache_ptr->pel_head_ptr;
+ while (entry_ptr) {
+ /* Check ring */
+ HDassert(entry_ptr->ring == H5C_RING_SB);
+
+ /* Advance to next entry in pinned entry list */
+ entry_ptr = entry_ptr->next;
+ } /* end while */
+ } /* end else */
+ HDassert(cache_ptr->dirty_index_size == 0);
+ HDassert(cache_ptr->slist_len == 0);
+ HDassert(cache_ptr->slist_size == 0);
+ HDassert(cache_ptr->pl_len == 0);
+ HDassert(cache_ptr->pl_size == 0);
+ HDassert(cache_ptr->LRU_list_len == 0);
+ HDassert(cache_ptr->LRU_list_size == 0);
done:
- FUNC_LEAVE_NOAPI(ret_value)
- } /* H5C__flush_invalidate_cache() */
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* H5C__flush_invalidate_cache() */
- /*-------------------------------------------------------------------------
- * Function: H5C__flush_invalidate_ring
- *
- * Purpose: Flush and destroy the entries contained in the target
- * cache and ring.
- *
- * If the ring contains protected entries, the function will
- * fail, as protected entries cannot be either flushed or
- * destroyed. However all unprotected entries should be
- * flushed and destroyed before the function returns failure.
- *
- * While pinned entries can usually be flushed, they cannot
- * be destroyed. However, they should be unpinned when all
- * the entries that reference them have been destroyed (thus
- * reduding the pinned entry's reference count to 0, allowing
- * it to be unpinned).
- *
- * If pinned entries are present, the function makes repeated
- * passes through the cache, flushing all dirty entries
- * (including the pinned dirty entries where permitted) and
- * destroying all unpinned entries. This process is repeated
- * until either the cache is empty, or the number of pinned
- * entries stops decreasing on each pass.
- *
- * If flush dependencies appear in the target ring, the
- * function makes repeated passes through the cache flushing
- * entries in flush dependency order.
- *
- * Return: Non-negative on success/Negative on failure or if there was
- * a request to flush all items and something was protected.
- *
- * Programmer: John Mainzer
- * 9/1/15
- *
- *-------------------------------------------------------------------------
- */
- static herr_t H5C__flush_invalidate_ring(H5F_t * f, H5C_ring_t ring, unsigned flags)
- {
- H5C_t * cache_ptr;
- hbool_t restart_slist_scan;
- uint32_t protected_entries = 0;
- int32_t i;
- int32_t cur_ring_pel_len;
- int32_t old_ring_pel_len;
- unsigned cooked_flags;
- unsigned evict_flags;
- H5SL_node_t * node_ptr = NULL;
- H5C_cache_entry_t *entry_ptr = NULL;
- H5C_cache_entry_t *next_entry_ptr = NULL;
+/*-------------------------------------------------------------------------
+ * Function: H5C__flush_invalidate_ring
+ *
+ * Purpose: Flush and destroy the entries contained in the target
+ * cache and ring.
+ *
+ * If the ring contains protected entries, the function will
+ * fail, as protected entries cannot be either flushed or
+ * destroyed. However all unprotected entries should be
+ * flushed and destroyed before the function returns failure.
+ *
+ * While pinned entries can usually be flushed, they cannot
+ * be destroyed. However, they should be unpinned when all
+ * the entries that reference them have been destroyed (thus
+ * reduding the pinned entry's reference count to 0, allowing
+ * it to be unpinned).
+ *
+ * If pinned entries are present, the function makes repeated
+ * passes through the cache, flushing all dirty entries
+ * (including the pinned dirty entries where permitted) and
+ * destroying all unpinned entries. This process is repeated
+ * until either the cache is empty, or the number of pinned
+ * entries stops decreasing on each pass.
+ *
+ * If flush dependencies appear in the target ring, the
+ * function makes repeated passes through the cache flushing
+ * entries in flush dependency order.
+ *
+ * Return: Non-negative on success/Negative on failure or if there was
+ * a request to flush all items and something was protected.
+ *
+ * Programmer: John Mainzer
+ * 9/1/15
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5C__flush_invalidate_ring(H5F_t *f, H5C_ring_t ring, unsigned flags)
+{
+ H5C_t * cache_ptr;
+ hbool_t restart_slist_scan;
+ uint32_t protected_entries = 0;
+ int32_t i;
+ int32_t cur_ring_pel_len;
+ int32_t old_ring_pel_len;
+ unsigned cooked_flags;
+ unsigned evict_flags;
+ H5SL_node_t * node_ptr = NULL;
+ H5C_cache_entry_t *entry_ptr = NULL;
+ H5C_cache_entry_t *next_entry_ptr = NULL;
#if H5C_DO_SANITY_CHECKS
- uint32_t initial_slist_len = 0;
- size_t initial_slist_size = 0;
+ uint32_t initial_slist_len = 0;
+ size_t initial_slist_size = 0;
#endif /* H5C_DO_SANITY_CHECKS */
- herr_t ret_value = SUCCEED;
+ herr_t ret_value = SUCCEED;
+
+ FUNC_ENTER_STATIC
- FUNC_ENTER_STATIC
+ HDassert(f);
+ HDassert(f->shared);
+ cache_ptr = f->shared->cache;
+ HDassert(cache_ptr);
+ HDassert(cache_ptr->magic == H5C__H5C_T_MAGIC);
+ HDassert(cache_ptr->slist_ptr);
+ HDassert(ring > H5C_RING_UNDEFINED);
+ HDassert(ring < H5C_RING_NTYPES);
- HDassert(f);
- HDassert(f->shared);
- cache_ptr = f->shared->cache;
- HDassert(cache_ptr);
- HDassert(cache_ptr->magic == H5C__H5C_T_MAGIC);
- HDassert(cache_ptr->slist_ptr);
- HDassert(ring > H5C_RING_UNDEFINED);
- HDassert(ring < H5C_RING_NTYPES);
+ HDassert(cache_ptr->epoch_markers_active == 0);
- HDassert(cache_ptr->epoch_markers_active == 0);
+ /* Filter out the flags that are not relevant to the flush/invalidate.
+ */
+ cooked_flags = flags & H5C__FLUSH_CLEAR_ONLY_FLAG;
+ evict_flags = flags & H5C__EVICT_ALLOW_LAST_PINS_FLAG;
+
+ /* The flush procedure here is a bit strange.
+ *
+ * In the outer while loop we make at least one pass through the
+ * cache, and then repeat until either all the pinned entries in
+ * the ring unpin themselves, or until the number of pinned entries
+ * in the ring stops declining. In this later case, we scream and die.
+ *
+ * Since the fractal heap can dirty, resize, and/or move entries
+ * in is flush callback, it is possible that the cache will still
+ * contain dirty entries at this point. If so, we must make more
+ * passes through the skip list to allow it to empty.
+ *
+ * Further, since clean entries can be dirtied, resized, and/or moved
+ * as the result of a flush call back (either the entries own, or that
+ * for some other cache entry), we can no longer promise to flush
+ * the cache entries in increasing address order.
+ *
+ * Instead, we just do the best we can -- making a pass through
+ * the skip list, and then a pass through the "clean" entries, and
+ * then repeating as needed. Thus it is quite possible that an
+ * entry will be evicted from the cache only to be re-loaded later
+ * in the flush process (From what Quincey tells me, the pin
+ * mechanism makes this impossible, but even it it is true now,
+ * we shouldn't count on it in the future.)
+ *
+ * The bottom line is that entries will probably be flushed in close
+ * to increasing address order, but there are no guarantees.
+ */
- /* Filter out the flags that are not relevant to the flush/invalidate.
+ /* compute the number of pinned entries in this ring */
+ entry_ptr = cache_ptr->pel_head_ptr;
+ cur_ring_pel_len = 0;
+ while (entry_ptr != NULL) {
+ HDassert(entry_ptr->magic == H5C__H5C_CACHE_ENTRY_T_MAGIC);
+ HDassert(entry_ptr->ring >= ring);
+ if (entry_ptr->ring == ring)
+ cur_ring_pel_len++;
+
+ entry_ptr = entry_ptr->next;
+ } /* end while */
+
+ old_ring_pel_len = cur_ring_pel_len;
+ while (cache_ptr->index_ring_len[ring] > 0) {
+ /* first, try to flush-destroy any dirty entries. Do this by
+ * making a scan through the slist. Note that new dirty entries
+ * may be created by the flush call backs. Thus it is possible
+ * that the slist will not be empty after we finish the scan.
*/
- cooked_flags = flags & H5C__FLUSH_CLEAR_ONLY_FLAG;
- evict_flags = flags & H5C__EVICT_ALLOW_LAST_PINS_FLAG;
- /* The flush procedure here is a bit strange.
- *
- * In the outer while loop we make at least one pass through the
- * cache, and then repeat until either all the pinned entries in
- * the ring unpin themselves, or until the number of pinned entries
- * in the ring stops declining. In this later case, we scream and die.
- *
- * Since the fractal heap can dirty, resize, and/or move entries
- * in is flush callback, it is possible that the cache will still
- * contain dirty entries at this point. If so, we must make more
- * passes through the skip list to allow it to empty.
+#if H5C_DO_SANITY_CHECKS
+ /* Depending on circumstances, H5C__flush_single_entry() will
+ * remove dirty entries from the slist as it flushes them.
+ * Thus for sanity checks we must make note of the initial
+ * slist length and size before we do any flushes.
+ */
+ initial_slist_len = cache_ptr->slist_len;
+ initial_slist_size = cache_ptr->slist_size;
+
+ /* There is also the possibility that entries will be
+ * dirtied, resized, moved, and/or removed from the cache
+ * as the result of calls to the flush callbacks. We use
+ * the slist_len_increase and slist_size_increase increase
+ * fields in struct H5C_t to track these changes for purpose
+ * of sanity checking.
*
- * Further, since clean entries can be dirtied, resized, and/or moved
- * as the result of a flush call back (either the entries own, or that
- * for some other cache entry), we can no longer promise to flush
- * the cache entries in increasing address order.
+ * To this end, we must zero these fields before we start
+ * the pass through the slist.
+ */
+ cache_ptr->slist_len_increase = 0;
+ cache_ptr->slist_size_increase = 0;
+#endif /* H5C_DO_SANITY_CHECKS */
+
+ /* Set the cache_ptr->slist_changed to false.
*
- * Instead, we just do the best we can -- making a pass through
- * the skip list, and then a pass through the "clean" entries, and
- * then repeating as needed. Thus it is quite possible that an
- * entry will be evicted from the cache only to be re-loaded later
- * in the flush process (From what Quincey tells me, the pin
- * mechanism makes this impossible, but even it it is true now,
- * we shouldn't count on it in the future.)
+ * This flag is set to TRUE by H5C__flush_single_entry if the slist
+ * is modified by a pre_serialize, serialize, or notify callback.
*
- * The bottom line is that entries will probably be flushed in close
- * to increasing address order, but there are no guarantees.
+ * H5C__flush_invalidate_ring() uses this flag to detect any
+ * modifications to the slist that might corrupt the scan of
+ * the slist -- and restart the scan in this event.
*/
+ cache_ptr->slist_changed = FALSE;
- /* compute the number of pinned entries in this ring */
- entry_ptr = cache_ptr->pel_head_ptr;
- cur_ring_pel_len = 0;
- while (entry_ptr != NULL) {
- HDassert(entry_ptr->magic == H5C__H5C_CACHE_ENTRY_T_MAGIC);
- HDassert(entry_ptr->ring >= ring);
- if (entry_ptr->ring == ring)
- cur_ring_pel_len++;
+ /* this done, start the scan of the slist */
+ restart_slist_scan = TRUE;
+ while (restart_slist_scan || (node_ptr != NULL)) {
+ if (restart_slist_scan) {
+ restart_slist_scan = FALSE;
- entry_ptr = entry_ptr->next;
- } /* end while */
+ /* Start at beginning of skip list */
+ node_ptr = H5SL_first(cache_ptr->slist_ptr);
+ if (node_ptr == NULL)
+ /* the slist is empty -- break out of inner loop */
+ break;
- old_ring_pel_len = cur_ring_pel_len;
- while (cache_ptr->index_ring_len[ring] > 0) {
- /* first, try to flush-destroy any dirty entries. Do this by
- * making a scan through the slist. Note that new dirty entries
- * may be created by the flush call backs. Thus it is possible
- * that the slist will not be empty after we finish the scan.
- */
+ /* Get cache entry for this node */
+ next_entry_ptr = (H5C_cache_entry_t *)H5SL_item(node_ptr);
+ if (NULL == next_entry_ptr)
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "next_entry_ptr == NULL ?!?!")
-#if H5C_DO_SANITY_CHECKS
- /* Depending on circumstances, H5C__flush_single_entry() will
- * remove dirty entries from the slist as it flushes them.
- * Thus for sanity checks we must make note of the initial
- * slist length and size before we do any flushes.
- */
- initial_slist_len = cache_ptr->slist_len;
- initial_slist_size = cache_ptr->slist_size;
-
- /* There is also the possibility that entries will be
- * dirtied, resized, moved, and/or removed from the cache
- * as the result of calls to the flush callbacks. We use
- * the slist_len_increase and slist_size_increase increase
- * fields in struct H5C_t to track these changes for purpose
- * of sanity checking.
- *
- * To this end, we must zero these fields before we start
- * the pass through the slist.
- */
- cache_ptr->slist_len_increase = 0;
- cache_ptr->slist_size_increase = 0;
-#endif /* H5C_DO_SANITY_CHECKS */
+ HDassert(next_entry_ptr->magic == H5C__H5C_CACHE_ENTRY_T_MAGIC);
+ HDassert(next_entry_ptr->is_dirty);
+ HDassert(next_entry_ptr->in_slist);
+ HDassert(next_entry_ptr->ring >= ring);
+ } /* end if */
- /* Set the cache_ptr->slist_changed to false.
+ entry_ptr = next_entry_ptr;
+
+ /* It is possible that entries will be dirtied, resized,
+ * flushed, or removed from the cache via the take ownership
+ * flag as the result of pre_serialize or serialized callbacks.
*
- * This flag is set to TRUE by H5C__flush_single_entry if the slist
- * is modified by a pre_serialize, serialize, or notify callback.
+ * This in turn can corrupt the scan through the slist.
*
- * H5C__flush_invalidate_ring() uses this flag to detect any
- * modifications to the slist that might corrupt the scan of
- * the slist -- and restart the scan in this event.
+ * We test for slist modifications in the pre_serialize
+ * and serialize callbacks, and restart the scan of the
+ * slist if we find them. However, best we do some extra
+ * sanity checking just in case.
*/
- cache_ptr->slist_changed = FALSE;
-
- /* this done, start the scan of the slist */
- restart_slist_scan = TRUE;
- while (restart_slist_scan || (node_ptr != NULL)) {
- if (restart_slist_scan) {
- restart_slist_scan = FALSE;
-
- /* Start at beginning of skip list */
- node_ptr = H5SL_first(cache_ptr->slist_ptr);
- if (node_ptr == NULL)
- /* the slist is empty -- break out of inner loop */
- break;
-
- /* Get cache entry for this node */
- next_entry_ptr = (H5C_cache_entry_t *)H5SL_item(node_ptr);
- if (NULL == next_entry_ptr)
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "next_entry_ptr == NULL ?!?!")
-
- HDassert(next_entry_ptr->magic == H5C__H5C_CACHE_ENTRY_T_MAGIC);
- HDassert(next_entry_ptr->is_dirty);
- HDassert(next_entry_ptr->in_slist);
- HDassert(next_entry_ptr->ring >= ring);
- } /* end if */
+ HDassert(entry_ptr != NULL);
+ HDassert(entry_ptr->magic == H5C__H5C_CACHE_ENTRY_T_MAGIC);
+ HDassert(entry_ptr->in_slist);
+ HDassert(entry_ptr->is_dirty);
+ HDassert(entry_ptr->ring >= ring);
- entry_ptr = next_entry_ptr;
-
- /* It is possible that entries will be dirtied, resized,
- * flushed, or removed from the cache via the take ownership
- * flag as the result of pre_serialize or serialized callbacks.
- *
- * This in turn can corrupt the scan through the slist.
- *
- * We test for slist modifications in the pre_serialize
- * and serialize callbacks, and restart the scan of the
- * slist if we find them. However, best we do some extra
- * sanity checking just in case.
- */
- HDassert(entry_ptr != NULL);
- HDassert(entry_ptr->magic == H5C__H5C_CACHE_ENTRY_T_MAGIC);
- HDassert(entry_ptr->in_slist);
- HDassert(entry_ptr->is_dirty);
- HDassert(entry_ptr->ring >= ring);
+ /* increment node pointer now, before we delete its target
+ * from the slist.
+ */
+ node_ptr = H5SL_next(node_ptr);
+ if (node_ptr != NULL) {
+ next_entry_ptr = (H5C_cache_entry_t *)H5SL_item(node_ptr);
+ if (NULL == next_entry_ptr)
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "next_entry_ptr == NULL ?!?!")
+ HDassert(next_entry_ptr->magic == H5C__H5C_CACHE_ENTRY_T_MAGIC);
+ HDassert(next_entry_ptr->is_dirty);
+ HDassert(next_entry_ptr->in_slist);
+ HDassert(next_entry_ptr->ring >= ring);
+ HDassert(entry_ptr != next_entry_ptr);
+ } /* end if */
+ else
+ next_entry_ptr = NULL;
- /* increment node pointer now, before we delete its target
- * from the slist.
- */
- node_ptr = H5SL_next(node_ptr);
- if (node_ptr != NULL) {
- next_entry_ptr = (H5C_cache_entry_t *)H5SL_item(node_ptr);
- if (NULL == next_entry_ptr)
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "next_entry_ptr == NULL ?!?!")
- HDassert(next_entry_ptr->magic == H5C__H5C_CACHE_ENTRY_T_MAGIC);
- HDassert(next_entry_ptr->is_dirty);
- HDassert(next_entry_ptr->in_slist);
- HDassert(next_entry_ptr->ring >= ring);
- HDassert(entry_ptr != next_entry_ptr);
+ /* Note that we now remove nodes from the slist as we flush
+ * the associated entries, instead of leaving them there
+ * until we are done, and then destroying all nodes in
+ * the slist.
+ *
+ * While this optimization used to be easy, with the possibility
+ * of new entries being added to the slist in the midst of the
+ * flush, we must keep the slist in canonical form at all
+ * times.
+ */
+ if (((!entry_ptr->flush_me_last) ||
+ ((entry_ptr->flush_me_last) && (cache_ptr->num_last_entries >= cache_ptr->slist_len))) &&
+ (entry_ptr->flush_dep_nchildren == 0) && (entry_ptr->ring == ring)) {
+ if (entry_ptr->is_protected) {
+ /* we have major problems -- but lets flush
+ * everything we can before we flag an error.
+ */
+ protected_entries++;
} /* end if */
- else
- next_entry_ptr = NULL;
-
- /* Note that we now remove nodes from the slist as we flush
- * the associated entries, instead of leaving them there
- * until we are done, and then destroying all nodes in
- * the slist.
- *
- * While this optimization used to be easy, with the possibility
- * of new entries being added to the slist in the midst of the
- * flush, we must keep the slist in canonical form at all
- * times.
- */
- if (((!entry_ptr->flush_me_last) ||
- ((entry_ptr->flush_me_last) && (cache_ptr->num_last_entries >= cache_ptr->slist_len))) &&
- (entry_ptr->flush_dep_nchildren == 0) && (entry_ptr->ring == ring)) {
- if (entry_ptr->is_protected) {
- /* we have major problems -- but lets flush
- * everything we can before we flag an error.
+ else if (entry_ptr->is_pinned) {
+ if (H5C__flush_single_entry(f, entry_ptr, H5C__DURING_FLUSH_FLAG) < 0)
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "dirty pinned entry flush failed")
+
+ if (cache_ptr->slist_changed) {
+ /* The slist has been modified by something
+ * other than the simple removal of the
+ * of the flushed entry after the flush.
+ *
+ * This has the potential to corrupt the
+ * scan through the slist, so restart it.
*/
- protected_entries++;
+ restart_slist_scan = TRUE;
+ cache_ptr->slist_changed = FALSE;
+ H5C__UPDATE_STATS_FOR_SLIST_SCAN_RESTART(cache_ptr);
} /* end if */
- else if (entry_ptr->is_pinned) {
- if (H5C__flush_single_entry(f, entry_ptr, H5C__DURING_FLUSH_FLAG) < 0)
- HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "dirty pinned entry flush failed")
-
- if (cache_ptr->slist_changed) {
- /* The slist has been modified by something
- * other than the simple removal of the
- * of the flushed entry after the flush.
- *
- * This has the potential to corrupt the
- * scan through the slist, so restart it.
- */
- restart_slist_scan = TRUE;
- cache_ptr->slist_changed = FALSE;
- H5C__UPDATE_STATS_FOR_SLIST_SCAN_RESTART(cache_ptr);
- } /* end if */
- } /* end else-if */
- else {
- if (H5C__flush_single_entry(f, entry_ptr,
- (cooked_flags | H5C__DURING_FLUSH_FLAG |
- H5C__FLUSH_INVALIDATE_FLAG |
- H5C__DEL_FROM_SLIST_ON_DESTROY_FLAG)) < 0)
- HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "dirty entry flush destroy failed")
-
- if (cache_ptr->slist_changed) {
- /* The slist has been modified by something
- * other than the simple removal of the
- * of the flushed entry after the flush.
- *
- * This has the potential to corrupt the
- * scan through the slist, so restart it.
- */
- restart_slist_scan = TRUE;
- cache_ptr->slist_changed = FALSE;
- H5C__UPDATE_STATS_FOR_SLIST_SCAN_RESTART(cache_ptr)
- } /* end if */
- } /* end else */
- } /* end if */
- } /* end while loop scanning skip list */
+ } /* end else-if */
+ else {
+ if (H5C__flush_single_entry(f, entry_ptr,
+ (cooked_flags | H5C__DURING_FLUSH_FLAG |
+ H5C__FLUSH_INVALIDATE_FLAG |
+ H5C__DEL_FROM_SLIST_ON_DESTROY_FLAG)) < 0)
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "dirty entry flush destroy failed")
+
+ if (cache_ptr->slist_changed) {
+ /* The slist has been modified by something
+ * other than the simple removal of the
+ * of the flushed entry after the flush.
+ *
+ * This has the potential to corrupt the
+ * scan through the slist, so restart it.
+ */
+ restart_slist_scan = TRUE;
+ cache_ptr->slist_changed = FALSE;
+ H5C__UPDATE_STATS_FOR_SLIST_SCAN_RESTART(cache_ptr)
+ } /* end if */
+ } /* end else */
+ } /* end if */
+ } /* end while loop scanning skip list */
#if H5C_DO_SANITY_CHECKS
- /* It is possible that entries were added to the slist during
- * the scan, either before or after scan pointer. The following
- * asserts take this into account.
- *
- * Don't bother with the sanity checks if node_ptr != NULL, as
- * in this case we broke out of the loop because it got changed
- * out from under us.
- */
+ /* It is possible that entries were added to the slist during
+ * the scan, either before or after scan pointer. The following
+ * asserts take this into account.
+ *
+ * Don't bother with the sanity checks if node_ptr != NULL, as
+ * in this case we broke out of the loop because it got changed
+ * out from under us.
+ */
- if (node_ptr == NULL) {
- HDassert(cache_ptr->slist_len ==
- (uint32_t)((int32_t)initial_slist_len + cache_ptr->slist_len_increase));
- HDassert(cache_ptr->slist_size ==
- (size_t)((ssize_t)initial_slist_size + cache_ptr->slist_size_increase));
- } /* end if */
-#endif /* H5C_DO_SANITY_CHECKS */
+ if (node_ptr == NULL) {
+ HDassert(cache_ptr->slist_len ==
+ (uint32_t)((int32_t)initial_slist_len + cache_ptr->slist_len_increase));
+ HDassert(cache_ptr->slist_size ==
+ (size_t)((ssize_t)initial_slist_size + cache_ptr->slist_size_increase));
+ } /* end if */
+#endif /* H5C_DO_SANITY_CHECKS */
- /* Since we are doing a destroy, we must make a pass through
- * the hash table and try to flush - destroy all entries that
- * remain.
- *
- * It used to be that all entries remaining in the cache at
- * this point had to be clean, but with the fractal heap mods
- * this may not be the case. If so, we will flush entries out
- * in increasing address order.
- *
- * Writes to disk are possible here.
- */
+ /* Since we are doing a destroy, we must make a pass through
+ * the hash table and try to flush - destroy all entries that
+ * remain.
+ *
+ * It used to be that all entries remaining in the cache at
+ * this point had to be clean, but with the fractal heap mods
+ * this may not be the case. If so, we will flush entries out
+ * in increasing address order.
+ *
+ * Writes to disk are possible here.
+ */
- /* reset the counters so that we can detect insertions, loads,
- * and moves caused by the pre_serialize and serialize calls.
- */
- cache_ptr->entries_loaded_counter = 0;
- cache_ptr->entries_inserted_counter = 0;
- cache_ptr->entries_relocated_counter = 0;
-
- next_entry_ptr = cache_ptr->il_head;
- while (next_entry_ptr != NULL) {
- entry_ptr = next_entry_ptr;
- HDassert(entry_ptr->magic == H5C__H5C_CACHE_ENTRY_T_MAGIC);
- HDassert(entry_ptr->ring >= ring);
+ /* reset the counters so that we can detect insertions, loads,
+ * and moves caused by the pre_serialize and serialize calls.
+ */
+ cache_ptr->entries_loaded_counter = 0;
+ cache_ptr->entries_inserted_counter = 0;
+ cache_ptr->entries_relocated_counter = 0;
- next_entry_ptr = entry_ptr->il_next;
- HDassert((next_entry_ptr == NULL) || (next_entry_ptr->magic == H5C__H5C_CACHE_ENTRY_T_MAGIC));
+ next_entry_ptr = cache_ptr->il_head;
+ while (next_entry_ptr != NULL) {
+ entry_ptr = next_entry_ptr;
+ HDassert(entry_ptr->magic == H5C__H5C_CACHE_ENTRY_T_MAGIC);
+ HDassert(entry_ptr->ring >= ring);
- if ((!entry_ptr->flush_me_last ||
- (entry_ptr->flush_me_last && cache_ptr->num_last_entries >= cache_ptr->slist_len)) &&
- entry_ptr->flush_dep_nchildren == 0 && entry_ptr->ring == ring) {
- if (entry_ptr->is_protected) {
- /* we have major problems -- but lets flush and
- * destroy everything we can before we flag an
- * error.
- */
- protected_entries++;
- if (!entry_ptr->in_slist)
- HDassert(!(entry_ptr->is_dirty));
- } /* end if */
- else if (!(entry_ptr->is_pinned)) {
- /* if *entry_ptr is dirty, it is possible
- * that one or more other entries may be
- * either removed from the cache, loaded
- * into the cache, or moved to a new location
- * in the file as a side effect of the flush.
- *
- * It's also possible that removing a clean
- * entry will remove the last child of a proxy
- * entry, allowing it to be removed also and
- * invalidating the next_entry_ptr.
- *
- * If either of these happen, and one of the target
- * or proxy entries happens to be the next entry in
- * the hash bucket, we could either find ourselves
- * either scanning a non-existant entry, scanning
- * through a different bucket, or skipping an entry.
- *
- * Neither of these are good, so restart the
- * the scan at the head of the hash bucket
- * after the flush if we detect that the next_entry_ptr
- * becomes invalid.
- *
- * This is not as inefficient at it might seem,
- * as hash buckets typically have at most two
- * or three entries.
- */
- cache_ptr->entry_watched_for_removal = next_entry_ptr;
-
- if (H5C__flush_single_entry(f, entry_ptr,
- (cooked_flags | H5C__DURING_FLUSH_FLAG |
- H5C__FLUSH_INVALIDATE_FLAG |
- H5C__DEL_FROM_SLIST_ON_DESTROY_FLAG)) < 0)
- HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "Entry flush destroy failed")
-
- /* Restart the index list scan if necessary. Must
- * do this if the next entry is evicted, and also if
- * one or more entries are inserted, loaded, or moved
- * as these operations can result in part of the scan
- * being skipped -- which can cause a spurious failure
- * if this results in the size of the pinned entry
- * failing to decline during the pass.
- */
- if ((NULL != next_entry_ptr && NULL == cache_ptr->entry_watched_for_removal) ||
- (cache_ptr->entries_loaded_counter > 0) ||
- (cache_ptr->entries_inserted_counter > 0) ||
- (cache_ptr->entries_relocated_counter > 0)) {
+ next_entry_ptr = entry_ptr->il_next;
+ HDassert((next_entry_ptr == NULL) || (next_entry_ptr->magic == H5C__H5C_CACHE_ENTRY_T_MAGIC));
- next_entry_ptr = cache_ptr->il_head;
+ if ((!entry_ptr->flush_me_last ||
+ (entry_ptr->flush_me_last && cache_ptr->num_last_entries >= cache_ptr->slist_len)) &&
+ entry_ptr->flush_dep_nchildren == 0 && entry_ptr->ring == ring) {
+ if (entry_ptr->is_protected) {
+ /* we have major problems -- but lets flush and
+ * destroy everything we can before we flag an
+ * error.
+ */
+ protected_entries++;
+ if (!entry_ptr->in_slist)
+ HDassert(!(entry_ptr->is_dirty));
+ } /* end if */
+ else if (!(entry_ptr->is_pinned)) {
+ /* if *entry_ptr is dirty, it is possible
+ * that one or more other entries may be
+ * either removed from the cache, loaded
+ * into the cache, or moved to a new location
+ * in the file as a side effect of the flush.
+ *
+ * It's also possible that removing a clean
+ * entry will remove the last child of a proxy
+ * entry, allowing it to be removed also and
+ * invalidating the next_entry_ptr.
+ *
+ * If either of these happen, and one of the target
+ * or proxy entries happens to be the next entry in
+ * the hash bucket, we could either find ourselves
+ * either scanning a non-existant entry, scanning
+ * through a different bucket, or skipping an entry.
+ *
+ * Neither of these are good, so restart the
+ * the scan at the head of the hash bucket
+ * after the flush if we detect that the next_entry_ptr
+ * becomes invalid.
+ *
+ * This is not as inefficient at it might seem,
+ * as hash buckets typically have at most two
+ * or three entries.
+ */
+ cache_ptr->entry_watched_for_removal = next_entry_ptr;
- cache_ptr->entries_loaded_counter = 0;
- cache_ptr->entries_inserted_counter = 0;
- cache_ptr->entries_relocated_counter = 0;
+ if (H5C__flush_single_entry(f, entry_ptr,
+ (cooked_flags | H5C__DURING_FLUSH_FLAG |
+ H5C__FLUSH_INVALIDATE_FLAG |
+ H5C__DEL_FROM_SLIST_ON_DESTROY_FLAG)) < 0)
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "Entry flush destroy failed")
+
+ /* Restart the index list scan if necessary. Must
+ * do this if the next entry is evicted, and also if
+ * one or more entries are inserted, loaded, or moved
+ * as these operations can result in part of the scan
+ * being skipped -- which can cause a spurious failure
+ * if this results in the size of the pinned entry
+ * failing to decline during the pass.
+ */
+ if ((NULL != next_entry_ptr && NULL == cache_ptr->entry_watched_for_removal) ||
+ (cache_ptr->entries_loaded_counter > 0) ||
+ (cache_ptr->entries_inserted_counter > 0) ||
+ (cache_ptr->entries_relocated_counter > 0)) {
- H5C__UPDATE_STATS_FOR_INDEX_SCAN_RESTART(cache_ptr)
- } /* end if */
- else
- cache_ptr->entry_watched_for_removal = NULL;
+ next_entry_ptr = cache_ptr->il_head;
+
+ cache_ptr->entries_loaded_counter = 0;
+ cache_ptr->entries_inserted_counter = 0;
+ cache_ptr->entries_relocated_counter = 0;
+
+ H5C__UPDATE_STATS_FOR_INDEX_SCAN_RESTART(cache_ptr)
} /* end if */
- } /* end if */
- } /* end for loop scanning hash table */
+ else
+ cache_ptr->entry_watched_for_removal = NULL;
+ } /* end if */
+ } /* end if */
+ } /* end for loop scanning hash table */
- /* We can't do anything if entries are pinned. The
- * hope is that the entries will be unpinned as the
- * result of destroys of entries that reference them.
- *
- * We detect this by noting the change in the number
- * of pinned entries from pass to pass. If it stops
- * shrinking before it hits zero, we scream and die.
- */
- old_ring_pel_len = cur_ring_pel_len;
- entry_ptr = cache_ptr->pel_head_ptr;
- cur_ring_pel_len = 0;
- while (entry_ptr != NULL) {
- HDassert(entry_ptr->magic == H5C__H5C_CACHE_ENTRY_T_MAGIC);
- HDassert(entry_ptr->ring >= ring);
+ /* We can't do anything if entries are pinned. The
+ * hope is that the entries will be unpinned as the
+ * result of destroys of entries that reference them.
+ *
+ * We detect this by noting the change in the number
+ * of pinned entries from pass to pass. If it stops
+ * shrinking before it hits zero, we scream and die.
+ */
+ old_ring_pel_len = cur_ring_pel_len;
+ entry_ptr = cache_ptr->pel_head_ptr;
+ cur_ring_pel_len = 0;
+ while (entry_ptr != NULL) {
+ HDassert(entry_ptr->magic == H5C__H5C_CACHE_ENTRY_T_MAGIC);
+ HDassert(entry_ptr->ring >= ring);
- if (entry_ptr->ring == ring)
- cur_ring_pel_len++;
+ if (entry_ptr->ring == ring)
+ cur_ring_pel_len++;
- entry_ptr = entry_ptr->next;
- } /* end while */
+ entry_ptr = entry_ptr->next;
+ } /* end while */
- /* Check if the number of pinned entries in the ring is positive, and
- * it is not declining. Scream and die if so.
- */
- if (cur_ring_pel_len > 0 && cur_ring_pel_len >= old_ring_pel_len) {
- /* Don't error if allowed to have pinned entries remaining */
- if (evict_flags)
- HGOTO_DONE(TRUE)
-
- HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL,
- "Pinned entry count not decreasing, cur_ring_pel_len = %d, old_ring_pel_len = "
- "%d, ring = %d",
- (int)cur_ring_pel_len, (int)old_ring_pel_len, (int)ring)
- } /* end if */
+ /* Check if the number of pinned entries in the ring is positive, and
+ * it is not declining. Scream and die if so.
+ */
+ if (cur_ring_pel_len > 0 && cur_ring_pel_len >= old_ring_pel_len) {
+ /* Don't error if allowed to have pinned entries remaining */
+ if (evict_flags)
+ HGOTO_DONE(TRUE)
+
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL,
+ "Pinned entry count not decreasing, cur_ring_pel_len = %d, old_ring_pel_len = "
+ "%d, ring = %d",
+ (int)cur_ring_pel_len, (int)old_ring_pel_len, (int)ring)
+ } /* end if */
- HDassert(protected_entries == cache_ptr->pl_len);
+ HDassert(protected_entries == cache_ptr->pl_len);
- if (protected_entries > 0 && protected_entries == cache_ptr->index_len)
- HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL,
- "Only protected entries left in cache, protected_entries = %d",
- (int)protected_entries)
- } /* main while loop */
+ if (protected_entries > 0 && protected_entries == cache_ptr->index_len)
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL,
+ "Only protected entries left in cache, protected_entries = %d",
+ (int)protected_entries)
+ } /* main while loop */
- /* Invariants, after destroying all entries in the ring */
- for (i = (int)H5C_RING_UNDEFINED; i <= (int)ring; i++) {
- HDassert(cache_ptr->index_ring_len[i] == 0);
- HDassert(cache_ptr->index_ring_size[i] == (size_t)0);
- HDassert(cache_ptr->clean_index_ring_size[i] == (size_t)0);
- HDassert(cache_ptr->dirty_index_ring_size[i] == (size_t)0);
+ /* Invariants, after destroying all entries in the ring */
+ for (i = (int)H5C_RING_UNDEFINED; i <= (int)ring; i++) {
+ HDassert(cache_ptr->index_ring_len[i] == 0);
+ HDassert(cache_ptr->index_ring_size[i] == (size_t)0);
+ HDassert(cache_ptr->clean_index_ring_size[i] == (size_t)0);
+ HDassert(cache_ptr->dirty_index_ring_size[i] == (size_t)0);
- HDassert(cache_ptr->slist_ring_len[i] == 0);
- HDassert(cache_ptr->slist_ring_size[i] == (size_t)0);
- } /* end for */
+ HDassert(cache_ptr->slist_ring_len[i] == 0);
+ HDassert(cache_ptr->slist_ring_size[i] == (size_t)0);
+ } /* end for */
- HDassert(protected_entries <= cache_ptr->pl_len);
+ HDassert(protected_entries <= cache_ptr->pl_len);
- if (protected_entries > 0)
- HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "Cache has protected entries")
- else if (cur_ring_pel_len > 0)
- HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "Can't unpin all pinned entries in ring")
+ if (protected_entries > 0)
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "Cache has protected entries")
+ else if (cur_ring_pel_len > 0)
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "Can't unpin all pinned entries in ring")
done:
- FUNC_LEAVE_NOAPI(ret_value)
- } /* H5C__flush_invalidate_ring() */
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* H5C__flush_invalidate_ring() */
- /*-------------------------------------------------------------------------
- * Function: H5C__flush_ring
- *
- * Purpose: Flush the entries contained in the specified cache and
- * ring. All entries in rings outside the specified ring
- * must have been flushed on entry.
- *
- * If the cache contains protected entries in the specified
- * ring, the function will fail, as protected entries cannot
- * be flushed. However all unprotected entries in the target
- * ring should be flushed before the function returns failure.
- *
- * If flush dependencies appear in the target ring, the
- * function makes repeated passes through the slist flushing
- * entries in flush dependency order.
- *
- * Return: Non-negative on success/Negative on failure or if there was
- * a request to flush all items and something was protected.
- *
- * Programmer: John Mainzer
- * 9/1/15
- *
- *-------------------------------------------------------------------------
- */
- static herr_t H5C__flush_ring(H5F_t * f, H5C_ring_t ring, unsigned flags)
- {
- H5C_t * cache_ptr = f->shared->cache;
- hbool_t flushed_entries_last_pass;
- hbool_t flush_marked_entries;
- hbool_t ignore_protected;
- hbool_t tried_to_flush_protected_entry = FALSE;
- hbool_t restart_slist_scan;
- uint32_t protected_entries = 0;
- H5SL_node_t * node_ptr = NULL;
- H5C_cache_entry_t *entry_ptr = NULL;
- H5C_cache_entry_t *next_entry_ptr = NULL;
+/*-------------------------------------------------------------------------
+ * Function: H5C__flush_ring
+ *
+ * Purpose: Flush the entries contained in the specified cache and
+ * ring. All entries in rings outside the specified ring
+ * must have been flushed on entry.
+ *
+ * If the cache contains protected entries in the specified
+ * ring, the function will fail, as protected entries cannot
+ * be flushed. However all unprotected entries in the target
+ * ring should be flushed before the function returns failure.
+ *
+ * If flush dependencies appear in the target ring, the
+ * function makes repeated passes through the slist flushing
+ * entries in flush dependency order.
+ *
+ * Return: Non-negative on success/Negative on failure or if there was
+ * a request to flush all items and something was protected.
+ *
+ * Programmer: John Mainzer
+ * 9/1/15
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5C__flush_ring(H5F_t *f, H5C_ring_t ring, unsigned flags)
+{
+ H5C_t * cache_ptr = f->shared->cache;
+ hbool_t flushed_entries_last_pass;
+ hbool_t flush_marked_entries;
+ hbool_t ignore_protected;
+ hbool_t tried_to_flush_protected_entry = FALSE;
+ hbool_t restart_slist_scan;
+ uint32_t protected_entries = 0;
+ H5SL_node_t * node_ptr = NULL;
+ H5C_cache_entry_t *entry_ptr = NULL;
+ H5C_cache_entry_t *next_entry_ptr = NULL;
#if H5C_DO_SANITY_CHECKS
- uint32_t initial_slist_len = 0;
- size_t initial_slist_size = 0;
+ uint32_t initial_slist_len = 0;
+ size_t initial_slist_size = 0;
#endif /* H5C_DO_SANITY_CHECKS */
- int i;
- herr_t ret_value = SUCCEED;
+ int i;
+ herr_t ret_value = SUCCEED;
- FUNC_ENTER_STATIC
+ FUNC_ENTER_STATIC
- HDassert(cache_ptr);
- HDassert(cache_ptr->magic == H5C__H5C_T_MAGIC);
- HDassert(cache_ptr->slist_ptr);
- HDassert((flags & H5C__FLUSH_INVALIDATE_FLAG) == 0);
- HDassert(ring > H5C_RING_UNDEFINED);
- HDassert(ring < H5C_RING_NTYPES);
+ HDassert(cache_ptr);
+ HDassert(cache_ptr->magic == H5C__H5C_T_MAGIC);
+ HDassert(cache_ptr->slist_ptr);
+ HDassert((flags & H5C__FLUSH_INVALIDATE_FLAG) == 0);
+ HDassert(ring > H5C_RING_UNDEFINED);
+ HDassert(ring < H5C_RING_NTYPES);
#if H5C_DO_EXTREME_SANITY_CHECKS
- if ((H5C__validate_protected_entry_list(cache_ptr) < 0) ||
- (H5C__validate_pinned_entry_list(cache_ptr) < 0) || (H5C__validate_lru_list(cache_ptr) < 0))
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "an extreme sanity check failed on entry")
+ if ((H5C__validate_protected_entry_list(cache_ptr) < 0) ||
+ (H5C__validate_pinned_entry_list(cache_ptr) < 0) || (H5C__validate_lru_list(cache_ptr) < 0))
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "an extreme sanity check failed on entry")
#endif /* H5C_DO_EXTREME_SANITY_CHECKS */
- ignore_protected = ((flags & H5C__FLUSH_IGNORE_PROTECTED_FLAG) != 0);
- flush_marked_entries = ((flags & H5C__FLUSH_MARKED_ENTRIES_FLAG) != 0);
+ ignore_protected = ((flags & H5C__FLUSH_IGNORE_PROTECTED_FLAG) != 0);
+ flush_marked_entries = ((flags & H5C__FLUSH_MARKED_ENTRIES_FLAG) != 0);
- if (!flush_marked_entries)
- for (i = (int)H5C_RING_UNDEFINED; i < (int)ring; i++)
- HDassert(cache_ptr->slist_ring_len[i] == 0);
+ if (!flush_marked_entries)
+ for (i = (int)H5C_RING_UNDEFINED; i < (int)ring; i++)
+ HDassert(cache_ptr->slist_ring_len[i] == 0);
- HDassert(cache_ptr->flush_in_progress);
+ HDassert(cache_ptr->flush_in_progress);
- /* When we are only flushing marked entries, the slist will usually
- * still contain entries when we have flushed everything we should.
- * Thus we track whether we have flushed any entries in the last
- * pass, and terminate if we haven't.
- */
- flushed_entries_last_pass = TRUE;
+ /* When we are only flushing marked entries, the slist will usually
+ * still contain entries when we have flushed everything we should.
+ * Thus we track whether we have flushed any entries in the last
+ * pass, and terminate if we haven't.
+ */
+ flushed_entries_last_pass = TRUE;
- /* Set the cache_ptr->slist_changed to false.
- *
- * This flag is set to TRUE by H5C__flush_single_entry if the
- * slist is modified by a pre_serialize, serialize, or notify callback.
- * H5C_flush_cache uses this flag to detect any modifications
- * to the slist that might corrupt the scan of the slist -- and
- * restart the scan in this event.
- */
- cache_ptr->slist_changed = FALSE;
+ /* Set the cache_ptr->slist_changed to false.
+ *
+ * This flag is set to TRUE by H5C__flush_single_entry if the
+ * slist is modified by a pre_serialize, serialize, or notify callback.
+ * H5C_flush_cache uses this flag to detect any modifications
+ * to the slist that might corrupt the scan of the slist -- and
+ * restart the scan in this event.
+ */
+ cache_ptr->slist_changed = FALSE;
- while ((cache_ptr->slist_ring_len[ring] > 0) && (protected_entries == 0) &&
- (flushed_entries_last_pass)) {
- flushed_entries_last_pass = FALSE;
+ while ((cache_ptr->slist_ring_len[ring] > 0) && (protected_entries == 0) && (flushed_entries_last_pass)) {
+ flushed_entries_last_pass = FALSE;
#if H5C_DO_SANITY_CHECKS
- /* For sanity checking, try to verify that the skip list has
- * the expected size and number of entries at the end of each
- * internal while loop (see below).
- *
- * Doing this get a bit tricky, as depending on flags, we may
- * or may not flush all the entries in the slist.
- *
- * To make things more entertaining, with the advent of the
- * fractal heap, the entry serialize callback can cause entries
- * to be dirtied, resized, and/or moved. Also, the
- * pre_serialize callback can result in an entry being
- * removed from the cache via the take ownership flag.
- *
- * To deal with this, we first make note of the initial
- * skip list length and size:
- */
- initial_slist_len = cache_ptr->slist_len;
- initial_slist_size = cache_ptr->slist_size;
-
- /* As mentioned above, there is the possibility that
- * entries will be dirtied, resized, flushed, or removed
- * from the cache via the take ownership flag during
- * our pass through the skip list. To capture the number
- * of entries added, and the skip list size delta,
- * zero the slist_len_increase and slist_size_increase of
- * the cache's instance of H5C_t. These fields will be
- * updated elsewhere to account for slist insertions and/or
- * dirty entry size changes.
- */
- cache_ptr->slist_len_increase = 0;
- cache_ptr->slist_size_increase = 0;
+ /* For sanity checking, try to verify that the skip list has
+ * the expected size and number of entries at the end of each
+ * internal while loop (see below).
+ *
+ * Doing this get a bit tricky, as depending on flags, we may
+ * or may not flush all the entries in the slist.
+ *
+ * To make things more entertaining, with the advent of the
+ * fractal heap, the entry serialize callback can cause entries
+ * to be dirtied, resized, and/or moved. Also, the
+ * pre_serialize callback can result in an entry being
+ * removed from the cache via the take ownership flag.
+ *
+ * To deal with this, we first make note of the initial
+ * skip list length and size:
+ */
+ initial_slist_len = cache_ptr->slist_len;
+ initial_slist_size = cache_ptr->slist_size;
+
+ /* As mentioned above, there is the possibility that
+ * entries will be dirtied, resized, flushed, or removed
+ * from the cache via the take ownership flag during
+ * our pass through the skip list. To capture the number
+ * of entries added, and the skip list size delta,
+ * zero the slist_len_increase and slist_size_increase of
+ * the cache's instance of H5C_t. These fields will be
+ * updated elsewhere to account for slist insertions and/or
+ * dirty entry size changes.
+ */
+ cache_ptr->slist_len_increase = 0;
+ cache_ptr->slist_size_increase = 0;
- /* at the end of the loop, use these values to compute the
- * expected slist length and size and compare this with the
- * value recorded in the cache's instance of H5C_t.
- */
+ /* at the end of the loop, use these values to compute the
+ * expected slist length and size and compare this with the
+ * value recorded in the cache's instance of H5C_t.
+ */
#endif /* H5C_DO_SANITY_CHECKS */
- restart_slist_scan = TRUE;
+ restart_slist_scan = TRUE;
- while ((restart_slist_scan) || (node_ptr != NULL)) {
- if (restart_slist_scan) {
- restart_slist_scan = FALSE;
+ while ((restart_slist_scan) || (node_ptr != NULL)) {
+ if (restart_slist_scan) {
+ restart_slist_scan = FALSE;
- /* Start at beginning of skip list */
- node_ptr = H5SL_first(cache_ptr->slist_ptr);
+ /* Start at beginning of skip list */
+ node_ptr = H5SL_first(cache_ptr->slist_ptr);
- if (node_ptr == NULL)
- /* the slist is empty -- break out of inner loop */
- break;
+ if (node_ptr == NULL)
+ /* the slist is empty -- break out of inner loop */
+ break;
- /* Get cache entry for this node */
- next_entry_ptr = (H5C_cache_entry_t *)H5SL_item(node_ptr);
+ /* Get cache entry for this node */
+ next_entry_ptr = (H5C_cache_entry_t *)H5SL_item(node_ptr);
- if (NULL == next_entry_ptr)
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "next_entry_ptr == NULL ?!?!")
+ if (NULL == next_entry_ptr)
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "next_entry_ptr == NULL ?!?!")
- HDassert(next_entry_ptr->magic == H5C__H5C_CACHE_ENTRY_T_MAGIC);
- HDassert(next_entry_ptr->is_dirty);
- HDassert(next_entry_ptr->in_slist);
- } /* end if */
+ HDassert(next_entry_ptr->magic == H5C__H5C_CACHE_ENTRY_T_MAGIC);
+ HDassert(next_entry_ptr->is_dirty);
+ HDassert(next_entry_ptr->in_slist);
+ } /* end if */
- entry_ptr = next_entry_ptr;
-
- /* With the advent of the fractal heap, the free space
- * manager, and the version 3 cache, it is possible
- * that the pre-serialize or serialize callback will
- * dirty, resize, or take ownership of other entries
- * in the cache.
- *
- * To deal with this, I have inserted code to detect any
- * change in the skip list not directly under the control
- * of this function. If such modifications are detected,
- * we must re-start the scan of the skip list to avoid
- * the possibility that the target of the next_entry_ptr
- * may have been flushed or deleted from the cache.
- *
- * To verify that all such possibilities have been dealt
- * with, we do a bit of extra sanity checking on
- * entry_ptr.
- */
- HDassert(entry_ptr->magic == H5C__H5C_CACHE_ENTRY_T_MAGIC);
- HDassert(entry_ptr->in_slist);
- HDassert(entry_ptr->is_dirty);
- if (!flush_marked_entries || entry_ptr->flush_marker)
- HDassert(entry_ptr->ring >= ring);
-
- /* Advance node pointer now, before we delete its target
- * from the slist.
- */
- node_ptr = H5SL_next(node_ptr);
- if (node_ptr != NULL) {
- next_entry_ptr = (H5C_cache_entry_t *)H5SL_item(node_ptr);
- if (NULL == next_entry_ptr)
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "next_entry_ptr == NULL ?!?!")
+ entry_ptr = next_entry_ptr;
- HDassert(next_entry_ptr->magic == H5C__H5C_CACHE_ENTRY_T_MAGIC);
- HDassert(next_entry_ptr->is_dirty);
- HDassert(next_entry_ptr->in_slist);
+ /* With the advent of the fractal heap, the free space
+ * manager, and the version 3 cache, it is possible
+ * that the pre-serialize or serialize callback will
+ * dirty, resize, or take ownership of other entries
+ * in the cache.
+ *
+ * To deal with this, I have inserted code to detect any
+ * change in the skip list not directly under the control
+ * of this function. If such modifications are detected,
+ * we must re-start the scan of the skip list to avoid
+ * the possibility that the target of the next_entry_ptr
+ * may have been flushed or deleted from the cache.
+ *
+ * To verify that all such possibilities have been dealt
+ * with, we do a bit of extra sanity checking on
+ * entry_ptr.
+ */
+ HDassert(entry_ptr->magic == H5C__H5C_CACHE_ENTRY_T_MAGIC);
+ HDassert(entry_ptr->in_slist);
+ HDassert(entry_ptr->is_dirty);
+ if (!flush_marked_entries || entry_ptr->flush_marker)
+ HDassert(entry_ptr->ring >= ring);
- if (!flush_marked_entries || next_entry_ptr->flush_marker)
- HDassert(next_entry_ptr->ring >= ring);
+ /* Advance node pointer now, before we delete its target
+ * from the slist.
+ */
+ node_ptr = H5SL_next(node_ptr);
+ if (node_ptr != NULL) {
+ next_entry_ptr = (H5C_cache_entry_t *)H5SL_item(node_ptr);
+ if (NULL == next_entry_ptr)
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "next_entry_ptr == NULL ?!?!")
- HDassert(entry_ptr != next_entry_ptr);
- } /* end if */
- else
- next_entry_ptr = NULL;
+ HDassert(next_entry_ptr->magic == H5C__H5C_CACHE_ENTRY_T_MAGIC);
+ HDassert(next_entry_ptr->is_dirty);
+ HDassert(next_entry_ptr->in_slist);
- if ((!flush_marked_entries || entry_ptr->flush_marker) &&
- (!entry_ptr->flush_me_last ||
- (entry_ptr->flush_me_last && (cache_ptr->num_last_entries >= cache_ptr->slist_len ||
- (flush_marked_entries && entry_ptr->flush_marker)))) &&
- (entry_ptr->flush_dep_nchildren == 0 || entry_ptr->flush_dep_ndirty_children == 0) &&
- entry_ptr->ring == ring) {
+ if (!flush_marked_entries || next_entry_ptr->flush_marker)
+ HDassert(next_entry_ptr->ring >= ring);
- HDassert(entry_ptr->flush_dep_nunser_children == 0);
+ HDassert(entry_ptr != next_entry_ptr);
+ } /* end if */
+ else
+ next_entry_ptr = NULL;
+
+ if ((!flush_marked_entries || entry_ptr->flush_marker) &&
+ (!entry_ptr->flush_me_last ||
+ (entry_ptr->flush_me_last && (cache_ptr->num_last_entries >= cache_ptr->slist_len ||
+ (flush_marked_entries && entry_ptr->flush_marker)))) &&
+ (entry_ptr->flush_dep_nchildren == 0 || entry_ptr->flush_dep_ndirty_children == 0) &&
+ entry_ptr->ring == ring) {
+
+ HDassert(entry_ptr->flush_dep_nunser_children == 0);
+
+ if (entry_ptr->is_protected) {
+ /* we probably have major problems -- but lets
+ * flush everything we can before we decide
+ * whether to flag an error.
+ */
+ tried_to_flush_protected_entry = TRUE;
+ protected_entries++;
+ } /* end if */
+ else {
+ if (H5C__flush_single_entry(f, entry_ptr, (flags | H5C__DURING_FLUSH_FLAG)) < 0)
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "Can't flush entry")
- if (entry_ptr->is_protected) {
- /* we probably have major problems -- but lets
- * flush everything we can before we decide
- * whether to flag an error.
+ if (cache_ptr->slist_changed) {
+ /* The slist has been modified by something
+ * other than the simple removal of the
+ * of the flushed entry after the flush.
+ *
+ * This has the potential to corrupt the
+ * scan through the slist, so restart it.
*/
- tried_to_flush_protected_entry = TRUE;
- protected_entries++;
+ restart_slist_scan = TRUE;
+ cache_ptr->slist_changed = FALSE;
+ H5C__UPDATE_STATS_FOR_SLIST_SCAN_RESTART(cache_ptr)
} /* end if */
- else {
- if (H5C__flush_single_entry(f, entry_ptr, (flags | H5C__DURING_FLUSH_FLAG)) < 0)
- HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "Can't flush entry")
-
- if (cache_ptr->slist_changed) {
- /* The slist has been modified by something
- * other than the simple removal of the
- * of the flushed entry after the flush.
- *
- * This has the potential to corrupt the
- * scan through the slist, so restart it.
- */
- restart_slist_scan = TRUE;
- cache_ptr->slist_changed = FALSE;
- H5C__UPDATE_STATS_FOR_SLIST_SCAN_RESTART(cache_ptr)
- } /* end if */
- flushed_entries_last_pass = TRUE;
- } /* end else */
- } /* end if */
- } /* while ( ( restart_slist_scan ) || ( node_ptr != NULL ) ) */
+ flushed_entries_last_pass = TRUE;
+ } /* end else */
+ } /* end if */
+ } /* while ( ( restart_slist_scan ) || ( node_ptr != NULL ) ) */
#if H5C_DO_SANITY_CHECKS
- /* Verify that the slist size and length are as expected. */
- HDassert((uint32_t)((int32_t)initial_slist_len + cache_ptr->slist_len_increase) ==
- cache_ptr->slist_len);
- HDassert((size_t)((ssize_t)initial_slist_size + cache_ptr->slist_size_increase) ==
- cache_ptr->slist_size);
-#endif /* H5C_DO_SANITY_CHECKS */
- } /* while */
+ /* Verify that the slist size and length are as expected. */
+ HDassert((uint32_t)((int32_t)initial_slist_len + cache_ptr->slist_len_increase) ==
+ cache_ptr->slist_len);
+ HDassert((size_t)((ssize_t)initial_slist_size + cache_ptr->slist_size_increase) ==
+ cache_ptr->slist_size);
+#endif /* H5C_DO_SANITY_CHECKS */
+ } /* while */
- HDassert(protected_entries <= cache_ptr->pl_len);
+ HDassert(protected_entries <= cache_ptr->pl_len);
- if (((cache_ptr->pl_len > 0) && (!ignore_protected)) || (tried_to_flush_protected_entry))
- HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "cache has protected items")
+ if (((cache_ptr->pl_len > 0) && (!ignore_protected)) || (tried_to_flush_protected_entry))
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "cache has protected items")
#if H5C_DO_SANITY_CHECKS
- if (!flush_marked_entries) {
- HDassert(cache_ptr->slist_ring_len[ring] == 0);
- HDassert(cache_ptr->slist_ring_size[ring] == 0);
- } /* end if */
-#endif /* H5C_DO_SANITY_CHECKS */
+ if (!flush_marked_entries) {
+ HDassert(cache_ptr->slist_ring_len[ring] == 0);
+ HDassert(cache_ptr->slist_ring_size[ring] == 0);
+ } /* end if */
+#endif /* H5C_DO_SANITY_CHECKS */
done:
- FUNC_LEAVE_NOAPI(ret_value)
- } /* H5C__flush_ring() */
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* H5C__flush_ring() */
- /*-------------------------------------------------------------------------
- *
- * Function: H5C__flush_single_entry
- *
- * Purpose: Flush or clear (and evict if requested) the cache entry
- * with the specified address and type. If the type is NULL,
- * any unprotected entry at the specified address will be
- * flushed (and possibly evicted).
- *
- * Attempts to flush a protected entry will result in an
- * error.
- *
- * If the H5C__FLUSH_INVALIDATE_FLAG flag is set, the entry will
- * be cleared and not flushed, and the call can't be part of a
- * sequence of flushes.
- *
- * If the caller knows the address of the skip list node at
- * which the target entry resides, it can avoid a lookup
- * by supplying that address in the tgt_node_ptr parameter.
- * If this parameter is NULL, the function will do a skip list
- * search for the entry instead.
- *
- * The function does nothing silently if there is no entry
- * at the supplied address, or if the entry found has the
- * wrong type.
- *
- * Return: Non-negative on success/Negative on failure or if there was
- * an attempt to flush a protected item.
- *
- * Programmer: John Mainzer, 5/5/04
- *
- *-------------------------------------------------------------------------
+/*-------------------------------------------------------------------------
+ *
+ * Function: H5C__flush_single_entry
+ *
+ * Purpose: Flush or clear (and evict if requested) the cache entry
+ * with the specified address and type. If the type is NULL,
+ * any unprotected entry at the specified address will be
+ * flushed (and possibly evicted).
+ *
+ * Attempts to flush a protected entry will result in an
+ * error.
+ *
+ * If the H5C__FLUSH_INVALIDATE_FLAG flag is set, the entry will
+ * be cleared and not flushed, and the call can't be part of a
+ * sequence of flushes.
+ *
+ * If the caller knows the address of the skip list node at
+ * which the target entry resides, it can avoid a lookup
+ * by supplying that address in the tgt_node_ptr parameter.
+ * If this parameter is NULL, the function will do a skip list
+ * search for the entry instead.
+ *
+ * The function does nothing silently if there is no entry
+ * at the supplied address, or if the entry found has the
+ * wrong type.
+ *
+ * Return: Non-negative on success/Negative on failure or if there was
+ * an attempt to flush a protected item.
+ *
+ * Programmer: John Mainzer, 5/5/04
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5C__flush_single_entry(H5F_t *f, H5C_cache_entry_t *entry_ptr, unsigned flags)
+{
+ H5C_t * cache_ptr; /* Cache for file */
+ hbool_t destroy; /* external flag */
+ hbool_t clear_only; /* external flag */
+ hbool_t free_file_space; /* external flag */
+ hbool_t take_ownership; /* external flag */
+ hbool_t del_from_slist_on_destroy; /* external flag */
+ hbool_t during_flush; /* external flag */
+ hbool_t write_entry; /* internal flag */
+ hbool_t destroy_entry; /* internal flag */
+ hbool_t generate_image; /* internal flag */
+ hbool_t update_page_buffer; /* internal flag */
+ hbool_t was_dirty;
+ hbool_t suppress_image_entry_writes = FALSE;
+ hbool_t suppress_image_entry_frees = FALSE;
+ haddr_t entry_addr = HADDR_UNDEF;
+ herr_t ret_value = SUCCEED; /* Return value */
+
+ FUNC_ENTER_PACKAGE
+
+ HDassert(f);
+ cache_ptr = f->shared->cache;
+ HDassert(cache_ptr);
+ HDassert(cache_ptr->magic == H5C__H5C_T_MAGIC);
+ HDassert(entry_ptr);
+ HDassert(entry_ptr->magic == H5C__H5C_CACHE_ENTRY_T_MAGIC);
+ HDassert(entry_ptr->ring != H5C_RING_UNDEFINED);
+ HDassert(entry_ptr->type);
+
+ /* setup external flags from the flags parameter */
+ destroy = ((flags & H5C__FLUSH_INVALIDATE_FLAG) != 0);
+ clear_only = ((flags & H5C__FLUSH_CLEAR_ONLY_FLAG) != 0);
+ free_file_space = ((flags & H5C__FREE_FILE_SPACE_FLAG) != 0);
+ take_ownership = ((flags & H5C__TAKE_OWNERSHIP_FLAG) != 0);
+ del_from_slist_on_destroy = ((flags & H5C__DEL_FROM_SLIST_ON_DESTROY_FLAG) != 0);
+ during_flush = ((flags & H5C__DURING_FLUSH_FLAG) != 0);
+ generate_image = ((flags & H5C__GENERATE_IMAGE_FLAG) != 0);
+ update_page_buffer = ((flags & H5C__UPDATE_PAGE_BUFFER_FLAG) != 0);
+
+ /* Set the flag for destroying the entry, based on the 'take ownership'
+ * and 'destroy' flags
*/
- herr_t H5C__flush_single_entry(H5F_t * f, H5C_cache_entry_t * entry_ptr, unsigned flags)
- {
- H5C_t * cache_ptr; /* Cache for file */
- hbool_t destroy; /* external flag */
- hbool_t clear_only; /* external flag */
- hbool_t free_file_space; /* external flag */
- hbool_t take_ownership; /* external flag */
- hbool_t del_from_slist_on_destroy; /* external flag */
- hbool_t during_flush; /* external flag */
- hbool_t write_entry; /* internal flag */
- hbool_t destroy_entry; /* internal flag */
- hbool_t generate_image; /* internal flag */
- hbool_t update_page_buffer; /* internal flag */
- hbool_t was_dirty;
- hbool_t suppress_image_entry_writes = FALSE;
- hbool_t suppress_image_entry_frees = FALSE;
- haddr_t entry_addr = HADDR_UNDEF;
- herr_t ret_value = SUCCEED; /* Return value */
-
- FUNC_ENTER_PACKAGE
-
- HDassert(f);
- cache_ptr = f->shared->cache;
- HDassert(cache_ptr);
- HDassert(cache_ptr->magic == H5C__H5C_T_MAGIC);
- HDassert(entry_ptr);
- HDassert(entry_ptr->magic == H5C__H5C_CACHE_ENTRY_T_MAGIC);
- HDassert(entry_ptr->ring != H5C_RING_UNDEFINED);
- HDassert(entry_ptr->type);
-
- /* setup external flags from the flags parameter */
- destroy = ((flags & H5C__FLUSH_INVALIDATE_FLAG) != 0);
- clear_only = ((flags & H5C__FLUSH_CLEAR_ONLY_FLAG) != 0);
- free_file_space = ((flags & H5C__FREE_FILE_SPACE_FLAG) != 0);
- take_ownership = ((flags & H5C__TAKE_OWNERSHIP_FLAG) != 0);
- del_from_slist_on_destroy = ((flags & H5C__DEL_FROM_SLIST_ON_DESTROY_FLAG) != 0);
- during_flush = ((flags & H5C__DURING_FLUSH_FLAG) != 0);
- generate_image = ((flags & H5C__GENERATE_IMAGE_FLAG) != 0);
- update_page_buffer = ((flags & H5C__UPDATE_PAGE_BUFFER_FLAG) != 0);
-
- /* Set the flag for destroying the entry, based on the 'take ownership'
- * and 'destroy' flags
- */
- if (take_ownership)
- destroy_entry = FALSE;
- else
- destroy_entry = destroy;
+ if (take_ownership)
+ destroy_entry = FALSE;
+ else
+ destroy_entry = destroy;
- /* we will write the entry to disk if it exists, is dirty, and if the
- * clear only flag is not set.
- */
- if (entry_ptr->is_dirty && !clear_only)
- write_entry = TRUE;
- else
- write_entry = FALSE;
+ /* we will write the entry to disk if it exists, is dirty, and if the
+ * clear only flag is not set.
+ */
+ if (entry_ptr->is_dirty && !clear_only)
+ write_entry = TRUE;
+ else
+ write_entry = FALSE;
- /* if we have received close warning, and we have been instructed to
- * generate a metadata cache image, and we have actually constructed
- * the entry images, set suppress_image_entry_frees to TRUE.
- *
- * Set suppress_image_entry_writes to TRUE if indicated by the
- * image_ctl flags.
- */
- if (cache_ptr->close_warning_received && cache_ptr->image_ctl.generate_image &&
- cache_ptr->num_entries_in_image > 0 && cache_ptr->image_entries) {
- /* Sanity checks */
- HDassert(entry_ptr->image_up_to_date || !(entry_ptr->include_in_image));
- HDassert(entry_ptr->image_ptr || !(entry_ptr->include_in_image));
- HDassert((!clear_only) || !(entry_ptr->include_in_image));
- HDassert((!take_ownership) || !(entry_ptr->include_in_image));
- HDassert((!free_file_space) || !(entry_ptr->include_in_image));
+ /* if we have received close warning, and we have been instructed to
+ * generate a metadata cache image, and we have actually constructed
+ * the entry images, set suppress_image_entry_frees to TRUE.
+ *
+ * Set suppress_image_entry_writes to TRUE if indicated by the
+ * image_ctl flags.
+ */
+ if (cache_ptr->close_warning_received && cache_ptr->image_ctl.generate_image &&
+ cache_ptr->num_entries_in_image > 0 && cache_ptr->image_entries) {
+ /* Sanity checks */
+ HDassert(entry_ptr->image_up_to_date || !(entry_ptr->include_in_image));
+ HDassert(entry_ptr->image_ptr || !(entry_ptr->include_in_image));
+ HDassert((!clear_only) || !(entry_ptr->include_in_image));
+ HDassert((!take_ownership) || !(entry_ptr->include_in_image));
+ HDassert((!free_file_space) || !(entry_ptr->include_in_image));
- suppress_image_entry_frees = TRUE;
+ suppress_image_entry_frees = TRUE;
- if (cache_ptr->image_ctl.flags & H5C_CI__SUPRESS_ENTRY_WRITES)
- suppress_image_entry_writes = TRUE;
- } /* end if */
+ if (cache_ptr->image_ctl.flags & H5C_CI__SUPRESS_ENTRY_WRITES)
+ suppress_image_entry_writes = TRUE;
+ } /* end if */
- /* run initial sanity checks */
+ /* run initial sanity checks */
#if H5C_DO_SANITY_CHECKS
- if (entry_ptr->in_slist) {
- HDassert(entry_ptr->is_dirty);
+ if (entry_ptr->in_slist) {
+ HDassert(entry_ptr->is_dirty);
- if ((entry_ptr->flush_marker) && (!entry_ptr->is_dirty))
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "entry in slist failed sanity checks")
- } /* end if */
- else {
- HDassert(!entry_ptr->is_dirty);
- HDassert(!entry_ptr->flush_marker);
+ if ((entry_ptr->flush_marker) && (!entry_ptr->is_dirty))
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "entry in slist failed sanity checks")
+ } /* end if */
+ else {
+ HDassert(!entry_ptr->is_dirty);
+ HDassert(!entry_ptr->flush_marker);
- if ((entry_ptr->is_dirty) || (entry_ptr->flush_marker))
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "entry failed sanity checks")
- } /* end else */
-#endif /* H5C_DO_SANITY_CHECKS */
+ if ((entry_ptr->is_dirty) || (entry_ptr->flush_marker))
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "entry failed sanity checks")
+ } /* end else */
+#endif /* H5C_DO_SANITY_CHECKS */
- if (entry_ptr->is_protected) {
- HDassert(!entry_ptr->is_protected);
+ if (entry_ptr->is_protected) {
+ HDassert(!entry_ptr->is_protected);
- /* Attempt to flush a protected entry -- scream and die. */
- HGOTO_ERROR(H5E_CACHE, H5E_PROTECT, FAIL, "Attempt to flush a protected entry")
- } /* end if */
+ /* Attempt to flush a protected entry -- scream and die. */
+ HGOTO_ERROR(H5E_CACHE, H5E_PROTECT, FAIL, "Attempt to flush a protected entry")
+ } /* end if */
- /* Set entry_ptr->flush_in_progress = TRUE and set
- * entry_ptr->flush_marker = FALSE
- *
- * We will set flush_in_progress back to FALSE at the end if the
- * entry still exists at that point.
- */
- entry_ptr->flush_in_progress = TRUE;
- entry_ptr->flush_marker = FALSE;
+ /* Set entry_ptr->flush_in_progress = TRUE and set
+ * entry_ptr->flush_marker = FALSE
+ *
+ * We will set flush_in_progress back to FALSE at the end if the
+ * entry still exists at that point.
+ */
+ entry_ptr->flush_in_progress = TRUE;
+ entry_ptr->flush_marker = FALSE;
- /* Preserve current dirty state for later */
- was_dirty = entry_ptr->is_dirty;
+ /* Preserve current dirty state for later */
+ was_dirty = entry_ptr->is_dirty;
- /* The entry is dirty, and we are doing a flush, a flush destroy or have
- * been requested to generate an image. In those cases, serialize the
- * entry.
- */
- if (write_entry || generate_image) {
- HDassert(entry_ptr->is_dirty);
+ /* The entry is dirty, and we are doing a flush, a flush destroy or have
+ * been requested to generate an image. In those cases, serialize the
+ * entry.
+ */
+ if (write_entry || generate_image) {
+ HDassert(entry_ptr->is_dirty);
- if (NULL == entry_ptr->image_ptr) {
- if (NULL == (entry_ptr->image_ptr = H5MM_malloc(entry_ptr->size + H5C_IMAGE_EXTRA_SPACE)))
- HGOTO_ERROR(H5E_CACHE, H5E_CANTALLOC, FAIL,
- "memory allocation failed for on disk image buffer")
+ if (NULL == entry_ptr->image_ptr) {
+ if (NULL == (entry_ptr->image_ptr = H5MM_malloc(entry_ptr->size + H5C_IMAGE_EXTRA_SPACE)))
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTALLOC, FAIL,
+ "memory allocation failed for on disk image buffer")
#if H5C_DO_MEMORY_SANITY_CHECKS
- H5MM_memcpy(((uint8_t *)entry_ptr->image_ptr) + entry_ptr->size, H5C_IMAGE_SANITY_VALUE,
- H5C_IMAGE_EXTRA_SPACE);
-#endif /* H5C_DO_MEMORY_SANITY_CHECKS */
- } /* end if */
+ H5MM_memcpy(((uint8_t *)entry_ptr->image_ptr) + entry_ptr->size, H5C_IMAGE_SANITY_VALUE,
+ H5C_IMAGE_EXTRA_SPACE);
+#endif /* H5C_DO_MEMORY_SANITY_CHECKS */
+ } /* end if */
- if (!(entry_ptr->image_up_to_date)) {
- /* Sanity check */
- HDassert(!entry_ptr->prefetched);
+ if (!(entry_ptr->image_up_to_date)) {
+ /* Sanity check */
+ HDassert(!entry_ptr->prefetched);
- /* Generate the entry's image */
- if (H5C__generate_image(f, cache_ptr, entry_ptr) < 0)
- HGOTO_ERROR(H5E_CACHE, H5E_CANTGET, FAIL, "can't generate entry's image")
- } /* end if ( ! (entry_ptr->image_up_to_date) ) */
- } /* end if */
+ /* Generate the entry's image */
+ if (H5C__generate_image(f, cache_ptr, entry_ptr) < 0)
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTGET, FAIL, "can't generate entry's image")
+ } /* end if ( ! (entry_ptr->image_up_to_date) ) */
+ } /* end if */
- /* Finally, write the image to disk.
- *
- * Note that if the H5AC__CLASS_SKIP_WRITES flag is set in the
- * in the entry's type, we silently skip the write. This
- * flag should only be used in test code.
- */
- if (write_entry) {
- HDassert(entry_ptr->is_dirty);
+ /* Finally, write the image to disk.
+ *
+ * Note that if the H5AC__CLASS_SKIP_WRITES flag is set in the
+ * in the entry's type, we silently skip the write. This
+ * flag should only be used in test code.
+ */
+ if (write_entry) {
+ HDassert(entry_ptr->is_dirty);
#if H5C_DO_SANITY_CHECKS
- if (cache_ptr->check_write_permitted && !(cache_ptr->write_permitted))
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Write when writes are always forbidden!?!?!")
+ if (cache_ptr->check_write_permitted && !(cache_ptr->write_permitted))
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Write when writes are always forbidden!?!?!")
#endif /* H5C_DO_SANITY_CHECKS */
- /* Write the image to disk unless the write is suppressed.
- *
- * This happens if both suppress_image_entry_writes and
- * entry_ptr->include_in_image are TRUE, or if the
- * H5AC__CLASS_SKIP_WRITES is set in the entry's type. This
- * flag should only be used in test code
- */
- if ((!suppress_image_entry_writes || !entry_ptr->include_in_image) &&
- (((entry_ptr->type->flags) & H5C__CLASS_SKIP_WRITES) == 0)) {
- H5FD_mem_t mem_type = H5FD_MEM_DEFAULT;
+ /* Write the image to disk unless the write is suppressed.
+ *
+ * This happens if both suppress_image_entry_writes and
+ * entry_ptr->include_in_image are TRUE, or if the
+ * H5AC__CLASS_SKIP_WRITES is set in the entry's type. This
+ * flag should only be used in test code
+ */
+ if ((!suppress_image_entry_writes || !entry_ptr->include_in_image) &&
+ (((entry_ptr->type->flags) & H5C__CLASS_SKIP_WRITES) == 0)) {
+ H5FD_mem_t mem_type = H5FD_MEM_DEFAULT;
#ifdef H5_HAVE_PARALLEL
- if (cache_ptr->coll_write_list) {
- if (H5SL_insert(cache_ptr->coll_write_list, entry_ptr, &entry_ptr->addr) < 0)
- HGOTO_ERROR(H5E_CACHE, H5E_CANTINSERT, FAIL, "unable to insert skip list item")
- } /* end if */
- else {
+ if (cache_ptr->coll_write_list) {
+ if (H5SL_insert(cache_ptr->coll_write_list, entry_ptr, &entry_ptr->addr) < 0)
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTINSERT, FAIL, "unable to insert skip list item")
+ } /* end if */
+ else {
#endif /* H5_HAVE_PARALLEL */
- if (entry_ptr->prefetched) {
- HDassert(entry_ptr->type->id == H5AC_PREFETCHED_ENTRY_ID);
- mem_type = cache_ptr->class_table_ptr[entry_ptr->prefetch_type_id]->mem_type;
- } /* end if */
- else
- mem_type = entry_ptr->type->mem_type;
+ if (entry_ptr->prefetched) {
+ HDassert(entry_ptr->type->id == H5AC_PREFETCHED_ENTRY_ID);
+ mem_type = cache_ptr->class_table_ptr[entry_ptr->prefetch_type_id]->mem_type;
+ } /* end if */
+ else
+ mem_type = entry_ptr->type->mem_type;
- if (H5F_block_write(f, mem_type, entry_ptr->addr, entry_ptr->size, entry_ptr->image_ptr) <
- 0)
- HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "Can't write image to file")
+ if (H5F_block_write(f, mem_type, entry_ptr->addr, entry_ptr->size, entry_ptr->image_ptr) < 0)
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "Can't write image to file")
#ifdef H5_HAVE_PARALLEL
- }
-#endif /* H5_HAVE_PARALLEL */
- } /* end if */
-
- /* if the entry has a notify callback, notify it that we have
- * just flushed the entry.
- */
- if (entry_ptr->type->notify &&
- (entry_ptr->type->notify)(H5C_NOTIFY_ACTION_AFTER_FLUSH, entry_ptr) < 0)
- HGOTO_ERROR(H5E_CACHE, H5E_CANTNOTIFY, FAIL, "can't notify client of entry flush")
- } /* if ( write_entry ) */
+ }
+#endif /* H5_HAVE_PARALLEL */
+ } /* end if */
- /* At this point, all pre-serialize and serialize calls have been
- * made if it was appropriate to make them. Similarly, the entry
- * has been written to disk if desired.
- *
- * Thus it is now safe to update the cache data structures for the
- * flush.
+ /* if the entry has a notify callback, notify it that we have
+ * just flushed the entry.
*/
+ if (entry_ptr->type->notify &&
+ (entry_ptr->type->notify)(H5C_NOTIFY_ACTION_AFTER_FLUSH, entry_ptr) < 0)
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTNOTIFY, FAIL, "can't notify client of entry flush")
+ } /* if ( write_entry ) */
- /* start by updating the statistics */
- if (clear_only) {
- /* only log a clear if the entry was dirty */
- if (was_dirty) {
- H5C__UPDATE_STATS_FOR_CLEAR(cache_ptr, entry_ptr)
- } /* end if */
- }
- else if (write_entry) {
- HDassert(was_dirty);
+ /* At this point, all pre-serialize and serialize calls have been
+ * made if it was appropriate to make them. Similarly, the entry
+ * has been written to disk if desired.
+ *
+ * Thus it is now safe to update the cache data structures for the
+ * flush.
+ */
- /* only log a flush if we actually wrote to disk */
- H5C__UPDATE_STATS_FOR_FLUSH(cache_ptr, entry_ptr)
- } /* end else if */
+ /* start by updating the statistics */
+ if (clear_only) {
+ /* only log a clear if the entry was dirty */
+ if (was_dirty) {
+ H5C__UPDATE_STATS_FOR_CLEAR(cache_ptr, entry_ptr)
+ } /* end if */
+ }
+ else if (write_entry) {
+ HDassert(was_dirty);
- /* Note that the algorithm below is (very) similar to the set of operations
- * in H5C_remove_entry() and should be kept in sync with changes
- * to that code. - QAK, 2016/11/30
- */
+ /* only log a flush if we actually wrote to disk */
+ H5C__UPDATE_STATS_FOR_FLUSH(cache_ptr, entry_ptr)
+ } /* end else if */
- /* Update the cache internal data structures. */
- if (destroy) {
- /* Sanity checks */
- if (take_ownership)
- HDassert(!destroy_entry);
- else
- HDassert(destroy_entry);
- HDassert(!entry_ptr->is_pinned);
+ /* Note that the algorithm below is (very) similar to the set of operations
+ * in H5C_remove_entry() and should be kept in sync with changes
+ * to that code. - QAK, 2016/11/30
+ */
- /* Update stats, while entry is still in the cache */
- H5C__UPDATE_STATS_FOR_EVICTION(cache_ptr, entry_ptr, take_ownership)
+ /* Update the cache internal data structures. */
+ if (destroy) {
+ /* Sanity checks */
+ if (take_ownership)
+ HDassert(!destroy_entry);
+ else
+ HDassert(destroy_entry);
+ HDassert(!entry_ptr->is_pinned);
- /* If the entry's type has a 'notify' callback and the entry is about
- * to be removed from the cache, send a 'before eviction' notice while
- * the entry is still fully integrated in the cache.
- */
- if (entry_ptr->type->notify &&
- (entry_ptr->type->notify)(H5C_NOTIFY_ACTION_BEFORE_EVICT, entry_ptr) < 0)
- HGOTO_ERROR(H5E_CACHE, H5E_CANTNOTIFY, FAIL, "can't notify client about entry to evict")
+ /* Update stats, while entry is still in the cache */
+ H5C__UPDATE_STATS_FOR_EVICTION(cache_ptr, entry_ptr, take_ownership)
- /* Update the cache internal data structures as appropriate
- * for a destroy. Specifically:
- *
- * 1) Delete it from the index
- *
- * 2) Delete it from the skip list if requested.
- *
- * 3) Delete it from the collective read access list.
- *
- * 4) Update the replacement policy for eviction
- *
- * 5) Remove it from the tag list for this object
- *
- * Finally, if the destroy_entry flag is set, discard the
- * entry.
- */
- H5C__DELETE_FROM_INDEX(cache_ptr, entry_ptr, FAIL)
+ /* If the entry's type has a 'notify' callback and the entry is about
+ * to be removed from the cache, send a 'before eviction' notice while
+ * the entry is still fully integrated in the cache.
+ */
+ if (entry_ptr->type->notify &&
+ (entry_ptr->type->notify)(H5C_NOTIFY_ACTION_BEFORE_EVICT, entry_ptr) < 0)
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTNOTIFY, FAIL, "can't notify client about entry to evict")
+
+ /* Update the cache internal data structures as appropriate
+ * for a destroy. Specifically:
+ *
+ * 1) Delete it from the index
+ *
+ * 2) Delete it from the skip list if requested.
+ *
+ * 3) Delete it from the collective read access list.
+ *
+ * 4) Update the replacement policy for eviction
+ *
+ * 5) Remove it from the tag list for this object
+ *
+ * Finally, if the destroy_entry flag is set, discard the
+ * entry.
+ */
+ H5C__DELETE_FROM_INDEX(cache_ptr, entry_ptr, FAIL)
- if (entry_ptr->in_slist && del_from_slist_on_destroy)
- H5C__REMOVE_ENTRY_FROM_SLIST(cache_ptr, entry_ptr, during_flush)
+ if (entry_ptr->in_slist && del_from_slist_on_destroy)
+ H5C__REMOVE_ENTRY_FROM_SLIST(cache_ptr, entry_ptr, during_flush)
#ifdef H5_HAVE_PARALLEL
- /* Check for collective read access flag */
- if (entry_ptr->coll_access) {
- entry_ptr->coll_access = FALSE;
- H5C__REMOVE_FROM_COLL_LIST(cache_ptr, entry_ptr, FAIL)
- } /* end if */
-#endif /* H5_HAVE_PARALLEL */
+ /* Check for collective read access flag */
+ if (entry_ptr->coll_access) {
+ entry_ptr->coll_access = FALSE;
+ H5C__REMOVE_FROM_COLL_LIST(cache_ptr, entry_ptr, FAIL)
+ } /* end if */
+#endif /* H5_HAVE_PARALLEL */
- H5C__UPDATE_RP_FOR_EVICTION(cache_ptr, entry_ptr, FAIL)
+ H5C__UPDATE_RP_FOR_EVICTION(cache_ptr, entry_ptr, FAIL)
- /* Remove entry from tag list */
- if (H5C__untag_entry(cache_ptr, entry_ptr) < 0)
- HGOTO_ERROR(H5E_CACHE, H5E_CANTREMOVE, FAIL, "can't remove entry from tag list")
+ /* Remove entry from tag list */
+ if (H5C__untag_entry(cache_ptr, entry_ptr) < 0)
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTREMOVE, FAIL, "can't remove entry from tag list")
- /* verify that the entry is no longer part of any flush dependencies */
- HDassert(entry_ptr->flush_dep_nparents == 0);
- HDassert(entry_ptr->flush_dep_nchildren == 0);
- } /* end if */
- else {
- HDassert(clear_only || write_entry);
- HDassert(entry_ptr->is_dirty);
- HDassert(entry_ptr->in_slist);
+ /* verify that the entry is no longer part of any flush dependencies */
+ HDassert(entry_ptr->flush_dep_nparents == 0);
+ HDassert(entry_ptr->flush_dep_nchildren == 0);
+ } /* end if */
+ else {
+ HDassert(clear_only || write_entry);
+ HDassert(entry_ptr->is_dirty);
+ HDassert(entry_ptr->in_slist);
- /* We are either doing a flush or a clear.
- *
- * A clear and a flush are the same from the point of
- * view of the replacement policy and the slist.
- * Hence no differentiation between them.
- *
- * JRM -- 7/7/07
- */
+ /* We are either doing a flush or a clear.
+ *
+ * A clear and a flush are the same from the point of
+ * view of the replacement policy and the slist.
+ * Hence no differentiation between them.
+ *
+ * JRM -- 7/7/07
+ */
- H5C__UPDATE_RP_FOR_FLUSH(cache_ptr, entry_ptr, FAIL)
+ H5C__UPDATE_RP_FOR_FLUSH(cache_ptr, entry_ptr, FAIL)
- H5C__REMOVE_ENTRY_FROM_SLIST(cache_ptr, entry_ptr, during_flush)
+ H5C__REMOVE_ENTRY_FROM_SLIST(cache_ptr, entry_ptr, during_flush)
- /* mark the entry as clean and update the index for
- * entry clean. Also, call the clear callback
- * if defined.
- */
- entry_ptr->is_dirty = FALSE;
+ /* mark the entry as clean and update the index for
+ * entry clean. Also, call the clear callback
+ * if defined.
+ */
+ entry_ptr->is_dirty = FALSE;
- H5C__UPDATE_INDEX_FOR_ENTRY_CLEAN(cache_ptr, entry_ptr);
+ H5C__UPDATE_INDEX_FOR_ENTRY_CLEAN(cache_ptr, entry_ptr);
- /* Check for entry changing status and do notifications, etc. */
- if (was_dirty) {
- /* If the entry's type has a 'notify' callback send a 'entry cleaned'
- * notice now that the entry is fully integrated into the cache.
- */
- if (entry_ptr->type->notify &&
- (entry_ptr->type->notify)(H5C_NOTIFY_ACTION_ENTRY_CLEANED, entry_ptr) < 0)
- HGOTO_ERROR(H5E_CACHE, H5E_CANTNOTIFY, FAIL,
- "can't notify client about entry dirty flag cleared")
+ /* Check for entry changing status and do notifications, etc. */
+ if (was_dirty) {
+ /* If the entry's type has a 'notify' callback send a 'entry cleaned'
+ * notice now that the entry is fully integrated into the cache.
+ */
+ if (entry_ptr->type->notify &&
+ (entry_ptr->type->notify)(H5C_NOTIFY_ACTION_ENTRY_CLEANED, entry_ptr) < 0)
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTNOTIFY, FAIL,
+ "can't notify client about entry dirty flag cleared")
- /* Propagate the clean flag up the flush dependency chain if appropriate */
- if (entry_ptr->flush_dep_ndirty_children != 0)
- HDassert(entry_ptr->flush_dep_ndirty_children == 0);
- if (entry_ptr->flush_dep_nparents > 0)
- if (H5C__mark_flush_dep_clean(entry_ptr) < 0)
- HGOTO_ERROR(H5E_CACHE, H5E_CANTMARKCLEAN, FAIL,
- "Can't propagate flush dep clean flag")
- } /* end if */
- } /* end else */
+ /* Propagate the clean flag up the flush dependency chain if appropriate */
+ if (entry_ptr->flush_dep_ndirty_children != 0)
+ HDassert(entry_ptr->flush_dep_ndirty_children == 0);
+ if (entry_ptr->flush_dep_nparents > 0)
+ if (H5C__mark_flush_dep_clean(entry_ptr) < 0)
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTMARKCLEAN, FAIL, "Can't propagate flush dep clean flag")
+ } /* end if */
+ } /* end else */
- /* reset the flush_in progress flag */
- entry_ptr->flush_in_progress = FALSE;
+ /* reset the flush_in progress flag */
+ entry_ptr->flush_in_progress = FALSE;
- /* capture the cache entry address for the log_flush call at the
- end before the entry_ptr gets freed */
- entry_addr = entry_ptr->addr;
+ /* capture the cache entry address for the log_flush call at the
+ end before the entry_ptr gets freed */
+ entry_addr = entry_ptr->addr;
- /* Internal cache data structures should now be up to date, and
- * consistent with the status of the entry.
+ /* Internal cache data structures should now be up to date, and
+ * consistent with the status of the entry.
+ *
+ * Now discard the entry if appropriate.
+ */
+ if (destroy) {
+ /* Sanity check */
+ HDassert(0 == entry_ptr->flush_dep_nparents);
+
+ /* if both suppress_image_entry_frees and entry_ptr->include_in_image
+ * are true, simply set entry_ptr->image_ptr to NULL, as we have
+ * another pointer to the buffer in an instance of H5C_image_entry_t
+ * in cache_ptr->image_entries.
*
- * Now discard the entry if appropriate.
+ * Otherwise, free the buffer if it exists.
*/
- if (destroy) {
- /* Sanity check */
- HDassert(0 == entry_ptr->flush_dep_nparents);
-
- /* if both suppress_image_entry_frees and entry_ptr->include_in_image
- * are true, simply set entry_ptr->image_ptr to NULL, as we have
- * another pointer to the buffer in an instance of H5C_image_entry_t
- * in cache_ptr->image_entries.
- *
- * Otherwise, free the buffer if it exists.
- */
- if (suppress_image_entry_frees && entry_ptr->include_in_image)
- entry_ptr->image_ptr = NULL;
- else if (entry_ptr->image_ptr != NULL)
- entry_ptr->image_ptr = H5MM_xfree(entry_ptr->image_ptr);
+ if (suppress_image_entry_frees && entry_ptr->include_in_image)
+ entry_ptr->image_ptr = NULL;
+ else if (entry_ptr->image_ptr != NULL)
+ entry_ptr->image_ptr = H5MM_xfree(entry_ptr->image_ptr);
- /* If the entry is not a prefetched entry, verify that the flush
- * dependency parents addresses array has been transferred.
- *
- * If the entry is prefetched, the free_isr routine will dispose of
- * the flush dependency parents addresses array if necessary.
- */
- if (!entry_ptr->prefetched) {
- HDassert(0 == entry_ptr->fd_parent_count);
- HDassert(NULL == entry_ptr->fd_parent_addrs);
- } /* end if */
+ /* If the entry is not a prefetched entry, verify that the flush
+ * dependency parents addresses array has been transferred.
+ *
+ * If the entry is prefetched, the free_isr routine will dispose of
+ * the flush dependency parents addresses array if necessary.
+ */
+ if (!entry_ptr->prefetched) {
+ HDassert(0 == entry_ptr->fd_parent_count);
+ HDassert(NULL == entry_ptr->fd_parent_addrs);
+ } /* end if */
- /* Check whether we should free the space in the file that
- * the entry occupies
- */
- if (free_file_space) {
- hsize_t fsf_size;
+ /* Check whether we should free the space in the file that
+ * the entry occupies
+ */
+ if (free_file_space) {
+ hsize_t fsf_size;
- /* Sanity checks */
- HDassert(H5F_addr_defined(entry_ptr->addr));
- HDassert(!H5F_IS_TMP_ADDR(f, entry_ptr->addr));
+ /* Sanity checks */
+ HDassert(H5F_addr_defined(entry_ptr->addr));
+ HDassert(!H5F_IS_TMP_ADDR(f, entry_ptr->addr));
#ifndef NDEBUG
- {
- size_t curr_len;
+ {
+ size_t curr_len;
- /* Get the actual image size for the thing again */
- entry_ptr->type->image_len((void *)entry_ptr, &curr_len);
- HDassert(curr_len == entry_ptr->size);
- }
+ /* Get the actual image size for the thing again */
+ entry_ptr->type->image_len((void *)entry_ptr, &curr_len);
+ HDassert(curr_len == entry_ptr->size);
+ }
#endif /* NDEBUG */
- /* If the file space free size callback is defined, use
- * it to get the size of the block of file space to free.
- * Otherwise use entry_ptr->size.
- */
- if (entry_ptr->type->fsf_size) {
- if ((entry_ptr->type->fsf_size)((void *)entry_ptr, &fsf_size) < 0)
- HGOTO_ERROR(H5E_CACHE, H5E_CANTFREE, FAIL, "unable to get file space free size")
- } /* end if */
- else /* no file space free size callback -- use entry size */
- fsf_size = entry_ptr->size;
-
- /* Release the space on disk */
- if (H5MF_xfree(f, entry_ptr->type->mem_type, entry_ptr->addr, fsf_size) < 0)
- HGOTO_ERROR(H5E_CACHE, H5E_CANTFREE, FAIL, "unable to free file space for cache entry")
- } /* end if ( free_file_space ) */
-
- /* Reset the pointer to the cache the entry is within. -QAK */
- entry_ptr->cache_ptr = NULL;
-
- /* increment entries_removed_counter and set
- * last_entry_removed_ptr. As we are likely abuut to
- * free the entry, recall that last_entry_removed_ptr
- * must NEVER be dereferenced.
- *
- * Recall that these fields are maintained to allow functions
- * that perform scans of lists of entries to detect the
- * unexpected removal of entries (via expunge, eviction,
- * or take ownership at present), so that they can re-start
- * their scans if necessary.
- *
- * Also check if the entry we are watching for removal is being
- * removed (usually the 'next' entry for an iteration) and reset
- * it to indicate that it was removed.
+ /* If the file space free size callback is defined, use
+ * it to get the size of the block of file space to free.
+ * Otherwise use entry_ptr->size.
*/
- cache_ptr->entries_removed_counter++;
- cache_ptr->last_entry_removed_ptr = entry_ptr;
- if (entry_ptr == cache_ptr->entry_watched_for_removal)
- cache_ptr->entry_watched_for_removal = NULL;
-
- /* Check for actually destroying the entry in memory */
- /* (As opposed to taking ownership of it) */
- if (destroy_entry) {
- if (entry_ptr->is_dirty) {
- /* Reset dirty flag */
- entry_ptr->is_dirty = FALSE;
-
- /* If the entry's type has a 'notify' callback send a 'entry cleaned'
- * notice now that the entry is fully integrated into the cache.
- */
- if (entry_ptr->type->notify &&
- (entry_ptr->type->notify)(H5C_NOTIFY_ACTION_ENTRY_CLEANED, entry_ptr) < 0)
- HGOTO_ERROR(H5E_CACHE, H5E_CANTNOTIFY, FAIL,
- "can't notify client about entry dirty flag cleared")
- } /* end if */
+ if (entry_ptr->type->fsf_size) {
+ if ((entry_ptr->type->fsf_size)((void *)entry_ptr, &fsf_size) < 0)
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTFREE, FAIL, "unable to get file space free size")
+ } /* end if */
+ else /* no file space free size callback -- use entry size */
+ fsf_size = entry_ptr->size;
+
+ /* Release the space on disk */
+ if (H5MF_xfree(f, entry_ptr->type->mem_type, entry_ptr->addr, fsf_size) < 0)
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTFREE, FAIL, "unable to free file space for cache entry")
+ } /* end if ( free_file_space ) */
+
+ /* Reset the pointer to the cache the entry is within. -QAK */
+ entry_ptr->cache_ptr = NULL;
+
+ /* increment entries_removed_counter and set
+ * last_entry_removed_ptr. As we are likely abuut to
+ * free the entry, recall that last_entry_removed_ptr
+ * must NEVER be dereferenced.
+ *
+ * Recall that these fields are maintained to allow functions
+ * that perform scans of lists of entries to detect the
+ * unexpected removal of entries (via expunge, eviction,
+ * or take ownership at present), so that they can re-start
+ * their scans if necessary.
+ *
+ * Also check if the entry we are watching for removal is being
+ * removed (usually the 'next' entry for an iteration) and reset
+ * it to indicate that it was removed.
+ */
+ cache_ptr->entries_removed_counter++;
+ cache_ptr->last_entry_removed_ptr = entry_ptr;
+ if (entry_ptr == cache_ptr->entry_watched_for_removal)
+ cache_ptr->entry_watched_for_removal = NULL;
+
+ /* Check for actually destroying the entry in memory */
+ /* (As opposed to taking ownership of it) */
+ if (destroy_entry) {
+ if (entry_ptr->is_dirty) {
+ /* Reset dirty flag */
+ entry_ptr->is_dirty = FALSE;
- /* we are about to discard the in core representation --
- * set the magic field to bad magic so we can detect a
- * freed entry if we see one.
+ /* If the entry's type has a 'notify' callback send a 'entry cleaned'
+ * notice now that the entry is fully integrated into the cache.
*/
- entry_ptr->magic = H5C__H5C_CACHE_ENTRY_T_BAD_MAGIC;
-
- /* verify that the image has been freed */
- HDassert(entry_ptr->image_ptr == NULL);
-
- if (entry_ptr->type->free_icr((void *)entry_ptr) < 0)
- HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "free_icr callback failed")
+ if (entry_ptr->type->notify &&
+ (entry_ptr->type->notify)(H5C_NOTIFY_ACTION_ENTRY_CLEANED, entry_ptr) < 0)
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTNOTIFY, FAIL,
+ "can't notify client about entry dirty flag cleared")
} /* end if */
- else {
- HDassert(take_ownership);
- /* client is taking ownership of the entry.
- * set bad magic here too so the cache will choke
- * unless the entry is re-inserted properly
- */
- entry_ptr->magic = H5C__H5C_CACHE_ENTRY_T_BAD_MAGIC;
- } /* end else */
- } /* if (destroy) */
+ /* we are about to discard the in core representation --
+ * set the magic field to bad magic so we can detect a
+ * freed entry if we see one.
+ */
+ entry_ptr->magic = H5C__H5C_CACHE_ENTRY_T_BAD_MAGIC;
- /* Check if we have to update the page buffer with cleared entries
- * so it doesn't go out of date
- */
- if (update_page_buffer) {
- /* Sanity check */
- HDassert(!destroy);
- HDassert(entry_ptr->image_ptr);
+ /* verify that the image has been freed */
+ HDassert(entry_ptr->image_ptr == NULL);
- if (f->shared->page_buf && f->shared->page_buf->page_size >= entry_ptr->size)
- if (H5PB_update_entry(f->shared->page_buf, entry_ptr->addr, entry_ptr->size,
- entry_ptr->image_ptr) > 0)
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Failed to update PB with metadata cache")
+ if (entry_ptr->type->free_icr((void *)entry_ptr) < 0)
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "free_icr callback failed")
} /* end if */
+ else {
+ HDassert(take_ownership);
+
+ /* client is taking ownership of the entry.
+ * set bad magic here too so the cache will choke
+ * unless the entry is re-inserted properly
+ */
+ entry_ptr->magic = H5C__H5C_CACHE_ENTRY_T_BAD_MAGIC;
+ } /* end else */
+ } /* if (destroy) */
- if (cache_ptr->log_flush)
- if ((cache_ptr->log_flush)(cache_ptr, entry_addr, was_dirty, flags) < 0)
- HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "log_flush callback failed")
+ /* Check if we have to update the page buffer with cleared entries
+ * so it doesn't go out of date
+ */
+ if (update_page_buffer) {
+ /* Sanity check */
+ HDassert(!destroy);
+ HDassert(entry_ptr->image_ptr);
+
+ if (f->shared->page_buf && f->shared->page_buf->page_size >= entry_ptr->size)
+ if (H5PB_update_entry(f->shared->page_buf, entry_ptr->addr, entry_ptr->size,
+ entry_ptr->image_ptr) > 0)
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Failed to update PB with metadata cache")
+ } /* end if */
+
+ if (cache_ptr->log_flush)
+ if ((cache_ptr->log_flush)(cache_ptr, entry_addr, was_dirty, flags) < 0)
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "log_flush callback failed")
done:
- HDassert((ret_value != SUCCEED) || (destroy_entry) || (!entry_ptr->flush_in_progress));
- HDassert((ret_value != SUCCEED) || (destroy_entry) || (take_ownership) || (!entry_ptr->is_dirty));
+ HDassert((ret_value != SUCCEED) || (destroy_entry) || (!entry_ptr->flush_in_progress));
+ HDassert((ret_value != SUCCEED) || (destroy_entry) || (take_ownership) || (!entry_ptr->is_dirty));
- FUNC_LEAVE_NOAPI(ret_value)
- } /* H5C__flush_single_entry() */
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* H5C__flush_single_entry() */
- /*-------------------------------------------------------------------------
- *
- * Function: H5C__verify_len_eoa
- *
- * Purpose: Verify that 'len' does not exceed eoa when 'actual' is
- * false i.e. 'len" is the initial speculative length from
- * get_load_size callback with null image pointer.
- * If exceed, adjust 'len' accordingly.
- *
- * Verify that 'len' should not exceed eoa when 'actual' is
- * true i.e. 'len' is the actual length from get_load_size
- * callback with non-null image pointer.
- * If exceed, return error.
- *
- * Return: FAIL if error is detected, SUCCEED otherwise.
- *
- * Programmer: Vailin Choi
- * 9/6/15
- *
- *-------------------------------------------------------------------------
- */
- static herr_t H5C__verify_len_eoa(H5F_t * f, const H5C_class_t *type, haddr_t addr, size_t *len,
- hbool_t actual)
- {
- H5FD_mem_t cooked_type; /* Modified type, accounting for switching global heaps */
- haddr_t eoa; /* End-of-allocation in the file */
- herr_t ret_value = SUCCEED; /* Return value */
+/*-------------------------------------------------------------------------
+ *
+ * Function: H5C__verify_len_eoa
+ *
+ * Purpose: Verify that 'len' does not exceed eoa when 'actual' is
+ * false i.e. 'len" is the initial speculative length from
+ * get_load_size callback with null image pointer.
+ * If exceed, adjust 'len' accordingly.
+ *
+ * Verify that 'len' should not exceed eoa when 'actual' is
+ * true i.e. 'len' is the actual length from get_load_size
+ * callback with non-null image pointer.
+ * If exceed, return error.
+ *
+ * Return: FAIL if error is detected, SUCCEED otherwise.
+ *
+ * Programmer: Vailin Choi
+ * 9/6/15
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5C__verify_len_eoa(H5F_t *f, const H5C_class_t *type, haddr_t addr, size_t *len, hbool_t actual)
+{
+ H5FD_mem_t cooked_type; /* Modified type, accounting for switching global heaps */
+ haddr_t eoa; /* End-of-allocation in the file */
+ herr_t ret_value = SUCCEED; /* Return value */
- FUNC_ENTER_STATIC
+ FUNC_ENTER_STATIC
- /* if type == H5FD_MEM_GHEAP, H5F_block_read() forces
- * type to H5FD_MEM_DRAW via its call to H5F__accum_read().
- * Thus we do the same for purposes of computing the EOA
- * for sanity checks.
- */
- cooked_type = (type->mem_type == H5FD_MEM_GHEAP) ? H5FD_MEM_DRAW : type->mem_type;
+ /* if type == H5FD_MEM_GHEAP, H5F_block_read() forces
+ * type to H5FD_MEM_DRAW via its call to H5F__accum_read().
+ * Thus we do the same for purposes of computing the EOA
+ * for sanity checks.
+ */
+ cooked_type = (type->mem_type == H5FD_MEM_GHEAP) ? H5FD_MEM_DRAW : type->mem_type;
- /* Get the file's end-of-allocation value */
- eoa = H5F_get_eoa(f, cooked_type);
- if (!H5F_addr_defined(eoa))
- HGOTO_ERROR(H5E_CACHE, H5E_BADVALUE, FAIL, "invalid EOA address for file")
+ /* Get the file's end-of-allocation value */
+ eoa = H5F_get_eoa(f, cooked_type);
+ if (!H5F_addr_defined(eoa))
+ HGOTO_ERROR(H5E_CACHE, H5E_BADVALUE, FAIL, "invalid EOA address for file")
- /* Check for bad address in general */
- if (H5F_addr_gt(addr, eoa))
- HGOTO_ERROR(H5E_CACHE, H5E_BADVALUE, FAIL, "address of object past end of allocation")
+ /* Check for bad address in general */
+ if (H5F_addr_gt(addr, eoa))
+ HGOTO_ERROR(H5E_CACHE, H5E_BADVALUE, FAIL, "address of object past end of allocation")
- /* Check if the amount of data to read will be past the EOA */
- if (H5F_addr_gt((addr + *len), eoa)) {
- if (actual)
- HGOTO_ERROR(H5E_CACHE, H5E_BADVALUE, FAIL, "actual len exceeds EOA")
- else
- /* Trim down the length of the metadata */
- *len = (size_t)(eoa - addr);
- } /* end if */
+ /* Check if the amount of data to read will be past the EOA */
+ if (H5F_addr_gt((addr + *len), eoa)) {
+ if (actual)
+ HGOTO_ERROR(H5E_CACHE, H5E_BADVALUE, FAIL, "actual len exceeds EOA")
+ else
+ /* Trim down the length of the metadata */
+ *len = (size_t)(eoa - addr);
+ } /* end if */
- if (*len <= 0)
- HGOTO_ERROR(H5E_CACHE, H5E_BADVALUE, FAIL, "len not positive after adjustment for EOA")
+ if (*len <= 0)
+ HGOTO_ERROR(H5E_CACHE, H5E_BADVALUE, FAIL, "len not positive after adjustment for EOA")
done:
- FUNC_LEAVE_NOAPI(ret_value)
- } /* H5C__verify_len_eoa() */
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* H5C__verify_len_eoa() */
- /*-------------------------------------------------------------------------
- *
- * Function: H5C__load_entry
- *
- * Purpose: Attempt to load the entry at the specified disk address
- * and with the specified type into memory. If successful.
- * return the in memory address of the entry. Return NULL
- * on failure.
- *
- * Note that this function simply loads the entry into
- * core. It does not insert it into the cache.
- *
- * Return: Non-NULL on success / NULL on failure.
- *
- * Programmer: John Mainzer, 5/18/04
- *
- *-------------------------------------------------------------------------
- */
- static void *H5C__load_entry(H5F_t * f,
+/*-------------------------------------------------------------------------
+ *
+ * Function: H5C__load_entry
+ *
+ * Purpose: Attempt to load the entry at the specified disk address
+ * and with the specified type into memory. If successful.
+ * return the in memory address of the entry. Return NULL
+ * on failure.
+ *
+ * Note that this function simply loads the entry into
+ * core. It does not insert it into the cache.
+ *
+ * Return: Non-NULL on success / NULL on failure.
+ *
+ * Programmer: John Mainzer, 5/18/04
+ *
+ *-------------------------------------------------------------------------
+ */
+static void *
+H5C__load_entry(H5F_t *f,
#ifdef H5_HAVE_PARALLEL
- hbool_t coll_access,
+ hbool_t coll_access,
#endif /* H5_HAVE_PARALLEL */
- const H5C_class_t *type, haddr_t addr, void *udata)
- {
- hbool_t dirty = FALSE; /* Flag indicating whether thing was dirtied during deserialize */
- uint8_t * image = NULL; /* Buffer for disk image */
- void * thing = NULL; /* Pointer to thing loaded */
- H5C_cache_entry_t *entry = NULL; /* Alias for thing loaded, as cache entry */
- size_t len; /* Size of image in file */
+ const H5C_class_t *type, haddr_t addr, void *udata)
+{
+ hbool_t dirty = FALSE; /* Flag indicating whether thing was dirtied during deserialize */
+ uint8_t * image = NULL; /* Buffer for disk image */
+ void * thing = NULL; /* Pointer to thing loaded */
+ H5C_cache_entry_t *entry = NULL; /* Alias for thing loaded, as cache entry */
+ size_t len; /* Size of image in file */
#ifdef H5_HAVE_PARALLEL
- int mpi_rank = 0; /* MPI process rank */
- MPI_Comm comm = MPI_COMM_NULL; /* File MPI Communicator */
- int mpi_code; /* MPI error code */
-#endif /* H5_HAVE_PARALLEL */
- void *ret_value = NULL; /* Return value */
+ int mpi_rank = 0; /* MPI process rank */
+ MPI_Comm comm = MPI_COMM_NULL; /* File MPI Communicator */
+ int mpi_code; /* MPI error code */
+#endif /* H5_HAVE_PARALLEL */
+ void *ret_value = NULL; /* Return value */
- FUNC_ENTER_STATIC
+ FUNC_ENTER_STATIC
- /* Sanity checks */
- HDassert(f);
- HDassert(f->shared);
- HDassert(f->shared->cache);
- HDassert(type);
- HDassert(H5F_addr_defined(addr));
- HDassert(type->get_initial_load_size);
- if (type->flags & H5C__CLASS_SPECULATIVE_LOAD_FLAG)
- HDassert(type->get_final_load_size);
- else
- HDassert(NULL == type->get_final_load_size);
- HDassert(type->deserialize);
+ /* Sanity checks */
+ HDassert(f);
+ HDassert(f->shared);
+ HDassert(f->shared->cache);
+ HDassert(type);
+ HDassert(H5F_addr_defined(addr));
+ HDassert(type->get_initial_load_size);
+ if (type->flags & H5C__CLASS_SPECULATIVE_LOAD_FLAG)
+ HDassert(type->get_final_load_size);
+ else
+ HDassert(NULL == type->get_final_load_size);
+ HDassert(type->deserialize);
- /* Can't see how skip reads could be usefully combined with
- * the speculative read flag. Hence disallow.
- */
- HDassert(
- !((type->flags & H5C__CLASS_SKIP_READS) && (type->flags & H5C__CLASS_SPECULATIVE_LOAD_FLAG)));
-
- /* Call the get_initial_load_size callback, to retrieve the initial size of image */
- if (type->get_initial_load_size(udata, &len) < 0)
- HGOTO_ERROR(H5E_CACHE, H5E_CANTGET, NULL, "can't retrieve image size")
- HDassert(len > 0);
-
- /* Check for possible speculative read off the end of the file */
- if (type->flags & H5C__CLASS_SPECULATIVE_LOAD_FLAG)
- if (H5C__verify_len_eoa(f, type, addr, &len, FALSE) < 0)
- HGOTO_ERROR(H5E_CACHE, H5E_BADVALUE, NULL, "invalid len with respect to EOA")
-
- /* Allocate the buffer for reading the on-disk entry image */
- if (NULL == (image = (uint8_t *)H5MM_malloc(len + H5C_IMAGE_EXTRA_SPACE)))
- HGOTO_ERROR(H5E_CACHE, H5E_CANTALLOC, NULL, "memory allocation failed for on disk image buffer")
+ /* Can't see how skip reads could be usefully combined with
+ * the speculative read flag. Hence disallow.
+ */
+ HDassert(!((type->flags & H5C__CLASS_SKIP_READS) && (type->flags & H5C__CLASS_SPECULATIVE_LOAD_FLAG)));
+
+ /* Call the get_initial_load_size callback, to retrieve the initial size of image */
+ if (type->get_initial_load_size(udata, &len) < 0)
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTGET, NULL, "can't retrieve image size")
+ HDassert(len > 0);
+
+ /* Check for possible speculative read off the end of the file */
+ if (type->flags & H5C__CLASS_SPECULATIVE_LOAD_FLAG)
+ if (H5C__verify_len_eoa(f, type, addr, &len, FALSE) < 0)
+ HGOTO_ERROR(H5E_CACHE, H5E_BADVALUE, NULL, "invalid len with respect to EOA")
+
+ /* Allocate the buffer for reading the on-disk entry image */
+ if (NULL == (image = (uint8_t *)H5MM_malloc(len + H5C_IMAGE_EXTRA_SPACE)))
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTALLOC, NULL, "memory allocation failed for on disk image buffer")
#if H5C_DO_MEMORY_SANITY_CHECKS
- H5MM_memcpy(image + len, H5C_IMAGE_SANITY_VALUE, H5C_IMAGE_EXTRA_SPACE);
+ H5MM_memcpy(image + len, H5C_IMAGE_SANITY_VALUE, H5C_IMAGE_EXTRA_SPACE);
#endif /* H5C_DO_MEMORY_SANITY_CHECKS */
#ifdef H5_HAVE_PARALLEL
- if (H5F_HAS_FEATURE(f, H5FD_FEAT_HAS_MPI)) {
- if ((mpi_rank = H5F_mpi_get_rank(f)) < 0)
- HGOTO_ERROR(H5E_FILE, H5E_CANTGET, NULL, "Can't get MPI rank")
- if ((comm = H5F_mpi_get_comm(f)) == MPI_COMM_NULL)
- HGOTO_ERROR(H5E_FILE, H5E_CANTGET, NULL, "get_comm request failed")
- } /* end if */
-#endif /* H5_HAVE_PARALLEL */
+ if (H5F_HAS_FEATURE(f, H5FD_FEAT_HAS_MPI)) {
+ if ((mpi_rank = H5F_mpi_get_rank(f)) < 0)
+ HGOTO_ERROR(H5E_FILE, H5E_CANTGET, NULL, "Can't get MPI rank")
+ if ((comm = H5F_mpi_get_comm(f)) == MPI_COMM_NULL)
+ HGOTO_ERROR(H5E_FILE, H5E_CANTGET, NULL, "get_comm request failed")
+ } /* end if */
+#endif /* H5_HAVE_PARALLEL */
- /* Get the on-disk entry image */
- if (0 == (type->flags & H5C__CLASS_SKIP_READS)) {
- unsigned tries, max_tries; /* The # of read attempts */
- unsigned retries; /* The # of retries */
- htri_t chk_ret; /* return from verify_chksum callback */
- size_t actual_len = len; /* The actual length, after speculative reads have been resolved */
- uint64_t nanosec = 1; /* # of nanoseconds to sleep between retries */
- void * new_image; /* Pointer to image */
- hbool_t len_changed = TRUE; /* Whether to re-check speculative entries */
-
- /* Get the # of read attempts */
- max_tries = tries = H5F_GET_READ_ATTEMPTS(f);
-
- /*
- * This do/while loop performs the following till the metadata checksum
- * is correct or the file's number of allowed read attempts are reached.
- * --read the metadata
- * --determine the actual size of the metadata
- * --perform checksum verification
- */
- do {
- if (actual_len != len) {
- if (NULL == (new_image = H5MM_realloc(image, len + H5C_IMAGE_EXTRA_SPACE)))
- HGOTO_ERROR(H5E_CACHE, H5E_CANTALLOC, NULL, "image null after H5MM_realloc()")
- image = (uint8_t *)new_image;
+ /* Get the on-disk entry image */
+ if (0 == (type->flags & H5C__CLASS_SKIP_READS)) {
+ unsigned tries, max_tries; /* The # of read attempts */
+ unsigned retries; /* The # of retries */
+ htri_t chk_ret; /* return from verify_chksum callback */
+ size_t actual_len = len; /* The actual length, after speculative reads have been resolved */
+ uint64_t nanosec = 1; /* # of nanoseconds to sleep between retries */
+ void * new_image; /* Pointer to image */
+ hbool_t len_changed = TRUE; /* Whether to re-check speculative entries */
+
+ /* Get the # of read attempts */
+ max_tries = tries = H5F_GET_READ_ATTEMPTS(f);
+
+ /*
+ * This do/while loop performs the following till the metadata checksum
+ * is correct or the file's number of allowed read attempts are reached.
+ * --read the metadata
+ * --determine the actual size of the metadata
+ * --perform checksum verification
+ */
+ do {
+ if (actual_len != len) {
+ if (NULL == (new_image = H5MM_realloc(image, len + H5C_IMAGE_EXTRA_SPACE)))
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTALLOC, NULL, "image null after H5MM_realloc()")
+ image = (uint8_t *)new_image;
#if H5C_DO_MEMORY_SANITY_CHECKS
- H5MM_memcpy(image + len, H5C_IMAGE_SANITY_VALUE, H5C_IMAGE_EXTRA_SPACE);
-#endif /* H5C_DO_MEMORY_SANITY_CHECKS */
- } /* end if */
+ H5MM_memcpy(image + len, H5C_IMAGE_SANITY_VALUE, H5C_IMAGE_EXTRA_SPACE);
+#endif /* H5C_DO_MEMORY_SANITY_CHECKS */
+ } /* end if */
#ifdef H5_HAVE_PARALLEL
- if (!coll_access || 0 == mpi_rank) {
+ if (!coll_access || 0 == mpi_rank) {
#endif /* H5_HAVE_PARALLEL */
- if (H5F_block_read(f, type->mem_type, addr, len, image) < 0)
- HGOTO_ERROR(H5E_CACHE, H5E_READERROR, NULL, "Can't read image*")
+ if (H5F_block_read(f, type->mem_type, addr, len, image) < 0)
+ HGOTO_ERROR(H5E_CACHE, H5E_READERROR, NULL, "Can't read image*")
#ifdef H5_HAVE_PARALLEL
- } /* end if */
- /* if the collective metadata read optimization is turned on,
- * bcast the metadata read from process 0 to all ranks in the file
- * communicator
- */
- if (coll_access) {
- int buf_size;
+ } /* end if */
+ /* if the collective metadata read optimization is turned on,
+ * bcast the metadata read from process 0 to all ranks in the file
+ * communicator
+ */
+ if (coll_access) {
+ int buf_size;
- H5_CHECKED_ASSIGN(buf_size, int, len, size_t);
- if (MPI_SUCCESS != (mpi_code = MPI_Bcast(image, buf_size, MPI_BYTE, 0, comm)))
- HMPI_GOTO_ERROR(NULL, "MPI_Bcast failed", mpi_code)
- } /* end if */
-#endif /* H5_HAVE_PARALLEL */
+ H5_CHECKED_ASSIGN(buf_size, int, len, size_t);
+ if (MPI_SUCCESS != (mpi_code = MPI_Bcast(image, buf_size, MPI_BYTE, 0, comm)))
+ HMPI_GOTO_ERROR(NULL, "MPI_Bcast failed", mpi_code)
+ } /* end if */
+#endif /* H5_HAVE_PARALLEL */
- /* If the entry could be read speculatively and the length is still
- * changing, check for updating the actual size
- */
- if ((type->flags & H5C__CLASS_SPECULATIVE_LOAD_FLAG) && len_changed) {
- /* Retrieve the actual length */
- actual_len = len;
- if (type->get_final_load_size(image, len, udata, &actual_len) < 0)
- continue; /* Transfer control to while() and count towards retries */
-
- /* Check for the length changing */
- if (actual_len != len) {
- /* Verify that the length isn't past the EOA for the file */
- if (H5C__verify_len_eoa(f, type, addr, &actual_len, TRUE) < 0)
- HGOTO_ERROR(H5E_CACHE, H5E_BADVALUE, NULL, "actual_len exceeds EOA")
-
- /* Expand buffer to new size */
- if (NULL == (new_image = H5MM_realloc(image, actual_len + H5C_IMAGE_EXTRA_SPACE)))
- HGOTO_ERROR(H5E_CACHE, H5E_CANTALLOC, NULL, "image null after H5MM_realloc()")
- image = (uint8_t *)new_image;
+ /* If the entry could be read speculatively and the length is still
+ * changing, check for updating the actual size
+ */
+ if ((type->flags & H5C__CLASS_SPECULATIVE_LOAD_FLAG) && len_changed) {
+ /* Retrieve the actual length */
+ actual_len = len;
+ if (type->get_final_load_size(image, len, udata, &actual_len) < 0)
+ continue; /* Transfer control to while() and count towards retries */
+
+ /* Check for the length changing */
+ if (actual_len != len) {
+ /* Verify that the length isn't past the EOA for the file */
+ if (H5C__verify_len_eoa(f, type, addr, &actual_len, TRUE) < 0)
+ HGOTO_ERROR(H5E_CACHE, H5E_BADVALUE, NULL, "actual_len exceeds EOA")
+
+ /* Expand buffer to new size */
+ if (NULL == (new_image = H5MM_realloc(image, actual_len + H5C_IMAGE_EXTRA_SPACE)))
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTALLOC, NULL, "image null after H5MM_realloc()")
+ image = (uint8_t *)new_image;
#if H5C_DO_MEMORY_SANITY_CHECKS
- H5MM_memcpy(image + actual_len, H5C_IMAGE_SANITY_VALUE, H5C_IMAGE_EXTRA_SPACE);
+ H5MM_memcpy(image + actual_len, H5C_IMAGE_SANITY_VALUE, H5C_IMAGE_EXTRA_SPACE);
#endif /* H5C_DO_MEMORY_SANITY_CHECKS */
- if (actual_len > len) {
+ if (actual_len > len) {
#ifdef H5_HAVE_PARALLEL
- if (!coll_access || 0 == mpi_rank) {
+ if (!coll_access || 0 == mpi_rank) {
#endif /* H5_HAVE_PARALLEL */
- /* If the thing's image needs to be bigger for a speculatively
- * loaded thing, go get the on-disk image again (the extra portion).
- */
- if (H5F_block_read(f, type->mem_type, addr + len, actual_len - len,
- image + len) < 0)
- HGOTO_ERROR(H5E_CACHE, H5E_CANTLOAD, NULL, "can't read image")
+ /* If the thing's image needs to be bigger for a speculatively
+ * loaded thing, go get the on-disk image again (the extra portion).
+ */
+ if (H5F_block_read(f, type->mem_type, addr + len, actual_len - len, image + len) <
+ 0)
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTLOAD, NULL, "can't read image")
#ifdef H5_HAVE_PARALLEL
- }
- /* If the collective metadata read optimization is turned on,
- * Bcast the metadata read from process 0 to all ranks in the file
- * communicator */
- if (coll_access) {
- int buf_size;
-
- H5_CHECKED_ASSIGN(buf_size, int, actual_len - len, size_t);
- if (MPI_SUCCESS !=
- (mpi_code = MPI_Bcast(image + len, buf_size, MPI_BYTE, 0, comm)))
- HMPI_GOTO_ERROR(NULL, "MPI_Bcast failed", mpi_code)
- } /* end if */
-#endif /* H5_HAVE_PARALLEL */
- } /* end if */
- } /* end if (actual_len != len) */
- else {
- /* The length has stabilized */
- len_changed = FALSE;
+ }
+ /* If the collective metadata read optimization is turned on,
+ * Bcast the metadata read from process 0 to all ranks in the file
+ * communicator */
+ if (coll_access) {
+ int buf_size;
+
+ H5_CHECKED_ASSIGN(buf_size, int, actual_len - len, size_t);
+ if (MPI_SUCCESS !=
+ (mpi_code = MPI_Bcast(image + len, buf_size, MPI_BYTE, 0, comm)))
+ HMPI_GOTO_ERROR(NULL, "MPI_Bcast failed", mpi_code)
+ } /* end if */
+#endif /* H5_HAVE_PARALLEL */
+ } /* end if */
+ } /* end if (actual_len != len) */
+ else {
+ /* The length has stabilized */
+ len_changed = FALSE;
- /* Set the final length */
- len = actual_len;
- } /* else */
- } /* end if */
+ /* Set the final length */
+ len = actual_len;
+ } /* else */
+ } /* end if */
- /* If there's no way to verify the checksum for a piece of metadata
- * (usually because there's no checksum in the file), leave now
- */
- if (type->verify_chksum == NULL)
- break;
+ /* If there's no way to verify the checksum for a piece of metadata
+ * (usually because there's no checksum in the file), leave now
+ */
+ if (type->verify_chksum == NULL)
+ break;
- /* Verify the checksum for the metadata image */
- if ((chk_ret = type->verify_chksum(image, actual_len, udata)) < 0)
- HGOTO_ERROR(H5E_CACHE, H5E_CANTGET, NULL, "failure from verify_chksum callback")
- if (chk_ret == TRUE)
- break;
+ /* Verify the checksum for the metadata image */
+ if ((chk_ret = type->verify_chksum(image, actual_len, udata)) < 0)
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTGET, NULL, "failure from verify_chksum callback")
+ if (chk_ret == TRUE)
+ break;
- /* Sleep for some time */
- H5_nanosleep(nanosec);
- nanosec *= 2; /* Double the sleep time next time */
- } while (--tries);
+ /* Sleep for some time */
+ H5_nanosleep(nanosec);
+ nanosec *= 2; /* Double the sleep time next time */
+ } while (--tries);
- /* Check for too many tries */
- if (tries == 0)
- HGOTO_ERROR(H5E_CACHE, H5E_READERROR, NULL,
- "incorrect metadatda checksum after all read attempts")
+ /* Check for too many tries */
+ if (tries == 0)
+ HGOTO_ERROR(H5E_CACHE, H5E_READERROR, NULL,
+ "incorrect metadatda checksum after all read attempts")
- /* Calculate and track the # of retries */
- retries = max_tries - tries;
- if (retries) /* Does not track 0 retry */
- if (H5F_track_metadata_read_retries(f, (unsigned)type->mem_type, retries) < 0)
- HGOTO_ERROR(H5E_CACHE, H5E_BADVALUE, NULL, "cannot track read tries = %u ", retries)
+ /* Calculate and track the # of retries */
+ retries = max_tries - tries;
+ if (retries) /* Does not track 0 retry */
+ if (H5F_track_metadata_read_retries(f, (unsigned)type->mem_type, retries) < 0)
+ HGOTO_ERROR(H5E_CACHE, H5E_BADVALUE, NULL, "cannot track read tries = %u ", retries)
- /* Set the final length (in case it wasn't set earlier) */
- len = actual_len;
- } /* end if !H5C__CLASS_SKIP_READS */
+ /* Set the final length (in case it wasn't set earlier) */
+ len = actual_len;
+ } /* end if !H5C__CLASS_SKIP_READS */
- /* Deserialize the on-disk image into the native memory form */
- if (NULL == (thing = type->deserialize(image, len, udata, &dirty)))
- HGOTO_ERROR(H5E_CACHE, H5E_CANTLOAD, NULL, "Can't deserialize image")
+ /* Deserialize the on-disk image into the native memory form */
+ if (NULL == (thing = type->deserialize(image, len, udata, &dirty)))
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTLOAD, NULL, "Can't deserialize image")
- entry = (H5C_cache_entry_t *)thing;
+ entry = (H5C_cache_entry_t *)thing;
- /* In general, an entry should be clean just after it is loaded.
- *
- * However, when this code is used in the metadata cache, it is
- * possible that object headers will be dirty at this point, as
- * the deserialize function will alter object headers if necessary to
- * fix an old bug.
- *
- * In the following assert:
- *
- * HDassert( ( dirty == FALSE ) || ( type->id == 5 || type->id == 6 ) );
- *
- * note that type ids 5 & 6 are associated with object headers in the
- * metadata cache.
- *
- * When we get to using H5C for other purposes, we may wish to
- * tighten up the assert so that the loophole only applies to the
- * metadata cache.
- */
+ /* In general, an entry should be clean just after it is loaded.
+ *
+ * However, when this code is used in the metadata cache, it is
+ * possible that object headers will be dirty at this point, as
+ * the deserialize function will alter object headers if necessary to
+ * fix an old bug.
+ *
+ * In the following assert:
+ *
+ * HDassert( ( dirty == FALSE ) || ( type->id == 5 || type->id == 6 ) );
+ *
+ * note that type ids 5 & 6 are associated with object headers in the
+ * metadata cache.
+ *
+ * When we get to using H5C for other purposes, we may wish to
+ * tighten up the assert so that the loophole only applies to the
+ * metadata cache.
+ */
- HDassert((dirty == FALSE) || (type->id == 5 || type->id == 6));
-
- entry->magic = H5C__H5C_CACHE_ENTRY_T_MAGIC;
- entry->cache_ptr = f->shared->cache;
- entry->addr = addr;
- entry->size = len;
- HDassert(entry->size < H5C_MAX_ENTRY_SIZE);
- entry->image_ptr = image;
- entry->image_up_to_date = !dirty;
- entry->type = type;
- entry->is_dirty = dirty;
- entry->dirtied = FALSE;
- entry->is_protected = FALSE;
- entry->is_read_only = FALSE;
- entry->ro_ref_count = 0;
- entry->is_pinned = FALSE;
- entry->in_slist = FALSE;
- entry->flush_marker = FALSE;
+ HDassert((dirty == FALSE) || (type->id == 5 || type->id == 6));
+
+ entry->magic = H5C__H5C_CACHE_ENTRY_T_MAGIC;
+ entry->cache_ptr = f->shared->cache;
+ entry->addr = addr;
+ entry->size = len;
+ HDassert(entry->size < H5C_MAX_ENTRY_SIZE);
+ entry->image_ptr = image;
+ entry->image_up_to_date = !dirty;
+ entry->type = type;
+ entry->is_dirty = dirty;
+ entry->dirtied = FALSE;
+ entry->is_protected = FALSE;
+ entry->is_read_only = FALSE;
+ entry->ro_ref_count = 0;
+ entry->is_pinned = FALSE;
+ entry->in_slist = FALSE;
+ entry->flush_marker = FALSE;
#ifdef H5_HAVE_PARALLEL
- entry->clear_on_unprotect = FALSE;
- entry->flush_immediately = FALSE;
- entry->coll_access = coll_access;
+ entry->clear_on_unprotect = FALSE;
+ entry->flush_immediately = FALSE;
+ entry->coll_access = coll_access;
#endif /* H5_HAVE_PARALLEL */
- entry->flush_in_progress = FALSE;
- entry->destroy_in_progress = FALSE;
-
- entry->ring = H5C_RING_UNDEFINED;
-
- /* Initialize flush dependency fields */
- entry->flush_dep_parent = NULL;
- entry->flush_dep_nparents = 0;
- entry->flush_dep_parent_nalloc = 0;
- entry->flush_dep_nchildren = 0;
- entry->flush_dep_ndirty_children = 0;
- entry->flush_dep_nunser_children = 0;
- entry->ht_next = NULL;
- entry->ht_prev = NULL;
- entry->il_next = NULL;
- entry->il_prev = NULL;
-
- entry->next = NULL;
- entry->prev = NULL;
+ entry->flush_in_progress = FALSE;
+ entry->destroy_in_progress = FALSE;
+
+ entry->ring = H5C_RING_UNDEFINED;
+
+ /* Initialize flush dependency fields */
+ entry->flush_dep_parent = NULL;
+ entry->flush_dep_nparents = 0;
+ entry->flush_dep_parent_nalloc = 0;
+ entry->flush_dep_nchildren = 0;
+ entry->flush_dep_ndirty_children = 0;
+ entry->flush_dep_nunser_children = 0;
+ entry->ht_next = NULL;
+ entry->ht_prev = NULL;
+ entry->il_next = NULL;
+ entry->il_prev = NULL;
+
+ entry->next = NULL;
+ entry->prev = NULL;
#if H5C_MAINTAIN_CLEAN_AND_DIRTY_LRU_LISTS
- entry->aux_next = NULL;
- entry->aux_prev = NULL;
+ entry->aux_next = NULL;
+ entry->aux_prev = NULL;
#endif /* H5C_MAINTAIN_CLEAN_AND_DIRTY_LRU_LISTS */
#ifdef H5_HAVE_PARALLEL
- entry->coll_next = NULL;
- entry->coll_prev = NULL;
+ entry->coll_next = NULL;
+ entry->coll_prev = NULL;
#endif /* H5_HAVE_PARALLEL */
- /* initialize cache image related fields */
- entry->include_in_image = FALSE;
- entry->lru_rank = 0;
- entry->image_dirty = FALSE;
- entry->fd_parent_count = 0;
- entry->fd_parent_addrs = NULL;
- entry->fd_child_count = 0;
- entry->fd_dirty_child_count = 0;
- entry->image_fd_height = 0;
- entry->prefetched = FALSE;
- entry->prefetch_type_id = 0;
- entry->age = 0;
- entry->prefetched_dirty = FALSE;
+ /* initialize cache image related fields */
+ entry->include_in_image = FALSE;
+ entry->lru_rank = 0;
+ entry->image_dirty = FALSE;
+ entry->fd_parent_count = 0;
+ entry->fd_parent_addrs = NULL;
+ entry->fd_child_count = 0;
+ entry->fd_dirty_child_count = 0;
+ entry->image_fd_height = 0;
+ entry->prefetched = FALSE;
+ entry->prefetch_type_id = 0;
+ entry->age = 0;
+ entry->prefetched_dirty = FALSE;
#ifndef NDEBUG /* debugging field */
- entry->serialization_count = 0;
+ entry->serialization_count = 0;
#endif /* NDEBUG */
- entry->tl_next = NULL;
- entry->tl_prev = NULL;
- entry->tag_info = NULL;
+ entry->tl_next = NULL;
+ entry->tl_prev = NULL;
+ entry->tag_info = NULL;
- H5C__RESET_CACHE_ENTRY_STATS(entry);
+ H5C__RESET_CACHE_ENTRY_STATS(entry);
- ret_value = thing;
+ ret_value = thing;
done:
- /* Cleanup on error */
- if (NULL == ret_value) {
- /* Release resources */
- if (thing && type->free_icr(thing) < 0)
- HDONE_ERROR(H5E_CACHE, H5E_CANTFLUSH, NULL, "free_icr callback failed")
- if (image)
- image = (uint8_t *)H5MM_xfree(image);
- } /* end if */
+ /* Cleanup on error */
+ if (NULL == ret_value) {
+ /* Release resources */
+ if (thing && type->free_icr(thing) < 0)
+ HDONE_ERROR(H5E_CACHE, H5E_CANTFLUSH, NULL, "free_icr callback failed")
+ if (image)
+ image = (uint8_t *)H5MM_xfree(image);
+ } /* end if */
- FUNC_LEAVE_NOAPI(ret_value)
- } /* H5C__load_entry() */
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* H5C__load_entry() */
- /*-------------------------------------------------------------------------
- *
- * Function: H5C__make_space_in_cache
- *
- * Purpose: Attempt to evict cache entries until the index_size
- * is at least needed_space below max_cache_size.
- *
- * In passing, also attempt to bring cLRU_list_size to a
- * value greater than min_clean_size.
- *
- * Depending on circumstances, both of these goals may
- * be impossible, as in parallel mode, we must avoid generating
- * a write as part of a read (to avoid deadlock in collective
- * I/O), and in all cases, it is possible (though hopefully
- * highly unlikely) that the protected list may exceed the
- * maximum size of the cache.
- *
- * Thus the function simply does its best, returning success
- * unless an error is encountered.
- *
- * Observe that this function cannot occasion a read.
- *
- * Return: Non-negative on success/Negative on failure.
- *
- * Programmer: John Mainzer, 5/14/04
- *
- *-------------------------------------------------------------------------
- */
- herr_t H5C__make_space_in_cache(H5F_t * f, size_t space_needed, hbool_t write_permitted)
- {
- H5C_t *cache_ptr = f->shared->cache;
+/*-------------------------------------------------------------------------
+ *
+ * Function: H5C__make_space_in_cache
+ *
+ * Purpose: Attempt to evict cache entries until the index_size
+ * is at least needed_space below max_cache_size.
+ *
+ * In passing, also attempt to bring cLRU_list_size to a
+ * value greater than min_clean_size.
+ *
+ * Depending on circumstances, both of these goals may
+ * be impossible, as in parallel mode, we must avoid generating
+ * a write as part of a read (to avoid deadlock in collective
+ * I/O), and in all cases, it is possible (though hopefully
+ * highly unlikely) that the protected list may exceed the
+ * maximum size of the cache.
+ *
+ * Thus the function simply does its best, returning success
+ * unless an error is encountered.
+ *
+ * Observe that this function cannot occasion a read.
+ *
+ * Return: Non-negative on success/Negative on failure.
+ *
+ * Programmer: John Mainzer, 5/14/04
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5C__make_space_in_cache(H5F_t *f, size_t space_needed, hbool_t write_permitted)
+{
+ H5C_t *cache_ptr = f->shared->cache;
#if H5C_COLLECT_CACHE_STATS
- int32_t clean_entries_skipped = 0;
- int32_t dirty_pf_entries_skipped = 0;
- int32_t total_entries_scanned = 0;
+ int32_t clean_entries_skipped = 0;
+ int32_t dirty_pf_entries_skipped = 0;
+ int32_t total_entries_scanned = 0;
#endif /* H5C_COLLECT_CACHE_STATS */
- uint32_t entries_examined = 0;
- uint32_t initial_list_len;
- size_t empty_space;
- hbool_t reentrant_call = FALSE;
- hbool_t prev_is_dirty = FALSE;
- hbool_t didnt_flush_entry = FALSE;
- hbool_t restart_scan;
- H5C_cache_entry_t *entry_ptr;
- H5C_cache_entry_t *prev_ptr;
- H5C_cache_entry_t *next_ptr;
- uint32_t num_corked_entries = 0;
- herr_t ret_value = SUCCEED; /* Return value */
+ uint32_t entries_examined = 0;
+ uint32_t initial_list_len;
+ size_t empty_space;
+ hbool_t reentrant_call = FALSE;
+ hbool_t prev_is_dirty = FALSE;
+ hbool_t didnt_flush_entry = FALSE;
+ hbool_t restart_scan;
+ H5C_cache_entry_t *entry_ptr;
+ H5C_cache_entry_t *prev_ptr;
+ H5C_cache_entry_t *next_ptr;
+ uint32_t num_corked_entries = 0;
+ herr_t ret_value = SUCCEED; /* Return value */
- FUNC_ENTER_PACKAGE
+ FUNC_ENTER_PACKAGE
- /* Sanity checks */
- HDassert(f);
- HDassert(cache_ptr);
- HDassert(cache_ptr->magic == H5C__H5C_T_MAGIC);
- HDassert(cache_ptr->index_size == (cache_ptr->clean_index_size + cache_ptr->dirty_index_size));
-
- /* check to see if cache_ptr->msic_in_progress is TRUE. If it, this
- * is a re-entrant call via a client callback called in the make
- * space in cache process. To avoid an infinite recursion, set
- * reentrant_call to TRUE, and goto done.
- */
- if (cache_ptr->msic_in_progress) {
- reentrant_call = TRUE;
- HGOTO_DONE(SUCCEED);
- } /* end if */
+ /* Sanity checks */
+ HDassert(f);
+ HDassert(cache_ptr);
+ HDassert(cache_ptr->magic == H5C__H5C_T_MAGIC);
+ HDassert(cache_ptr->index_size == (cache_ptr->clean_index_size + cache_ptr->dirty_index_size));
- cache_ptr->msic_in_progress = TRUE;
+ /* check to see if cache_ptr->msic_in_progress is TRUE. If it, this
+ * is a re-entrant call via a client callback called in the make
+ * space in cache process. To avoid an infinite recursion, set
+ * reentrant_call to TRUE, and goto done.
+ */
+ if (cache_ptr->msic_in_progress) {
+ reentrant_call = TRUE;
+ HGOTO_DONE(SUCCEED);
+ } /* end if */
- if (write_permitted) {
- restart_scan = FALSE;
- initial_list_len = cache_ptr->LRU_list_len;
- entry_ptr = cache_ptr->LRU_tail_ptr;
+ cache_ptr->msic_in_progress = TRUE;
- if (cache_ptr->index_size >= cache_ptr->max_cache_size)
- empty_space = 0;
- else
- empty_space = cache_ptr->max_cache_size - cache_ptr->index_size;
+ if (write_permitted) {
+ restart_scan = FALSE;
+ initial_list_len = cache_ptr->LRU_list_len;
+ entry_ptr = cache_ptr->LRU_tail_ptr;
- while ((((cache_ptr->index_size + space_needed) > cache_ptr->max_cache_size) ||
- ((empty_space + cache_ptr->clean_index_size) < (cache_ptr->min_clean_size))) &&
- (entries_examined <= (2 * initial_list_len)) && (entry_ptr != NULL)) {
- HDassert(entry_ptr->magic == H5C__H5C_CACHE_ENTRY_T_MAGIC);
- HDassert(!(entry_ptr->is_protected));
- HDassert(!(entry_ptr->is_read_only));
- HDassert((entry_ptr->ro_ref_count) == 0);
+ if (cache_ptr->index_size >= cache_ptr->max_cache_size)
+ empty_space = 0;
+ else
+ empty_space = cache_ptr->max_cache_size - cache_ptr->index_size;
- next_ptr = entry_ptr->next;
- prev_ptr = entry_ptr->prev;
+ while ((((cache_ptr->index_size + space_needed) > cache_ptr->max_cache_size) ||
+ ((empty_space + cache_ptr->clean_index_size) < (cache_ptr->min_clean_size))) &&
+ (entries_examined <= (2 * initial_list_len)) && (entry_ptr != NULL)) {
+ HDassert(entry_ptr->magic == H5C__H5C_CACHE_ENTRY_T_MAGIC);
+ HDassert(!(entry_ptr->is_protected));
+ HDassert(!(entry_ptr->is_read_only));
+ HDassert((entry_ptr->ro_ref_count) == 0);
- if (prev_ptr != NULL)
- prev_is_dirty = prev_ptr->is_dirty;
+ next_ptr = entry_ptr->next;
+ prev_ptr = entry_ptr->prev;
- if (entry_ptr->is_dirty && (entry_ptr->tag_info && entry_ptr->tag_info->corked)) {
+ if (prev_ptr != NULL)
+ prev_is_dirty = prev_ptr->is_dirty;
- /* Skip "dirty" corked entries. */
- ++num_corked_entries;
- didnt_flush_entry = TRUE;
- }
- else if (((entry_ptr->type)->id != H5AC_EPOCH_MARKER_ID) && (!entry_ptr->flush_in_progress) &&
- (!entry_ptr->prefetched_dirty)) {
+ if (entry_ptr->is_dirty && (entry_ptr->tag_info && entry_ptr->tag_info->corked)) {
+
+ /* Skip "dirty" corked entries. */
+ ++num_corked_entries;
+ didnt_flush_entry = TRUE;
+ }
+ else if (((entry_ptr->type)->id != H5AC_EPOCH_MARKER_ID) && (!entry_ptr->flush_in_progress) &&
+ (!entry_ptr->prefetched_dirty)) {
- didnt_flush_entry = FALSE;
+ didnt_flush_entry = FALSE;
- if (entry_ptr->is_dirty) {
+ if (entry_ptr->is_dirty) {
#if H5C_COLLECT_CACHE_STATS
- if ((cache_ptr->index_size + space_needed) > cache_ptr->max_cache_size) {
+ if ((cache_ptr->index_size + space_needed) > cache_ptr->max_cache_size) {
- cache_ptr->entries_scanned_to_make_space++;
- }
+ cache_ptr->entries_scanned_to_make_space++;
+ }
#endif /* H5C_COLLECT_CACHE_STATS */
- /* reset entries_removed_counter and
- * last_entry_removed_ptr prior to the call to
- * H5C__flush_single_entry() so that we can spot
- * unexpected removals of entries from the cache,
- * and set the restart_scan flag if proceeding
- * would be likely to cause us to scan an entry
- * that is no longer in the cache.
- */
- cache_ptr->entries_removed_counter = 0;
- cache_ptr->last_entry_removed_ptr = NULL;
+ /* reset entries_removed_counter and
+ * last_entry_removed_ptr prior to the call to
+ * H5C__flush_single_entry() so that we can spot
+ * unexpected removals of entries from the cache,
+ * and set the restart_scan flag if proceeding
+ * would be likely to cause us to scan an entry
+ * that is no longer in the cache.
+ */
+ cache_ptr->entries_removed_counter = 0;
+ cache_ptr->last_entry_removed_ptr = NULL;
- if (H5C__flush_single_entry(f, entry_ptr, H5C__NO_FLAGS_SET) < 0)
- HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "unable to flush entry")
+ if (H5C__flush_single_entry(f, entry_ptr, H5C__NO_FLAGS_SET) < 0)
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "unable to flush entry")
- if ((cache_ptr->entries_removed_counter > 1) ||
- (cache_ptr->last_entry_removed_ptr == prev_ptr))
+ if ((cache_ptr->entries_removed_counter > 1) ||
+ (cache_ptr->last_entry_removed_ptr == prev_ptr))
- restart_scan = TRUE;
- }
- else if ((cache_ptr->index_size + space_needed) > cache_ptr->max_cache_size
+ restart_scan = TRUE;
+ }
+ else if ((cache_ptr->index_size + space_needed) > cache_ptr->max_cache_size
#ifdef H5_HAVE_PARALLEL
- && !(entry_ptr->coll_access)
+ && !(entry_ptr->coll_access)
#endif /* H5_HAVE_PARALLEL */
- ) {
+ ) {
#if H5C_COLLECT_CACHE_STATS
- cache_ptr->entries_scanned_to_make_space++;
+ cache_ptr->entries_scanned_to_make_space++;
#endif /* H5C_COLLECT_CACHE_STATS */
- if (H5C__flush_single_entry(f, entry_ptr,
- H5C__FLUSH_INVALIDATE_FLAG |
- H5C__DEL_FROM_SLIST_ON_DESTROY_FLAG) < 0)
- HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "unable to flush entry")
- }
- else {
- /* We have enough space so don't flush clean entry. */
+ if (H5C__flush_single_entry(f, entry_ptr,
+ H5C__FLUSH_INVALIDATE_FLAG |
+ H5C__DEL_FROM_SLIST_ON_DESTROY_FLAG) < 0)
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "unable to flush entry")
+ }
+ else {
+ /* We have enough space so don't flush clean entry. */
#if H5C_COLLECT_CACHE_STATS
- clean_entries_skipped++;
+ clean_entries_skipped++;
#endif /* H5C_COLLECT_CACHE_STATS */
- didnt_flush_entry = TRUE;
- }
+ didnt_flush_entry = TRUE;
+ }
#if H5C_COLLECT_CACHE_STATS
- total_entries_scanned++;
+ total_entries_scanned++;
#endif /* H5C_COLLECT_CACHE_STATS */
- }
- else {
+ }
+ else {
- /* Skip epoch markers, entries that are in the process
- * of being flushed, and entries marked as prefetched_dirty
- * (occurs in the R/O case only).
- */
- didnt_flush_entry = TRUE;
+ /* Skip epoch markers, entries that are in the process
+ * of being flushed, and entries marked as prefetched_dirty
+ * (occurs in the R/O case only).
+ */
+ didnt_flush_entry = TRUE;
#if H5C_COLLECT_CACHE_STATS
- if (entry_ptr->prefetched_dirty)
- dirty_pf_entries_skipped++;
+ if (entry_ptr->prefetched_dirty)
+ dirty_pf_entries_skipped++;
#endif /* H5C_COLLECT_CACHE_STATS */
- }
+ }
- if (prev_ptr != NULL) {
+ if (prev_ptr != NULL) {
- if (didnt_flush_entry) {
+ if (didnt_flush_entry) {
- /* epoch markers don't get flushed, and we don't touch
- * entries that are in the process of being flushed.
- * Hence no need for sanity checks, as we haven't
- * flushed anything. Thus just set entry_ptr to prev_ptr
- * and go on.
- */
- entry_ptr = prev_ptr;
- }
- else if ((restart_scan) || (prev_ptr->is_dirty != prev_is_dirty) ||
- (prev_ptr->next != next_ptr) || (prev_ptr->is_protected) ||
- (prev_ptr->is_pinned)) {
-
- /* something has happened to the LRU -- start over
- * from the tail.
- */
- restart_scan = FALSE;
- entry_ptr = cache_ptr->LRU_tail_ptr;
- H5C__UPDATE_STATS_FOR_LRU_SCAN_RESTART(cache_ptr)
- }
- else {
+ /* epoch markers don't get flushed, and we don't touch
+ * entries that are in the process of being flushed.
+ * Hence no need for sanity checks, as we haven't
+ * flushed anything. Thus just set entry_ptr to prev_ptr
+ * and go on.
+ */
+ entry_ptr = prev_ptr;
+ }
+ else if ((restart_scan) || (prev_ptr->is_dirty != prev_is_dirty) ||
+ (prev_ptr->next != next_ptr) || (prev_ptr->is_protected) || (prev_ptr->is_pinned)) {
- entry_ptr = prev_ptr;
- }
+ /* something has happened to the LRU -- start over
+ * from the tail.
+ */
+ restart_scan = FALSE;
+ entry_ptr = cache_ptr->LRU_tail_ptr;
+ H5C__UPDATE_STATS_FOR_LRU_SCAN_RESTART(cache_ptr)
}
else {
- entry_ptr = NULL;
+ entry_ptr = prev_ptr;
}
+ }
+ else {
- entries_examined++;
+ entry_ptr = NULL;
+ }
- if (cache_ptr->index_size >= cache_ptr->max_cache_size) {
+ entries_examined++;
- empty_space = 0;
- }
- else {
+ if (cache_ptr->index_size >= cache_ptr->max_cache_size) {
- empty_space = cache_ptr->max_cache_size - cache_ptr->index_size;
- }
+ empty_space = 0;
+ }
+ else {
- HDassert(cache_ptr->index_size ==
- (cache_ptr->clean_index_size + cache_ptr->dirty_index_size));
+ empty_space = cache_ptr->max_cache_size - cache_ptr->index_size;
}
+ HDassert(cache_ptr->index_size == (cache_ptr->clean_index_size + cache_ptr->dirty_index_size));
+ }
+
#if H5C_COLLECT_CACHE_STATS
- cache_ptr->calls_to_msic++;
+ cache_ptr->calls_to_msic++;
- cache_ptr->total_entries_skipped_in_msic += clean_entries_skipped;
- cache_ptr->total_dirty_pf_entries_skipped_in_msic += dirty_pf_entries_skipped;
- cache_ptr->total_entries_scanned_in_msic += total_entries_scanned;
+ cache_ptr->total_entries_skipped_in_msic += clean_entries_skipped;
+ cache_ptr->total_dirty_pf_entries_skipped_in_msic += dirty_pf_entries_skipped;
+ cache_ptr->total_entries_scanned_in_msic += total_entries_scanned;
- if (clean_entries_skipped > cache_ptr->max_entries_skipped_in_msic) {
+ if (clean_entries_skipped > cache_ptr->max_entries_skipped_in_msic) {
- cache_ptr->max_entries_skipped_in_msic = clean_entries_skipped;
- }
+ cache_ptr->max_entries_skipped_in_msic = clean_entries_skipped;
+ }
- if (dirty_pf_entries_skipped > cache_ptr->max_dirty_pf_entries_skipped_in_msic)
- cache_ptr->max_dirty_pf_entries_skipped_in_msic = dirty_pf_entries_skipped;
+ if (dirty_pf_entries_skipped > cache_ptr->max_dirty_pf_entries_skipped_in_msic)
+ cache_ptr->max_dirty_pf_entries_skipped_in_msic = dirty_pf_entries_skipped;
- if (total_entries_scanned > cache_ptr->max_entries_scanned_in_msic) {
+ if (total_entries_scanned > cache_ptr->max_entries_scanned_in_msic) {
- cache_ptr->max_entries_scanned_in_msic = total_entries_scanned;
- }
+ cache_ptr->max_entries_scanned_in_msic = total_entries_scanned;
+ }
#endif /* H5C_COLLECT_CACHE_STATS */
- /* NEED: work on a better assert for corked entries */
- HDassert((entries_examined > (2 * initial_list_len)) ||
- ((cache_ptr->pl_size + cache_ptr->pel_size + cache_ptr->min_clean_size) >
- cache_ptr->max_cache_size) ||
- ((cache_ptr->clean_index_size + empty_space) >= cache_ptr->min_clean_size) ||
- ((num_corked_entries)));
+ /* NEED: work on a better assert for corked entries */
+ HDassert((entries_examined > (2 * initial_list_len)) ||
+ ((cache_ptr->pl_size + cache_ptr->pel_size + cache_ptr->min_clean_size) >
+ cache_ptr->max_cache_size) ||
+ ((cache_ptr->clean_index_size + empty_space) >= cache_ptr->min_clean_size) ||
+ ((num_corked_entries)));
#if H5C_MAINTAIN_CLEAN_AND_DIRTY_LRU_LISTS
- HDassert((entries_examined > (2 * initial_list_len)) ||
- (cache_ptr->cLRU_list_size <= cache_ptr->clean_index_size));
- HDassert((entries_examined > (2 * initial_list_len)) ||
- (cache_ptr->dLRU_list_size <= cache_ptr->dirty_index_size));
+ HDassert((entries_examined > (2 * initial_list_len)) ||
+ (cache_ptr->cLRU_list_size <= cache_ptr->clean_index_size));
+ HDassert((entries_examined > (2 * initial_list_len)) ||
+ (cache_ptr->dLRU_list_size <= cache_ptr->dirty_index_size));
#endif /* H5C_MAINTAIN_CLEAN_AND_DIRTY_LRU_LISTS */
- }
- else {
+ }
+ else {
- HDassert(H5C_MAINTAIN_CLEAN_AND_DIRTY_LRU_LISTS);
+ HDassert(H5C_MAINTAIN_CLEAN_AND_DIRTY_LRU_LISTS);
#if H5C_MAINTAIN_CLEAN_AND_DIRTY_LRU_LISTS
- initial_list_len = cache_ptr->cLRU_list_len;
- entry_ptr = cache_ptr->cLRU_tail_ptr;
+ initial_list_len = cache_ptr->cLRU_list_len;
+ entry_ptr = cache_ptr->cLRU_tail_ptr;
- while (((cache_ptr->index_size + space_needed) > cache_ptr->max_cache_size) &&
- (entries_examined <= initial_list_len) && (entry_ptr != NULL)) {
- HDassert(!(entry_ptr->is_protected));
- HDassert(!(entry_ptr->is_read_only));
- HDassert((entry_ptr->ro_ref_count) == 0);
- HDassert(!(entry_ptr->is_dirty));
+ while (((cache_ptr->index_size + space_needed) > cache_ptr->max_cache_size) &&
+ (entries_examined <= initial_list_len) && (entry_ptr != NULL)) {
+ HDassert(!(entry_ptr->is_protected));
+ HDassert(!(entry_ptr->is_read_only));
+ HDassert((entry_ptr->ro_ref_count) == 0);
+ HDassert(!(entry_ptr->is_dirty));
- prev_ptr = entry_ptr->aux_prev;
+ prev_ptr = entry_ptr->aux_prev;
- if ((!(entry_ptr->prefetched_dirty))
+ if ((!(entry_ptr->prefetched_dirty))
#ifdef H5_HAVE_PARALLEL
- && (!(entry_ptr->coll_access))
+ && (!(entry_ptr->coll_access))
#endif /* H5_HAVE_PARALLEL */
- ) {
- if (H5C__flush_single_entry(f, entry_ptr,
- H5C__FLUSH_INVALIDATE_FLAG |
- H5C__DEL_FROM_SLIST_ON_DESTROY_FLAG) < 0)
- HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "unable to flush entry")
+ ) {
+ if (H5C__flush_single_entry(
+ f, entry_ptr, H5C__FLUSH_INVALIDATE_FLAG | H5C__DEL_FROM_SLIST_ON_DESTROY_FLAG) < 0)
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "unable to flush entry")
- } /* end if */
+ } /* end if */
- /* we are scanning the clean LRU, so the serialize function
- * will not be called on any entry -- thus there is no
- * concern about the list being modified out from under
- * this function.
- */
+ /* we are scanning the clean LRU, so the serialize function
+ * will not be called on any entry -- thus there is no
+ * concern about the list being modified out from under
+ * this function.
+ */
- entry_ptr = prev_ptr;
- entries_examined++;
- }
-#endif /* H5C_MAINTAIN_CLEAN_AND_DIRTY_LRU_LISTS */
+ entry_ptr = prev_ptr;
+ entries_examined++;
}
+#endif /* H5C_MAINTAIN_CLEAN_AND_DIRTY_LRU_LISTS */
+ }
done:
- /* Sanity checks */
- HDassert(cache_ptr->msic_in_progress);
- if (!reentrant_call)
- cache_ptr->msic_in_progress = FALSE;
- HDassert((!reentrant_call) || (cache_ptr->msic_in_progress));
+ /* Sanity checks */
+ HDassert(cache_ptr->msic_in_progress);
+ if (!reentrant_call)
+ cache_ptr->msic_in_progress = FALSE;
+ HDassert((!reentrant_call) || (cache_ptr->msic_in_progress));
- FUNC_LEAVE_NOAPI(ret_value)
- } /* H5C__make_space_in_cache() */
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* H5C__make_space_in_cache() */
/*-------------------------------------------------------------------------
*
@@ -6915,62 +6973,63 @@ done:
*-------------------------------------------------------------------------
*/
#if H5C_DO_EXTREME_SANITY_CHECKS
- static herr_t H5C__validate_lru_list(H5C_t * cache_ptr)
- {
- int32_t len = 0;
- size_t size = 0;
- H5C_cache_entry_t *entry_ptr = NULL;
- herr_t ret_value = SUCCEED; /* Return value */
+static herr_t
+H5C__validate_lru_list(H5C_t *cache_ptr)
+{
+ int32_t len = 0;
+ size_t size = 0;
+ H5C_cache_entry_t *entry_ptr = NULL;
+ herr_t ret_value = SUCCEED; /* Return value */
- FUNC_ENTER_STATIC
+ FUNC_ENTER_STATIC
- HDassert(cache_ptr);
- HDassert(cache_ptr->magic == H5C__H5C_T_MAGIC);
+ HDassert(cache_ptr);
+ HDassert(cache_ptr->magic == H5C__H5C_T_MAGIC);
- if (((cache_ptr->LRU_head_ptr == NULL) || (cache_ptr->LRU_tail_ptr == NULL)) &&
- (cache_ptr->LRU_head_ptr != cache_ptr->LRU_tail_ptr))
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Check 1 failed")
+ if (((cache_ptr->LRU_head_ptr == NULL) || (cache_ptr->LRU_tail_ptr == NULL)) &&
+ (cache_ptr->LRU_head_ptr != cache_ptr->LRU_tail_ptr))
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Check 1 failed")
- if (cache_ptr->LRU_list_len < 0)
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Check 2 failed")
+ if (cache_ptr->LRU_list_len < 0)
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Check 2 failed")
- if ((cache_ptr->LRU_list_len == 1) &&
- ((cache_ptr->LRU_head_ptr != cache_ptr->LRU_tail_ptr) || (cache_ptr->LRU_head_ptr == NULL) ||
- (cache_ptr->LRU_head_ptr->size != cache_ptr->LRU_list_size)))
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Check 3 failed")
+ if ((cache_ptr->LRU_list_len == 1) &&
+ ((cache_ptr->LRU_head_ptr != cache_ptr->LRU_tail_ptr) || (cache_ptr->LRU_head_ptr == NULL) ||
+ (cache_ptr->LRU_head_ptr->size != cache_ptr->LRU_list_size)))
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Check 3 failed")
- if ((cache_ptr->LRU_list_len >= 1) &&
- ((cache_ptr->LRU_head_ptr == NULL) || (cache_ptr->LRU_head_ptr->prev != NULL) ||
- (cache_ptr->LRU_tail_ptr == NULL) || (cache_ptr->LRU_tail_ptr->next != NULL)))
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Check 4 failed")
+ if ((cache_ptr->LRU_list_len >= 1) &&
+ ((cache_ptr->LRU_head_ptr == NULL) || (cache_ptr->LRU_head_ptr->prev != NULL) ||
+ (cache_ptr->LRU_tail_ptr == NULL) || (cache_ptr->LRU_tail_ptr->next != NULL)))
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Check 4 failed")
- entry_ptr = cache_ptr->LRU_head_ptr;
- while (entry_ptr != NULL) {
- if ((entry_ptr != cache_ptr->LRU_head_ptr) &&
- ((entry_ptr->prev == NULL) || (entry_ptr->prev->next != entry_ptr)))
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Check 5 failed")
+ entry_ptr = cache_ptr->LRU_head_ptr;
+ while (entry_ptr != NULL) {
+ if ((entry_ptr != cache_ptr->LRU_head_ptr) &&
+ ((entry_ptr->prev == NULL) || (entry_ptr->prev->next != entry_ptr)))
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Check 5 failed")
- if ((entry_ptr != cache_ptr->LRU_tail_ptr) &&
- ((entry_ptr->next == NULL) || (entry_ptr->next->prev != entry_ptr)))
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Check 6 failed")
+ if ((entry_ptr != cache_ptr->LRU_tail_ptr) &&
+ ((entry_ptr->next == NULL) || (entry_ptr->next->prev != entry_ptr)))
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Check 6 failed")
- if ((entry_ptr->is_pinned) || (entry_ptr->pinned_from_client) || (entry_ptr->pinned_from_cache))
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Check 7 failed")
+ if ((entry_ptr->is_pinned) || (entry_ptr->pinned_from_client) || (entry_ptr->pinned_from_cache))
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Check 7 failed")
- len++;
- size += entry_ptr->size;
- entry_ptr = entry_ptr->next;
- }
+ len++;
+ size += entry_ptr->size;
+ entry_ptr = entry_ptr->next;
+ }
- if ((cache_ptr->LRU_list_len != len) || (cache_ptr->LRU_list_size != size))
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Check 8 failed")
+ if ((cache_ptr->LRU_list_len != len) || (cache_ptr->LRU_list_size != size))
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Check 8 failed")
done:
- if (ret_value != SUCCEED)
- HDassert(0);
+ if (ret_value != SUCCEED)
+ HDassert(0);
- FUNC_LEAVE_NOAPI(ret_value)
- } /* H5C__validate_lru_list() */
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* H5C__validate_lru_list() */
#endif /* H5C_DO_EXTREME_SANITY_CHECKS */
/*-------------------------------------------------------------------------
@@ -6991,65 +7050,66 @@ done:
*-------------------------------------------------------------------------
*/
#if H5C_DO_EXTREME_SANITY_CHECKS
- static herr_t H5C__validate_pinned_entry_list(H5C_t * cache_ptr)
- {
- int32_t len = 0;
- size_t size = 0;
- H5C_cache_entry_t *entry_ptr = NULL;
- herr_t ret_value = SUCCEED; /* Return value */
+static herr_t
+H5C__validate_pinned_entry_list(H5C_t *cache_ptr)
+{
+ int32_t len = 0;
+ size_t size = 0;
+ H5C_cache_entry_t *entry_ptr = NULL;
+ herr_t ret_value = SUCCEED; /* Return value */
- FUNC_ENTER_STATIC
+ FUNC_ENTER_STATIC
- HDassert(cache_ptr);
- HDassert(cache_ptr->magic == H5C__H5C_T_MAGIC);
+ HDassert(cache_ptr);
+ HDassert(cache_ptr->magic == H5C__H5C_T_MAGIC);
- if (((cache_ptr->pel_head_ptr == NULL) || (cache_ptr->pel_tail_ptr == NULL)) &&
- (cache_ptr->pel_head_ptr != cache_ptr->pel_tail_ptr))
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Check 1 failed")
+ if (((cache_ptr->pel_head_ptr == NULL) || (cache_ptr->pel_tail_ptr == NULL)) &&
+ (cache_ptr->pel_head_ptr != cache_ptr->pel_tail_ptr))
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Check 1 failed")
- if (cache_ptr->pel_len < 0)
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Check 2 failed")
+ if (cache_ptr->pel_len < 0)
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Check 2 failed")
- if ((cache_ptr->pel_len == 1) &&
- ((cache_ptr->pel_head_ptr != cache_ptr->pel_tail_ptr) || (cache_ptr->pel_head_ptr == NULL) ||
- (cache_ptr->pel_head_ptr->size != cache_ptr->pel_size)))
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Check 3 failed")
+ if ((cache_ptr->pel_len == 1) &&
+ ((cache_ptr->pel_head_ptr != cache_ptr->pel_tail_ptr) || (cache_ptr->pel_head_ptr == NULL) ||
+ (cache_ptr->pel_head_ptr->size != cache_ptr->pel_size)))
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Check 3 failed")
- if ((cache_ptr->pel_len >= 1) &&
- ((cache_ptr->pel_head_ptr == NULL) || (cache_ptr->pel_head_ptr->prev != NULL) ||
- (cache_ptr->pel_tail_ptr == NULL) || (cache_ptr->pel_tail_ptr->next != NULL)))
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Check 4 failed")
+ if ((cache_ptr->pel_len >= 1) &&
+ ((cache_ptr->pel_head_ptr == NULL) || (cache_ptr->pel_head_ptr->prev != NULL) ||
+ (cache_ptr->pel_tail_ptr == NULL) || (cache_ptr->pel_tail_ptr->next != NULL)))
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Check 4 failed")
- entry_ptr = cache_ptr->pel_head_ptr;
- while (entry_ptr != NULL) {
- if ((entry_ptr != cache_ptr->pel_head_ptr) &&
- ((entry_ptr->prev == NULL) || (entry_ptr->prev->next != entry_ptr)))
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Check 5 failed")
+ entry_ptr = cache_ptr->pel_head_ptr;
+ while (entry_ptr != NULL) {
+ if ((entry_ptr != cache_ptr->pel_head_ptr) &&
+ ((entry_ptr->prev == NULL) || (entry_ptr->prev->next != entry_ptr)))
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Check 5 failed")
- if ((entry_ptr != cache_ptr->pel_tail_ptr) &&
- ((entry_ptr->next == NULL) || (entry_ptr->next->prev != entry_ptr)))
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Check 6 failed")
+ if ((entry_ptr != cache_ptr->pel_tail_ptr) &&
+ ((entry_ptr->next == NULL) || (entry_ptr->next->prev != entry_ptr)))
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Check 6 failed")
- if (!entry_ptr->is_pinned)
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Check 7 failed")
+ if (!entry_ptr->is_pinned)
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Check 7 failed")
- if (!(entry_ptr->pinned_from_client || entry_ptr->pinned_from_cache))
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Check 8 failed")
+ if (!(entry_ptr->pinned_from_client || entry_ptr->pinned_from_cache))
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Check 8 failed")
- len++;
- size += entry_ptr->size;
- entry_ptr = entry_ptr->next;
- }
+ len++;
+ size += entry_ptr->size;
+ entry_ptr = entry_ptr->next;
+ }
- if ((cache_ptr->pel_len != len) || (cache_ptr->pel_size != size))
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Check 9 failed")
+ if ((cache_ptr->pel_len != len) || (cache_ptr->pel_size != size))
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Check 9 failed")
done:
- if (ret_value != SUCCEED)
- HDassert(0);
+ if (ret_value != SUCCEED)
+ HDassert(0);
- FUNC_LEAVE_NOAPI(ret_value)
- } /* H5C__validate_pinned_entry_list() */
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* H5C__validate_pinned_entry_list() */
#endif /* H5C_DO_EXTREME_SANITY_CHECKS */
/*-------------------------------------------------------------------------
@@ -7070,65 +7130,66 @@ done:
*-------------------------------------------------------------------------
*/
#if H5C_DO_EXTREME_SANITY_CHECKS
- static herr_t H5C__validate_protected_entry_list(H5C_t * cache_ptr)
- {
- int32_t len = 0;
- size_t size = 0;
- H5C_cache_entry_t *entry_ptr = NULL;
- herr_t ret_value = SUCCEED; /* Return value */
+static herr_t
+H5C__validate_protected_entry_list(H5C_t *cache_ptr)
+{
+ int32_t len = 0;
+ size_t size = 0;
+ H5C_cache_entry_t *entry_ptr = NULL;
+ herr_t ret_value = SUCCEED; /* Return value */
- FUNC_ENTER_STATIC
+ FUNC_ENTER_STATIC
- HDassert(cache_ptr);
- HDassert(cache_ptr->magic == H5C__H5C_T_MAGIC);
+ HDassert(cache_ptr);
+ HDassert(cache_ptr->magic == H5C__H5C_T_MAGIC);
- if (((cache_ptr->pl_head_ptr == NULL) || (cache_ptr->pl_tail_ptr == NULL)) &&
- (cache_ptr->pl_head_ptr != cache_ptr->pl_tail_ptr))
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Check 1 failed")
+ if (((cache_ptr->pl_head_ptr == NULL) || (cache_ptr->pl_tail_ptr == NULL)) &&
+ (cache_ptr->pl_head_ptr != cache_ptr->pl_tail_ptr))
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Check 1 failed")
- if (cache_ptr->pl_len < 0)
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Check 2 failed")
+ if (cache_ptr->pl_len < 0)
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Check 2 failed")
- if ((cache_ptr->pl_len == 1) &&
- ((cache_ptr->pl_head_ptr != cache_ptr->pl_tail_ptr) || (cache_ptr->pl_head_ptr == NULL) ||
- (cache_ptr->pl_head_ptr->size != cache_ptr->pl_size)))
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Check 3 failed")
+ if ((cache_ptr->pl_len == 1) &&
+ ((cache_ptr->pl_head_ptr != cache_ptr->pl_tail_ptr) || (cache_ptr->pl_head_ptr == NULL) ||
+ (cache_ptr->pl_head_ptr->size != cache_ptr->pl_size)))
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Check 3 failed")
- if ((cache_ptr->pl_len >= 1) &&
- ((cache_ptr->pl_head_ptr == NULL) || (cache_ptr->pl_head_ptr->prev != NULL) ||
- (cache_ptr->pl_tail_ptr == NULL) || (cache_ptr->pl_tail_ptr->next != NULL)))
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Check 4 failed")
+ if ((cache_ptr->pl_len >= 1) &&
+ ((cache_ptr->pl_head_ptr == NULL) || (cache_ptr->pl_head_ptr->prev != NULL) ||
+ (cache_ptr->pl_tail_ptr == NULL) || (cache_ptr->pl_tail_ptr->next != NULL)))
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Check 4 failed")
- entry_ptr = cache_ptr->pl_head_ptr;
- while (entry_ptr != NULL) {
- if ((entry_ptr != cache_ptr->pl_head_ptr) &&
- ((entry_ptr->prev == NULL) || (entry_ptr->prev->next != entry_ptr)))
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Check 5 failed")
+ entry_ptr = cache_ptr->pl_head_ptr;
+ while (entry_ptr != NULL) {
+ if ((entry_ptr != cache_ptr->pl_head_ptr) &&
+ ((entry_ptr->prev == NULL) || (entry_ptr->prev->next != entry_ptr)))
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Check 5 failed")
- if ((entry_ptr != cache_ptr->pl_tail_ptr) &&
- ((entry_ptr->next == NULL) || (entry_ptr->next->prev != entry_ptr)))
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Check 6 failed")
+ if ((entry_ptr != cache_ptr->pl_tail_ptr) &&
+ ((entry_ptr->next == NULL) || (entry_ptr->next->prev != entry_ptr)))
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Check 6 failed")
- if (!entry_ptr->is_protected)
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Check 7 failed")
+ if (!entry_ptr->is_protected)
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Check 7 failed")
- if (entry_ptr->is_read_only && (entry_ptr->ro_ref_count <= 0))
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Check 8 failed")
+ if (entry_ptr->is_read_only && (entry_ptr->ro_ref_count <= 0))
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Check 8 failed")
- len++;
- size += entry_ptr->size;
- entry_ptr = entry_ptr->next;
- }
+ len++;
+ size += entry_ptr->size;
+ entry_ptr = entry_ptr->next;
+ }
- if ((cache_ptr->pl_len != len) || (cache_ptr->pl_size != size))
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Check 9 failed")
+ if ((cache_ptr->pl_len != len) || (cache_ptr->pl_size != size))
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Check 9 failed")
done:
- if (ret_value != SUCCEED)
- HDassert(0);
+ if (ret_value != SUCCEED)
+ HDassert(0);
- FUNC_LEAVE_NOAPI(ret_value)
- } /* H5C__validate_protected_entry_list() */
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* H5C__validate_protected_entry_list() */
#endif /* H5C_DO_EXTREME_SANITY_CHECKS */
/*-------------------------------------------------------------------------
@@ -7147,1213 +7208,1223 @@ done:
*-------------------------------------------------------------------------
*/
#if H5C_DO_SLIST_SANITY_CHECKS
- static hbool_t H5C__entry_in_skip_list(H5C_t * cache_ptr, H5C_cache_entry_t * target_ptr)
- {
- H5SL_node_t *node_ptr;
- hbool_t in_slist;
+static hbool_t
+H5C__entry_in_skip_list(H5C_t *cache_ptr, H5C_cache_entry_t *target_ptr)
+{
+ H5SL_node_t *node_ptr;
+ hbool_t in_slist;
- HDassert(cache_ptr);
- HDassert(cache_ptr->magic == H5C__H5C_T_MAGIC);
- HDassert(cache_ptr->slist_ptr);
+ HDassert(cache_ptr);
+ HDassert(cache_ptr->magic == H5C__H5C_T_MAGIC);
+ HDassert(cache_ptr->slist_ptr);
- node_ptr = H5SL_first(cache_ptr->slist_ptr);
- in_slist = FALSE;
- while ((node_ptr != NULL) && (!in_slist)) {
- H5C_cache_entry_t *entry_ptr;
+ node_ptr = H5SL_first(cache_ptr->slist_ptr);
+ in_slist = FALSE;
+ while ((node_ptr != NULL) && (!in_slist)) {
+ H5C_cache_entry_t *entry_ptr;
- entry_ptr = (H5C_cache_entry_t *)H5SL_item(node_ptr);
+ entry_ptr = (H5C_cache_entry_t *)H5SL_item(node_ptr);
- HDassert(entry_ptr);
- HDassert(entry_ptr->magic == H5C__H5C_CACHE_ENTRY_T_MAGIC);
- HDassert(entry_ptr->is_dirty);
- HDassert(entry_ptr->in_slist);
+ HDassert(entry_ptr);
+ HDassert(entry_ptr->magic == H5C__H5C_CACHE_ENTRY_T_MAGIC);
+ HDassert(entry_ptr->is_dirty);
+ HDassert(entry_ptr->in_slist);
- if (entry_ptr == target_ptr)
- in_slist = TRUE;
- else
- node_ptr = H5SL_next(node_ptr);
- }
+ if (entry_ptr == target_ptr)
+ in_slist = TRUE;
+ else
+ node_ptr = H5SL_next(node_ptr);
+ }
- return (in_slist);
- } /* H5C__entry_in_skip_list() */
+ return (in_slist);
+} /* H5C__entry_in_skip_list() */
#endif /* H5C_DO_SLIST_SANITY_CHECKS */
- /*-------------------------------------------------------------------------
- *
- * Function: H5C__flush_marked_entries
- *
- * Purpose: Flushes all marked entries in the cache.
- *
- * Return: FAIL if error is detected, SUCCEED otherwise.
- *
- * Programmer: Mike McGreevy
- * November 3, 2010
- *
- *-------------------------------------------------------------------------
- */
- herr_t H5C__flush_marked_entries(H5F_t * f)
- {
- herr_t ret_value = SUCCEED;
+/*-------------------------------------------------------------------------
+ *
+ * Function: H5C__flush_marked_entries
+ *
+ * Purpose: Flushes all marked entries in the cache.
+ *
+ * Return: FAIL if error is detected, SUCCEED otherwise.
+ *
+ * Programmer: Mike McGreevy
+ * November 3, 2010
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5C__flush_marked_entries(H5F_t *f)
+{
+ herr_t ret_value = SUCCEED;
- FUNC_ENTER_PACKAGE
+ FUNC_ENTER_PACKAGE
- /* Assertions */
- HDassert(f != NULL);
+ /* Assertions */
+ HDassert(f != NULL);
- /* Flush all marked entries */
- if (H5C_flush_cache(f, H5C__FLUSH_MARKED_ENTRIES_FLAG | H5C__FLUSH_IGNORE_PROTECTED_FLAG) < 0)
- HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "Can't flush cache")
+ /* Flush all marked entries */
+ if (H5C_flush_cache(f, H5C__FLUSH_MARKED_ENTRIES_FLAG | H5C__FLUSH_IGNORE_PROTECTED_FLAG) < 0)
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "Can't flush cache")
done:
- FUNC_LEAVE_NOAPI(ret_value)
- } /* H5C__flush_marked_entries */
-
- /*-------------------------------------------------------------------------
- *
- * Function: H5C_cork
- *
- * Purpose: To cork/uncork/get cork status of an object depending on "action":
- * H5C__SET_CORK:
- * To cork the object
- * Return error if the object is already corked
- * H5C__UNCORK:
- * To uncork the obejct
- * Return error if the object is not corked
- * H5C__GET_CORKED:
- * To retrieve the cork status of an object in
- * the parameter "corked"
- *
- * Return: Success: Non-negative
- * Failure: Negative
- *
- * Programmer: Vailin Choi
- * January 2014
- *
- *-------------------------------------------------------------------------
- */
- herr_t H5C_cork(H5C_t * cache_ptr, haddr_t obj_addr, unsigned action, hbool_t *corked)
- {
- H5C_tag_info_t *tag_info; /* Points to a tag info struct */
- herr_t ret_value = SUCCEED;
-
- FUNC_ENTER_NOAPI_NOINIT
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* H5C__flush_marked_entries */
- /* Assertions */
- HDassert(cache_ptr != NULL);
- HDassert(H5F_addr_defined(obj_addr));
- HDassert(action == H5C__SET_CORK || action == H5C__UNCORK || action == H5C__GET_CORKED);
+/*-------------------------------------------------------------------------
+ *
+ * Function: H5C_cork
+ *
+ * Purpose: To cork/uncork/get cork status of an object depending on "action":
+ * H5C__SET_CORK:
+ * To cork the object
+ * Return error if the object is already corked
+ * H5C__UNCORK:
+ * To uncork the obejct
+ * Return error if the object is not corked
+ * H5C__GET_CORKED:
+ * To retrieve the cork status of an object in
+ * the parameter "corked"
+ *
+ * Return: Success: Non-negative
+ * Failure: Negative
+ *
+ * Programmer: Vailin Choi
+ * January 2014
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5C_cork(H5C_t *cache_ptr, haddr_t obj_addr, unsigned action, hbool_t *corked)
+{
+ H5C_tag_info_t *tag_info; /* Points to a tag info struct */
+ herr_t ret_value = SUCCEED;
- /* Search the list of corked object addresses in the cache */
- tag_info = (H5C_tag_info_t *)H5SL_search(cache_ptr->tag_list, &obj_addr);
+ FUNC_ENTER_NOAPI_NOINIT
- if (H5C__GET_CORKED == action) {
- HDassert(corked);
- if (tag_info != NULL && tag_info->corked)
- *corked = TRUE;
- else
- *corked = FALSE;
- } /* end if */
- else {
- /* Sanity check */
- HDassert(H5C__SET_CORK == action || H5C__UNCORK == action);
-
- /* Perform appropriate action */
- if (H5C__SET_CORK == action) {
- /* Check if this is the first entry for this tagged object */
- if (NULL == tag_info) {
- /* Allocate new tag info struct */
- if (NULL == (tag_info = H5FL_CALLOC(H5C_tag_info_t)))
- HGOTO_ERROR(H5E_CACHE, H5E_CANTALLOC, FAIL, "can't allocate tag info for cache entry")
-
- /* Set the tag for all entries */
- tag_info->tag = obj_addr;
-
- /* Insert tag info into skip list */
- if (H5SL_insert(cache_ptr->tag_list, tag_info, &(tag_info->tag)) < 0)
- HGOTO_ERROR(H5E_CACHE, H5E_CANTINSERT, FAIL, "can't insert tag info in skip list")
- } /* end if */
- else {
- /* Check for object already corked */
- if (tag_info->corked)
- HGOTO_ERROR(H5E_CACHE, H5E_CANTCORK, FAIL, "object already corked")
- HDassert(tag_info->entry_cnt > 0 && tag_info->head);
- } /* end else */
+ /* Assertions */
+ HDassert(cache_ptr != NULL);
+ HDassert(H5F_addr_defined(obj_addr));
+ HDassert(action == H5C__SET_CORK || action == H5C__UNCORK || action == H5C__GET_CORKED);
- /* Set the corked status for the entire object */
- tag_info->corked = TRUE;
- cache_ptr->num_objs_corked++;
+ /* Search the list of corked object addresses in the cache */
+ tag_info = (H5C_tag_info_t *)H5SL_search(cache_ptr->tag_list, &obj_addr);
+ if (H5C__GET_CORKED == action) {
+ HDassert(corked);
+ if (tag_info != NULL && tag_info->corked)
+ *corked = TRUE;
+ else
+ *corked = FALSE;
+ } /* end if */
+ else {
+ /* Sanity check */
+ HDassert(H5C__SET_CORK == action || H5C__UNCORK == action);
+
+ /* Perform appropriate action */
+ if (H5C__SET_CORK == action) {
+ /* Check if this is the first entry for this tagged object */
+ if (NULL == tag_info) {
+ /* Allocate new tag info struct */
+ if (NULL == (tag_info = H5FL_CALLOC(H5C_tag_info_t)))
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTALLOC, FAIL, "can't allocate tag info for cache entry")
+
+ /* Set the tag for all entries */
+ tag_info->tag = obj_addr;
+
+ /* Insert tag info into skip list */
+ if (H5SL_insert(cache_ptr->tag_list, tag_info, &(tag_info->tag)) < 0)
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTINSERT, FAIL, "can't insert tag info in skip list")
} /* end if */
else {
- /* Sanity check */
- HDassert(tag_info);
+ /* Check for object already corked */
+ if (tag_info->corked)
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTCORK, FAIL, "object already corked")
+ HDassert(tag_info->entry_cnt > 0 && tag_info->head);
+ } /* end else */
- /* Check for already uncorked */
- if (!tag_info->corked)
- HGOTO_ERROR(H5E_CACHE, H5E_CANTUNCORK, FAIL, "object already uncorked")
+ /* Set the corked status for the entire object */
+ tag_info->corked = TRUE;
+ cache_ptr->num_objs_corked++;
- /* Set the corked status for the entire object */
- tag_info->corked = FALSE;
- cache_ptr->num_objs_corked--;
+ } /* end if */
+ else {
+ /* Sanity check */
+ HDassert(tag_info);
- /* Remove the tag info from the tag list, if there's no more entries with this tag */
- if (0 == tag_info->entry_cnt) {
- /* Sanity check */
- HDassert(NULL == tag_info->head);
+ /* Check for already uncorked */
+ if (!tag_info->corked)
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTUNCORK, FAIL, "object already uncorked")
- if (H5SL_remove(cache_ptr->tag_list, &(tag_info->tag)) != tag_info)
- HGOTO_ERROR(H5E_CACHE, H5E_CANTREMOVE, FAIL, "can't remove tag info from list")
+ /* Set the corked status for the entire object */
+ tag_info->corked = FALSE;
+ cache_ptr->num_objs_corked--;
- /* Release the tag info */
- tag_info = H5FL_FREE(H5C_tag_info_t, tag_info);
- } /* end if */
- else
- HDassert(NULL != tag_info->head);
- } /* end else */
- } /* end else */
+ /* Remove the tag info from the tag list, if there's no more entries with this tag */
+ if (0 == tag_info->entry_cnt) {
+ /* Sanity check */
+ HDassert(NULL == tag_info->head);
-done:
- FUNC_LEAVE_NOAPI(ret_value)
- } /* H5C_cork() */
+ if (H5SL_remove(cache_ptr->tag_list, &(tag_info->tag)) != tag_info)
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTREMOVE, FAIL, "can't remove tag info from list")
- /*-------------------------------------------------------------------------
- * Function: H5C__mark_flush_dep_dirty()
- *
- * Purpose: Recursively propagate the flush_dep_ndirty_children flag
- * up the dependency chain in response to entry either
- * becoming dirty or having its flush_dep_ndirty_children
- * increased from 0.
- *
- * Return: Non-negative on success/Negative on failure
- *
- * Programmer: Neil Fortner
- * 11/13/12
- *
- *-------------------------------------------------------------------------
- */
- static herr_t H5C__mark_flush_dep_dirty(H5C_cache_entry_t * entry)
- {
- unsigned u; /* Local index variable */
- herr_t ret_value = SUCCEED; /* Return value */
+ /* Release the tag info */
+ tag_info = H5FL_FREE(H5C_tag_info_t, tag_info);
+ } /* end if */
+ else
+ HDassert(NULL != tag_info->head);
+ } /* end else */
+ } /* end else */
- FUNC_ENTER_STATIC
+done:
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* H5C_cork() */
- /* Sanity checks */
- HDassert(entry);
+/*-------------------------------------------------------------------------
+ * Function: H5C__mark_flush_dep_dirty()
+ *
+ * Purpose: Recursively propagate the flush_dep_ndirty_children flag
+ * up the dependency chain in response to entry either
+ * becoming dirty or having its flush_dep_ndirty_children
+ * increased from 0.
+ *
+ * Return: Non-negative on success/Negative on failure
+ *
+ * Programmer: Neil Fortner
+ * 11/13/12
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5C__mark_flush_dep_dirty(H5C_cache_entry_t *entry)
+{
+ unsigned u; /* Local index variable */
+ herr_t ret_value = SUCCEED; /* Return value */
- /* Iterate over the parent entries, if any */
- for (u = 0; u < entry->flush_dep_nparents; u++) {
- /* Sanity check */
- HDassert(entry->flush_dep_parent[u]->flush_dep_ndirty_children <
- entry->flush_dep_parent[u]->flush_dep_nchildren);
+ FUNC_ENTER_STATIC
- /* Adjust the parent's number of dirty children */
- entry->flush_dep_parent[u]->flush_dep_ndirty_children++;
+ /* Sanity checks */
+ HDassert(entry);
- /* If the parent has a 'notify' callback, send a 'child entry dirtied' notice */
- if (entry->flush_dep_parent[u]->type->notify &&
- (entry->flush_dep_parent[u]->type->notify)(H5C_NOTIFY_ACTION_CHILD_DIRTIED,
- entry->flush_dep_parent[u]) < 0)
- HGOTO_ERROR(H5E_CACHE, H5E_CANTNOTIFY, FAIL,
- "can't notify parent about child entry dirty flag set")
- } /* end for */
+ /* Iterate over the parent entries, if any */
+ for (u = 0; u < entry->flush_dep_nparents; u++) {
+ /* Sanity check */
+ HDassert(entry->flush_dep_parent[u]->flush_dep_ndirty_children <
+ entry->flush_dep_parent[u]->flush_dep_nchildren);
+
+ /* Adjust the parent's number of dirty children */
+ entry->flush_dep_parent[u]->flush_dep_ndirty_children++;
+
+ /* If the parent has a 'notify' callback, send a 'child entry dirtied' notice */
+ if (entry->flush_dep_parent[u]->type->notify &&
+ (entry->flush_dep_parent[u]->type->notify)(H5C_NOTIFY_ACTION_CHILD_DIRTIED,
+ entry->flush_dep_parent[u]) < 0)
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTNOTIFY, FAIL,
+ "can't notify parent about child entry dirty flag set")
+ } /* end for */
done:
- FUNC_LEAVE_NOAPI(ret_value)
- } /* H5C__mark_flush_dep_dirty() */
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* H5C__mark_flush_dep_dirty() */
- /*-------------------------------------------------------------------------
- * Function: H5C__mark_flush_dep_clean()
- *
- * Purpose: Recursively propagate the flush_dep_ndirty_children flag
- * up the dependency chain in response to entry either
- * becoming clean or having its flush_dep_ndirty_children
- * reduced to 0.
- *
- * Return: Non-negative on success/Negative on failure
- *
- * Programmer: Neil Fortner
- * 11/13/12
- *
- *-------------------------------------------------------------------------
- */
- static herr_t H5C__mark_flush_dep_clean(H5C_cache_entry_t * entry)
- {
- int i; /* Local index variable */
- herr_t ret_value = SUCCEED; /* Return value */
+/*-------------------------------------------------------------------------
+ * Function: H5C__mark_flush_dep_clean()
+ *
+ * Purpose: Recursively propagate the flush_dep_ndirty_children flag
+ * up the dependency chain in response to entry either
+ * becoming clean or having its flush_dep_ndirty_children
+ * reduced to 0.
+ *
+ * Return: Non-negative on success/Negative on failure
+ *
+ * Programmer: Neil Fortner
+ * 11/13/12
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5C__mark_flush_dep_clean(H5C_cache_entry_t *entry)
+{
+ int i; /* Local index variable */
+ herr_t ret_value = SUCCEED; /* Return value */
- FUNC_ENTER_STATIC
+ FUNC_ENTER_STATIC
- /* Sanity checks */
- HDassert(entry);
+ /* Sanity checks */
+ HDassert(entry);
- /* Iterate over the parent entries, if any */
- /* Note reverse iteration order, in case the callback removes the flush
- * dependency - QAK, 2017/08/12
- */
- for (i = ((int)entry->flush_dep_nparents) - 1; i >= 0; i--) {
- /* Sanity check */
- HDassert(entry->flush_dep_parent[i]->flush_dep_ndirty_children > 0);
+ /* Iterate over the parent entries, if any */
+ /* Note reverse iteration order, in case the callback removes the flush
+ * dependency - QAK, 2017/08/12
+ */
+ for (i = ((int)entry->flush_dep_nparents) - 1; i >= 0; i--) {
+ /* Sanity check */
+ HDassert(entry->flush_dep_parent[i]->flush_dep_ndirty_children > 0);
- /* Adjust the parent's number of dirty children */
- entry->flush_dep_parent[i]->flush_dep_ndirty_children--;
+ /* Adjust the parent's number of dirty children */
+ entry->flush_dep_parent[i]->flush_dep_ndirty_children--;
- /* If the parent has a 'notify' callback, send a 'child entry cleaned' notice */
- if (entry->flush_dep_parent[i]->type->notify &&
- (entry->flush_dep_parent[i]->type->notify)(H5C_NOTIFY_ACTION_CHILD_CLEANED,
- entry->flush_dep_parent[i]) < 0)
- HGOTO_ERROR(H5E_CACHE, H5E_CANTNOTIFY, FAIL,
- "can't notify parent about child entry dirty flag reset")
- } /* end for */
+ /* If the parent has a 'notify' callback, send a 'child entry cleaned' notice */
+ if (entry->flush_dep_parent[i]->type->notify &&
+ (entry->flush_dep_parent[i]->type->notify)(H5C_NOTIFY_ACTION_CHILD_CLEANED,
+ entry->flush_dep_parent[i]) < 0)
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTNOTIFY, FAIL,
+ "can't notify parent about child entry dirty flag reset")
+ } /* end for */
done:
- FUNC_LEAVE_NOAPI(ret_value)
- } /* H5C__mark_flush_dep_clean() */
-
- /*-------------------------------------------------------------------------
- * Function: H5C__mark_flush_dep_serialized()
- *
- * Purpose: Decrement the flush_dep_nunser_children fields of all the
- * target entry's flush dependency parents in response to
- * the target entry becoming serialized.
- *
- * Return: Non-negative on success/Negative on failure
- *
- * Programmer: John Mainzer
- * 8/30/16
- *
- *-------------------------------------------------------------------------
- */
- herr_t H5C__mark_flush_dep_serialized(H5C_cache_entry_t * entry_ptr)
- {
- int i; /* Local index variable */
- herr_t ret_value = SUCCEED; /* Return value */
-
- FUNC_ENTER_STATIC
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* H5C__mark_flush_dep_clean() */
- /* Sanity checks */
- HDassert(entry_ptr);
+/*-------------------------------------------------------------------------
+ * Function: H5C__mark_flush_dep_serialized()
+ *
+ * Purpose: Decrement the flush_dep_nunser_children fields of all the
+ * target entry's flush dependency parents in response to
+ * the target entry becoming serialized.
+ *
+ * Return: Non-negative on success/Negative on failure
+ *
+ * Programmer: John Mainzer
+ * 8/30/16
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5C__mark_flush_dep_serialized(H5C_cache_entry_t *entry_ptr)
+{
+ int i; /* Local index variable */
+ herr_t ret_value = SUCCEED; /* Return value */
- /* Iterate over the parent entries, if any */
- /* Note reverse iteration order, in case the callback removes the flush
- * dependency - QAK, 2017/08/12
- */
- for (i = ((int)entry_ptr->flush_dep_nparents) - 1; i >= 0; i--) {
- /* Sanity checks */
- HDassert(entry_ptr->flush_dep_parent);
- HDassert(entry_ptr->flush_dep_parent[i]->magic == H5C__H5C_CACHE_ENTRY_T_MAGIC);
- HDassert(entry_ptr->flush_dep_parent[i]->flush_dep_nunser_children > 0);
+ FUNC_ENTER_STATIC
- /* decrement the parents number of unserialized children */
- entry_ptr->flush_dep_parent[i]->flush_dep_nunser_children--;
+ /* Sanity checks */
+ HDassert(entry_ptr);
- /* If the parent has a 'notify' callback, send a 'child entry serialized' notice */
- if (entry_ptr->flush_dep_parent[i]->type->notify &&
- (entry_ptr->flush_dep_parent[i]->type->notify)(H5C_NOTIFY_ACTION_CHILD_SERIALIZED,
- entry_ptr->flush_dep_parent[i]) < 0)
- HGOTO_ERROR(H5E_CACHE, H5E_CANTNOTIFY, FAIL,
- "can't notify parent about child entry serialized flag set")
- } /* end for */
+ /* Iterate over the parent entries, if any */
+ /* Note reverse iteration order, in case the callback removes the flush
+ * dependency - QAK, 2017/08/12
+ */
+ for (i = ((int)entry_ptr->flush_dep_nparents) - 1; i >= 0; i--) {
+ /* Sanity checks */
+ HDassert(entry_ptr->flush_dep_parent);
+ HDassert(entry_ptr->flush_dep_parent[i]->magic == H5C__H5C_CACHE_ENTRY_T_MAGIC);
+ HDassert(entry_ptr->flush_dep_parent[i]->flush_dep_nunser_children > 0);
+
+ /* decrement the parents number of unserialized children */
+ entry_ptr->flush_dep_parent[i]->flush_dep_nunser_children--;
+
+ /* If the parent has a 'notify' callback, send a 'child entry serialized' notice */
+ if (entry_ptr->flush_dep_parent[i]->type->notify &&
+ (entry_ptr->flush_dep_parent[i]->type->notify)(H5C_NOTIFY_ACTION_CHILD_SERIALIZED,
+ entry_ptr->flush_dep_parent[i]) < 0)
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTNOTIFY, FAIL,
+ "can't notify parent about child entry serialized flag set")
+ } /* end for */
done:
- FUNC_LEAVE_NOAPI(ret_value)
- } /* H5C__mark_flush_dep_serialized() */
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* H5C__mark_flush_dep_serialized() */
- /*-------------------------------------------------------------------------
- * Function: H5C__mark_flush_dep_unserialized()
- *
- * Purpose: Increment the flush_dep_nunser_children fields of all the
- * target entry's flush dependency parents in response to
- * the target entry becoming unserialized.
- *
- * Return: Non-negative on success/Negative on failure
- *
- * Programmer: John Mainzer
- * 8/30/16
- *
- *-------------------------------------------------------------------------
- */
- herr_t H5C__mark_flush_dep_unserialized(H5C_cache_entry_t * entry_ptr)
- {
- unsigned u; /* Local index variable */
- herr_t ret_value = SUCCEED; /* Return value */
+/*-------------------------------------------------------------------------
+ * Function: H5C__mark_flush_dep_unserialized()
+ *
+ * Purpose: Increment the flush_dep_nunser_children fields of all the
+ * target entry's flush dependency parents in response to
+ * the target entry becoming unserialized.
+ *
+ * Return: Non-negative on success/Negative on failure
+ *
+ * Programmer: John Mainzer
+ * 8/30/16
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5C__mark_flush_dep_unserialized(H5C_cache_entry_t *entry_ptr)
+{
+ unsigned u; /* Local index variable */
+ herr_t ret_value = SUCCEED; /* Return value */
- FUNC_ENTER_STATIC
+ FUNC_ENTER_STATIC
- /* Sanity checks */
- HDassert(entry_ptr);
+ /* Sanity checks */
+ HDassert(entry_ptr);
- /* Iterate over the parent entries, if any */
- for (u = 0; u < entry_ptr->flush_dep_nparents; u++) {
- /* Sanity check */
- HDassert(entry_ptr->flush_dep_parent);
- HDassert(entry_ptr->flush_dep_parent[u]->magic == H5C__H5C_CACHE_ENTRY_T_MAGIC);
- HDassert(entry_ptr->flush_dep_parent[u]->flush_dep_nunser_children <
- entry_ptr->flush_dep_parent[u]->flush_dep_nchildren);
-
- /* increment parents number of usserialized children */
- entry_ptr->flush_dep_parent[u]->flush_dep_nunser_children++;
-
- /* If the parent has a 'notify' callback, send a 'child entry unserialized' notice */
- if (entry_ptr->flush_dep_parent[u]->type->notify &&
- (entry_ptr->flush_dep_parent[u]->type->notify)(H5C_NOTIFY_ACTION_CHILD_UNSERIALIZED,
- entry_ptr->flush_dep_parent[u]) < 0)
- HGOTO_ERROR(H5E_CACHE, H5E_CANTNOTIFY, FAIL,
- "can't notify parent about child entry serialized flag reset")
- } /* end for */
+ /* Iterate over the parent entries, if any */
+ for (u = 0; u < entry_ptr->flush_dep_nparents; u++) {
+ /* Sanity check */
+ HDassert(entry_ptr->flush_dep_parent);
+ HDassert(entry_ptr->flush_dep_parent[u]->magic == H5C__H5C_CACHE_ENTRY_T_MAGIC);
+ HDassert(entry_ptr->flush_dep_parent[u]->flush_dep_nunser_children <
+ entry_ptr->flush_dep_parent[u]->flush_dep_nchildren);
+
+ /* increment parents number of usserialized children */
+ entry_ptr->flush_dep_parent[u]->flush_dep_nunser_children++;
+
+ /* If the parent has a 'notify' callback, send a 'child entry unserialized' notice */
+ if (entry_ptr->flush_dep_parent[u]->type->notify &&
+ (entry_ptr->flush_dep_parent[u]->type->notify)(H5C_NOTIFY_ACTION_CHILD_UNSERIALIZED,
+ entry_ptr->flush_dep_parent[u]) < 0)
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTNOTIFY, FAIL,
+ "can't notify parent about child entry serialized flag reset")
+ } /* end for */
done:
- FUNC_LEAVE_NOAPI(ret_value)
- } /* H5C__mark_flush_dep_unserialized() */
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* H5C__mark_flush_dep_unserialized() */
#ifndef NDEBUG
- /*-------------------------------------------------------------------------
- * Function: H5C__assert_flush_dep_nocycle()
- *
- * Purpose: Assert recursively that base_entry is not the same as
- * entry, and perform the same assertion on all of entry's
- * flush dependency parents. This is used to detect cycles
- * created by flush dependencies.
- *
- * Return: void
- *
- * Programmer: Neil Fortner
- * 12/10/12
- *
- *-------------------------------------------------------------------------
- */
- static void H5C__assert_flush_dep_nocycle(const H5C_cache_entry_t *entry,
- const H5C_cache_entry_t *base_entry)
- {
- unsigned u; /* Local index variable */
+/*-------------------------------------------------------------------------
+ * Function: H5C__assert_flush_dep_nocycle()
+ *
+ * Purpose: Assert recursively that base_entry is not the same as
+ * entry, and perform the same assertion on all of entry's
+ * flush dependency parents. This is used to detect cycles
+ * created by flush dependencies.
+ *
+ * Return: void
+ *
+ * Programmer: Neil Fortner
+ * 12/10/12
+ *
+ *-------------------------------------------------------------------------
+ */
+static void
+H5C__assert_flush_dep_nocycle(const H5C_cache_entry_t *entry, const H5C_cache_entry_t *base_entry)
+{
+ unsigned u; /* Local index variable */
- FUNC_ENTER_STATIC_NOERR
+ FUNC_ENTER_STATIC_NOERR
- /* Sanity checks */
- HDassert(entry);
- HDassert(base_entry);
+ /* Sanity checks */
+ HDassert(entry);
+ HDassert(base_entry);
- /* Make sure the entries are not the same */
- HDassert(base_entry != entry);
+ /* Make sure the entries are not the same */
+ HDassert(base_entry != entry);
- /* Iterate over entry's parents (if any) */
- for (u = 0; u < entry->flush_dep_nparents; u++)
- H5C__assert_flush_dep_nocycle(entry->flush_dep_parent[u], base_entry);
+ /* Iterate over entry's parents (if any) */
+ for (u = 0; u < entry->flush_dep_nparents; u++)
+ H5C__assert_flush_dep_nocycle(entry->flush_dep_parent[u], base_entry);
- FUNC_LEAVE_NOAPI_VOID
- } /* H5C__assert_flush_dep_nocycle() */
+ FUNC_LEAVE_NOAPI_VOID
+} /* H5C__assert_flush_dep_nocycle() */
#endif /* NDEBUG */
- /*-------------------------------------------------------------------------
- * Function: H5C__serialize_cache
- *
- * Purpose: Serialize (i.e. construct an on disk image) for all entries
- * in the metadata cache including clean entries.
- *
- * Note that flush dependencies and "flush me last" flags
- * must be observed in the serialization process.
- *
- * Note also that entries may be loaded, flushed, evicted,
- * expunged, relocated, resized, or removed from the cache
- * during this process, just as these actions may occur during
- * a regular flush.
- *
- * However, we are given that the cache will contain no protected
- * entries on entry to this routine (although entries may be
- * briefly protected and then unprotected during the serialize
- * process).
- *
- * The objective of this routine is serialize all entries and
- * to force all entries into their actual locations on disk.
- *
- * The initial need for this routine is to settle all entries
- * in the cache prior to construction of the metadata cache
- * image so that the size of the cache image can be calculated.
- * However, I gather that other uses for the routine are
- * under consideration.
- *
- * Return: Non-negative on success/Negative on failure or if there was
- * a request to flush all items and something was protected.
- *
- * Programmer: John Mainzer
- * 7/22/15
- *
- *-------------------------------------------------------------------------
- */
- herr_t H5C__serialize_cache(H5F_t * f)
- {
+/*-------------------------------------------------------------------------
+ * Function: H5C__serialize_cache
+ *
+ * Purpose: Serialize (i.e. construct an on disk image) for all entries
+ * in the metadata cache including clean entries.
+ *
+ * Note that flush dependencies and "flush me last" flags
+ * must be observed in the serialization process.
+ *
+ * Note also that entries may be loaded, flushed, evicted,
+ * expunged, relocated, resized, or removed from the cache
+ * during this process, just as these actions may occur during
+ * a regular flush.
+ *
+ * However, we are given that the cache will contain no protected
+ * entries on entry to this routine (although entries may be
+ * briefly protected and then unprotected during the serialize
+ * process).
+ *
+ * The objective of this routine is serialize all entries and
+ * to force all entries into their actual locations on disk.
+ *
+ * The initial need for this routine is to settle all entries
+ * in the cache prior to construction of the metadata cache
+ * image so that the size of the cache image can be calculated.
+ * However, I gather that other uses for the routine are
+ * under consideration.
+ *
+ * Return: Non-negative on success/Negative on failure or if there was
+ * a request to flush all items and something was protected.
+ *
+ * Programmer: John Mainzer
+ * 7/22/15
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5C__serialize_cache(H5F_t *f)
+{
#if H5C_DO_SANITY_CHECKS
- int i;
- uint32_t index_len = 0;
- size_t index_size = (size_t)0;
- size_t clean_index_size = (size_t)0;
- size_t dirty_index_size = (size_t)0;
- size_t slist_size = (size_t)0;
- uint32_t slist_len = 0;
+ int i;
+ uint32_t index_len = 0;
+ size_t index_size = (size_t)0;
+ size_t clean_index_size = (size_t)0;
+ size_t dirty_index_size = (size_t)0;
+ size_t slist_size = (size_t)0;
+ uint32_t slist_len = 0;
#endif /* H5C_DO_SANITY_CHECKS */
- H5C_ring_t ring;
- H5C_t * cache_ptr;
- herr_t ret_value = SUCCEED;
+ H5C_ring_t ring;
+ H5C_t * cache_ptr;
+ herr_t ret_value = SUCCEED;
- FUNC_ENTER_PACKAGE
+ FUNC_ENTER_PACKAGE
- /* Sanity checks */
- HDassert(f);
- HDassert(f->shared);
- cache_ptr = f->shared->cache;
- HDassert(cache_ptr);
- HDassert(cache_ptr->magic == H5C__H5C_T_MAGIC);
- HDassert(cache_ptr->slist_ptr);
+ /* Sanity checks */
+ HDassert(f);
+ HDassert(f->shared);
+ cache_ptr = f->shared->cache;
+ HDassert(cache_ptr);
+ HDassert(cache_ptr->magic == H5C__H5C_T_MAGIC);
+ HDassert(cache_ptr->slist_ptr);
#if H5C_DO_SANITY_CHECKS
- HDassert(cache_ptr->index_ring_len[H5C_RING_UNDEFINED] == 0);
- HDassert(cache_ptr->index_ring_size[H5C_RING_UNDEFINED] == (size_t)0);
- HDassert(cache_ptr->clean_index_ring_size[H5C_RING_UNDEFINED] == (size_t)0);
- HDassert(cache_ptr->dirty_index_ring_size[H5C_RING_UNDEFINED] == (size_t)0);
- HDassert(cache_ptr->slist_ring_len[H5C_RING_UNDEFINED] == 0);
- HDassert(cache_ptr->slist_ring_size[H5C_RING_UNDEFINED] == (size_t)0);
+ HDassert(cache_ptr->index_ring_len[H5C_RING_UNDEFINED] == 0);
+ HDassert(cache_ptr->index_ring_size[H5C_RING_UNDEFINED] == (size_t)0);
+ HDassert(cache_ptr->clean_index_ring_size[H5C_RING_UNDEFINED] == (size_t)0);
+ HDassert(cache_ptr->dirty_index_ring_size[H5C_RING_UNDEFINED] == (size_t)0);
+ HDassert(cache_ptr->slist_ring_len[H5C_RING_UNDEFINED] == 0);
+ HDassert(cache_ptr->slist_ring_size[H5C_RING_UNDEFINED] == (size_t)0);
- for (i = H5C_RING_USER; i < H5C_RING_NTYPES; i++) {
- index_len += cache_ptr->index_ring_len[i];
- index_size += cache_ptr->index_ring_size[i];
- clean_index_size += cache_ptr->clean_index_ring_size[i];
- dirty_index_size += cache_ptr->dirty_index_ring_size[i];
+ for (i = H5C_RING_USER; i < H5C_RING_NTYPES; i++) {
+ index_len += cache_ptr->index_ring_len[i];
+ index_size += cache_ptr->index_ring_size[i];
+ clean_index_size += cache_ptr->clean_index_ring_size[i];
+ dirty_index_size += cache_ptr->dirty_index_ring_size[i];
- slist_len += cache_ptr->slist_ring_len[i];
- slist_size += cache_ptr->slist_ring_size[i];
- } /* end for */
+ slist_len += cache_ptr->slist_ring_len[i];
+ slist_size += cache_ptr->slist_ring_size[i];
+ } /* end for */
- HDassert(cache_ptr->index_len == index_len);
- HDassert(cache_ptr->index_size == index_size);
- HDassert(cache_ptr->clean_index_size == clean_index_size);
- HDassert(cache_ptr->dirty_index_size == dirty_index_size);
- HDassert(cache_ptr->slist_len == slist_len);
- HDassert(cache_ptr->slist_size == slist_size);
+ HDassert(cache_ptr->index_len == index_len);
+ HDassert(cache_ptr->index_size == index_size);
+ HDassert(cache_ptr->clean_index_size == clean_index_size);
+ HDassert(cache_ptr->dirty_index_size == dirty_index_size);
+ HDassert(cache_ptr->slist_len == slist_len);
+ HDassert(cache_ptr->slist_size == slist_size);
#endif /* H5C_DO_SANITY_CHECKS */
#if H5C_DO_EXTREME_SANITY_CHECKS
- if ((H5C__validate_protected_entry_list(cache_ptr) < 0) ||
- (H5C__validate_pinned_entry_list(cache_ptr) < 0) || (H5C__validate_lru_list(cache_ptr) < 0))
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "an extreme sanity check failed on entry")
+ if ((H5C__validate_protected_entry_list(cache_ptr) < 0) ||
+ (H5C__validate_pinned_entry_list(cache_ptr) < 0) || (H5C__validate_lru_list(cache_ptr) < 0))
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "an extreme sanity check failed on entry")
#endif /* H5C_DO_EXTREME_SANITY_CHECKS */
#ifndef NDEBUG
- /* if this is a debug build, set the serialization_count field of
- * each entry in the cache to zero before we start the serialization.
- * This allows us to detect the case in which any entry is serialized
- * more than once (a performance issues), and more importantly, the
- * case is which any flush depencency parent is serializes more than
- * once (a correctness issue).
- */
- {
- H5C_cache_entry_t *scan_ptr = NULL;
-
- scan_ptr = cache_ptr->il_head;
- while (scan_ptr != NULL) {
- HDassert(scan_ptr->magic == H5C__H5C_CACHE_ENTRY_T_MAGIC);
- scan_ptr->serialization_count = 0;
- scan_ptr = scan_ptr->il_next;
- } /* end while */
- } /* end block */
-#endif /* NDEBUG */
-
- /* set cache_ptr->serialization_in_progress to TRUE, and back
- * to FALSE at the end of the function. Must maintain this flag
- * to support H5C_get_serialization_in_progress(), which is in
- * turn required to support sanity checking in some cache
- * clients.
- */
- HDassert(!cache_ptr->serialization_in_progress);
- cache_ptr->serialization_in_progress = TRUE;
+ /* if this is a debug build, set the serialization_count field of
+ * each entry in the cache to zero before we start the serialization.
+ * This allows us to detect the case in which any entry is serialized
+ * more than once (a performance issues), and more importantly, the
+ * case is which any flush depencency parent is serializes more than
+ * once (a correctness issue).
+ */
+ {
+ H5C_cache_entry_t *scan_ptr = NULL;
- /* Serialize each ring, starting from the outermost ring and
- * working inward.
- */
- ring = H5C_RING_USER;
- while (ring < H5C_RING_NTYPES) {
- HDassert(cache_ptr->close_warning_received);
- switch (ring) {
- case H5C_RING_USER:
- break;
+ scan_ptr = cache_ptr->il_head;
+ while (scan_ptr != NULL) {
+ HDassert(scan_ptr->magic == H5C__H5C_CACHE_ENTRY_T_MAGIC);
+ scan_ptr->serialization_count = 0;
+ scan_ptr = scan_ptr->il_next;
+ } /* end while */
+ } /* end block */
+#endif /* NDEBUG */
- case H5C_RING_RDFSM:
- /* Settle raw data FSM */
- if (!cache_ptr->rdfsm_settled)
- if (H5MF_settle_raw_data_fsm(f, &cache_ptr->rdfsm_settled) < 0)
- HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "RD FSM settle failed")
- break;
+ /* set cache_ptr->serialization_in_progress to TRUE, and back
+ * to FALSE at the end of the function. Must maintain this flag
+ * to support H5C_get_serialization_in_progress(), which is in
+ * turn required to support sanity checking in some cache
+ * clients.
+ */
+ HDassert(!cache_ptr->serialization_in_progress);
+ cache_ptr->serialization_in_progress = TRUE;
- case H5C_RING_MDFSM:
- /* Settle metadata FSM */
- if (!cache_ptr->mdfsm_settled)
- if (H5MF_settle_meta_data_fsm(f, &cache_ptr->mdfsm_settled) < 0)
- HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "MD FSM settle failed")
- break;
+ /* Serialize each ring, starting from the outermost ring and
+ * working inward.
+ */
+ ring = H5C_RING_USER;
+ while (ring < H5C_RING_NTYPES) {
+ HDassert(cache_ptr->close_warning_received);
+ switch (ring) {
+ case H5C_RING_USER:
+ break;
- case H5C_RING_SBE:
- case H5C_RING_SB:
- break;
+ case H5C_RING_RDFSM:
+ /* Settle raw data FSM */
+ if (!cache_ptr->rdfsm_settled)
+ if (H5MF_settle_raw_data_fsm(f, &cache_ptr->rdfsm_settled) < 0)
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "RD FSM settle failed")
+ break;
- default:
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Unknown ring?!?!")
- break;
- } /* end switch */
+ case H5C_RING_MDFSM:
+ /* Settle metadata FSM */
+ if (!cache_ptr->mdfsm_settled)
+ if (H5MF_settle_meta_data_fsm(f, &cache_ptr->mdfsm_settled) < 0)
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "MD FSM settle failed")
+ break;
- if (H5C__serialize_ring(f, ring) < 0)
- HGOTO_ERROR(H5E_CACHE, H5E_CANTSERIALIZE, FAIL, "serialize ring failed")
+ case H5C_RING_SBE:
+ case H5C_RING_SB:
+ break;
- ring++;
- } /* end while */
+ default:
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Unknown ring?!?!")
+ break;
+ } /* end switch */
+
+ if (H5C__serialize_ring(f, ring) < 0)
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTSERIALIZE, FAIL, "serialize ring failed")
+
+ ring++;
+ } /* end while */
#ifndef NDEBUG
- /* Verify that no entry has been serialized more than once.
- * FD parents with multiple serializations should have been caught
- * elsewhere, so no specific check for them here.
- */
- {
- H5C_cache_entry_t *scan_ptr = NULL;
+ /* Verify that no entry has been serialized more than once.
+ * FD parents with multiple serializations should have been caught
+ * elsewhere, so no specific check for them here.
+ */
+ {
+ H5C_cache_entry_t *scan_ptr = NULL;
- scan_ptr = cache_ptr->il_head;
- while (scan_ptr != NULL) {
- HDassert(scan_ptr->magic == H5C__H5C_CACHE_ENTRY_T_MAGIC);
- HDassert(scan_ptr->serialization_count <= 1);
+ scan_ptr = cache_ptr->il_head;
+ while (scan_ptr != NULL) {
+ HDassert(scan_ptr->magic == H5C__H5C_CACHE_ENTRY_T_MAGIC);
+ HDassert(scan_ptr->serialization_count <= 1);
- scan_ptr = scan_ptr->il_next;
- } /* end while */
- } /* end block */
-#endif /* NDEBUG */
+ scan_ptr = scan_ptr->il_next;
+ } /* end while */
+ } /* end block */
+#endif /* NDEBUG */
done:
- cache_ptr->serialization_in_progress = FALSE;
- FUNC_LEAVE_NOAPI(ret_value)
- } /* H5C__serialize_cache() */
+ cache_ptr->serialization_in_progress = FALSE;
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* H5C__serialize_cache() */
- /*-------------------------------------------------------------------------
- * Function: H5C__serialize_ring
- *
- * Purpose: Serialize the entries contained in the specified cache and
- * ring. All entries in rings outside the specified ring
- * must have been serialized on entry.
- *
- * If the cache contains protected entries in the specified
- * ring, the function will fail, as protected entries cannot
- * be serialized. However all unprotected entries in the
- * target ring should be serialized before the function
- * returns failure.
- *
- * If flush dependencies appear in the target ring, the
- * function makes repeated passes through the index list
- * serializing entries in flush dependency order.
- *
- * All entries outside the H5C_RING_SBE are marked for
- * inclusion in the cache image. Entries in H5C_RING_SBE
- * and below are marked for exclusion from the image.
- *
- * Return: Non-negative on success/Negative on failure or if there was
- * a request to flush all items and something was protected.
- *
- * Programmer: John Mainzer
- * 9/11/15
- *
- *-------------------------------------------------------------------------
- */
- static herr_t H5C__serialize_ring(H5F_t * f, H5C_ring_t ring)
- {
- hbool_t done = FALSE;
- H5C_t * cache_ptr;
- H5C_cache_entry_t *entry_ptr;
- herr_t ret_value = SUCCEED;
+/*-------------------------------------------------------------------------
+ * Function: H5C__serialize_ring
+ *
+ * Purpose: Serialize the entries contained in the specified cache and
+ * ring. All entries in rings outside the specified ring
+ * must have been serialized on entry.
+ *
+ * If the cache contains protected entries in the specified
+ * ring, the function will fail, as protected entries cannot
+ * be serialized. However all unprotected entries in the
+ * target ring should be serialized before the function
+ * returns failure.
+ *
+ * If flush dependencies appear in the target ring, the
+ * function makes repeated passes through the index list
+ * serializing entries in flush dependency order.
+ *
+ * All entries outside the H5C_RING_SBE are marked for
+ * inclusion in the cache image. Entries in H5C_RING_SBE
+ * and below are marked for exclusion from the image.
+ *
+ * Return: Non-negative on success/Negative on failure or if there was
+ * a request to flush all items and something was protected.
+ *
+ * Programmer: John Mainzer
+ * 9/11/15
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5C__serialize_ring(H5F_t *f, H5C_ring_t ring)
+{
+ hbool_t done = FALSE;
+ H5C_t * cache_ptr;
+ H5C_cache_entry_t *entry_ptr;
+ herr_t ret_value = SUCCEED;
- FUNC_ENTER_STATIC
+ FUNC_ENTER_STATIC
- /* Sanity checks */
- HDassert(f);
- HDassert(f->shared);
- cache_ptr = f->shared->cache;
- HDassert(cache_ptr);
- HDassert(cache_ptr->magic == H5C__H5C_T_MAGIC);
- HDassert(ring > H5C_RING_UNDEFINED);
- HDassert(ring < H5C_RING_NTYPES);
-
- HDassert(cache_ptr->serialization_in_progress);
-
- /* The objective here is to serialize all entries in the cache ring
- * in flush dependency order.
- *
- * The basic algorithm is to scan the cache index list looking for
- * unserialized entries that are either not in a flush dependency
- * relationship, or which have no unserialized children. Any such
- * entry is serialized and its flush dependency parents (if any) are
- * informed -- allowing them to decrement their userialized child counts.
- *
- * However, this algorithm is complicated by the ability
- * of client serialization callbacks to perform operations on
- * on the cache which can result in the insertion, deletion,
- * relocation, resize, dirty, flush, eviction, or removal (via the
- * take ownership flag) of entries. Changes in the flush dependency
- * structure are also possible.
- *
- * On the other hand, the algorithm is simplified by the fact that
- * we are serializing, not flushing. Thus, as long as all entries
- * are serialized correctly, it doesn't matter if we have to go back
- * and serialize an entry a second time.
- *
- * These possible actions result in the following modfications to
- * tha basic algorithm:
- *
- * 1) In the event of an entry expunge, eviction or removal, we must
- * restart the scan as it is possible that the next entry in our
- * scan is no longer in the cache. Were we to examine this entry,
- * we would be accessing deallocated memory.
- *
- * 2) A resize, dirty, or insertion of an entry may result in the
- * the increment of a flush dependency parent's dirty and/or
- * unserialized child count. In the context of serializing the
- * the cache, this is a non-issue, as even if we have already
- * serialized the parent, it will be marked dirty and its image
- * marked out of date if appropriate when the child is serialized.
- *
- * However, this is a major issue for a flush, as were this to happen
- * in a flush, it would violate the invariant that the flush dependency
- * feature is intended to enforce. As the metadata cache has no
- * control over the behavior of cache clients, it has no way of
- * preventing this behaviour. However, it should detect it if at all
- * possible.
- *
- * Do this by maintaining a count of the number of times each entry is
- * serialized during a cache serialization. If any flush dependency
- * parent is serialized more than once, throw an assertion failure.
- *
- * 3) An entry relocation will typically change the location of the
- * entry in the index list. This shouldn't cause problems as we
- * will scan the index list until we make a complete pass without
- * finding anything to serialize -- making relocations of either
- * the current or next entries irrelevant.
- *
- * Note that since a relocation may result in our skipping part of
- * the index list, we must always do at least one more pass through
- * the index list after an entry relocation.
- *
- * 4) Changes in the flush dependency structure are possible on
- * entry insertion, load, expunge, evict, or remove. Destruction
- * of a flush dependency has no effect, as it can only relax the
- * flush dependencies. Creation of a flush dependency can create
- * an unserialized child of a flush dependency parent where all
- * flush dependency children were previously serialized. Should
- * this child dirty the flush dependency parent when it is serialized,
- * the parent will be re-serialized.
- *
- * Per the discussion of 2) above, this is a non issue for cache
- * serialization, and a major problem for cache flush. Using the
- * same detection mechanism, throw an assertion failure if this
- * condition appears.
- *
- * Observe that either eviction or removal of entries as a result of
- * a serialization is not a problem as long as the flush depencency
- * tree does not change beyond the removal of a leaf.
+ /* Sanity checks */
+ HDassert(f);
+ HDassert(f->shared);
+ cache_ptr = f->shared->cache;
+ HDassert(cache_ptr);
+ HDassert(cache_ptr->magic == H5C__H5C_T_MAGIC);
+ HDassert(ring > H5C_RING_UNDEFINED);
+ HDassert(ring < H5C_RING_NTYPES);
+
+ HDassert(cache_ptr->serialization_in_progress);
+
+ /* The objective here is to serialize all entries in the cache ring
+ * in flush dependency order.
+ *
+ * The basic algorithm is to scan the cache index list looking for
+ * unserialized entries that are either not in a flush dependency
+ * relationship, or which have no unserialized children. Any such
+ * entry is serialized and its flush dependency parents (if any) are
+ * informed -- allowing them to decrement their userialized child counts.
+ *
+ * However, this algorithm is complicated by the ability
+ * of client serialization callbacks to perform operations on
+ * on the cache which can result in the insertion, deletion,
+ * relocation, resize, dirty, flush, eviction, or removal (via the
+ * take ownership flag) of entries. Changes in the flush dependency
+ * structure are also possible.
+ *
+ * On the other hand, the algorithm is simplified by the fact that
+ * we are serializing, not flushing. Thus, as long as all entries
+ * are serialized correctly, it doesn't matter if we have to go back
+ * and serialize an entry a second time.
+ *
+ * These possible actions result in the following modfications to
+ * tha basic algorithm:
+ *
+ * 1) In the event of an entry expunge, eviction or removal, we must
+ * restart the scan as it is possible that the next entry in our
+ * scan is no longer in the cache. Were we to examine this entry,
+ * we would be accessing deallocated memory.
+ *
+ * 2) A resize, dirty, or insertion of an entry may result in the
+ * the increment of a flush dependency parent's dirty and/or
+ * unserialized child count. In the context of serializing the
+ * the cache, this is a non-issue, as even if we have already
+ * serialized the parent, it will be marked dirty and its image
+ * marked out of date if appropriate when the child is serialized.
+ *
+ * However, this is a major issue for a flush, as were this to happen
+ * in a flush, it would violate the invariant that the flush dependency
+ * feature is intended to enforce. As the metadata cache has no
+ * control over the behavior of cache clients, it has no way of
+ * preventing this behaviour. However, it should detect it if at all
+ * possible.
+ *
+ * Do this by maintaining a count of the number of times each entry is
+ * serialized during a cache serialization. If any flush dependency
+ * parent is serialized more than once, throw an assertion failure.
+ *
+ * 3) An entry relocation will typically change the location of the
+ * entry in the index list. This shouldn't cause problems as we
+ * will scan the index list until we make a complete pass without
+ * finding anything to serialize -- making relocations of either
+ * the current or next entries irrelevant.
+ *
+ * Note that since a relocation may result in our skipping part of
+ * the index list, we must always do at least one more pass through
+ * the index list after an entry relocation.
+ *
+ * 4) Changes in the flush dependency structure are possible on
+ * entry insertion, load, expunge, evict, or remove. Destruction
+ * of a flush dependency has no effect, as it can only relax the
+ * flush dependencies. Creation of a flush dependency can create
+ * an unserialized child of a flush dependency parent where all
+ * flush dependency children were previously serialized. Should
+ * this child dirty the flush dependency parent when it is serialized,
+ * the parent will be re-serialized.
+ *
+ * Per the discussion of 2) above, this is a non issue for cache
+ * serialization, and a major problem for cache flush. Using the
+ * same detection mechanism, throw an assertion failure if this
+ * condition appears.
+ *
+ * Observe that either eviction or removal of entries as a result of
+ * a serialization is not a problem as long as the flush depencency
+ * tree does not change beyond the removal of a leaf.
+ */
+ while (!done) {
+ /* Reset the counters so that we can detect insertions, loads,
+ * moves, and flush dependency height changes caused by the pre_serialize
+ * and serialize callbacks.
*/
- while (!done) {
- /* Reset the counters so that we can detect insertions, loads,
- * moves, and flush dependency height changes caused by the pre_serialize
- * and serialize callbacks.
+ cache_ptr->entries_loaded_counter = 0;
+ cache_ptr->entries_inserted_counter = 0;
+ cache_ptr->entries_relocated_counter = 0;
+
+ done = TRUE; /* set to FALSE if any activity in inner loop */
+ entry_ptr = cache_ptr->il_head;
+ while (entry_ptr != NULL) {
+ HDassert(entry_ptr->magic == H5C__H5C_CACHE_ENTRY_T_MAGIC);
+
+ /* Verify that either the entry is already serialized, or
+ * that it is assigned to either the target or an inner
+ * ring.
*/
- cache_ptr->entries_loaded_counter = 0;
- cache_ptr->entries_inserted_counter = 0;
- cache_ptr->entries_relocated_counter = 0;
-
- done = TRUE; /* set to FALSE if any activity in inner loop */
- entry_ptr = cache_ptr->il_head;
- while (entry_ptr != NULL) {
- HDassert(entry_ptr->magic == H5C__H5C_CACHE_ENTRY_T_MAGIC);
-
- /* Verify that either the entry is already serialized, or
- * that it is assigned to either the target or an inner
- * ring.
- */
- HDassert((entry_ptr->ring >= ring) || (entry_ptr->image_up_to_date));
+ HDassert((entry_ptr->ring >= ring) || (entry_ptr->image_up_to_date));
- /* Skip flush me last entries or inner ring entries */
- if (!entry_ptr->flush_me_last && entry_ptr->ring == ring) {
+ /* Skip flush me last entries or inner ring entries */
+ if (!entry_ptr->flush_me_last && entry_ptr->ring == ring) {
- /* if we encounter an unserialized entry in the current
- * ring that is not marked flush me last, we are not done.
- */
- if (!entry_ptr->image_up_to_date)
- done = FALSE;
+ /* if we encounter an unserialized entry in the current
+ * ring that is not marked flush me last, we are not done.
+ */
+ if (!entry_ptr->image_up_to_date)
+ done = FALSE;
- /* Serialize the entry if its image is not up to date
- * and it has no unserialized flush dependency children.
- */
- if (!entry_ptr->image_up_to_date && entry_ptr->flush_dep_nunser_children == 0) {
- HDassert(entry_ptr->serialization_count == 0);
+ /* Serialize the entry if its image is not up to date
+ * and it has no unserialized flush dependency children.
+ */
+ if (!entry_ptr->image_up_to_date && entry_ptr->flush_dep_nunser_children == 0) {
+ HDassert(entry_ptr->serialization_count == 0);
- /* Serialize the entry */
- if (H5C__serialize_single_entry(f, cache_ptr, entry_ptr) < 0)
- HGOTO_ERROR(H5E_CACHE, H5E_CANTSERIALIZE, FAIL, "entry serialization failed")
+ /* Serialize the entry */
+ if (H5C__serialize_single_entry(f, cache_ptr, entry_ptr) < 0)
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTSERIALIZE, FAIL, "entry serialization failed")
- HDassert(entry_ptr->flush_dep_nunser_children == 0);
- HDassert(entry_ptr->serialization_count == 0);
+ HDassert(entry_ptr->flush_dep_nunser_children == 0);
+ HDassert(entry_ptr->serialization_count == 0);
#ifndef NDEBUG
- /* Increment serialization counter (to detect multiple serializations) */
- entry_ptr->serialization_count++;
-#endif /* NDEBUG */
- } /* end if */
- } /* end if */
+ /* Increment serialization counter (to detect multiple serializations) */
+ entry_ptr->serialization_count++;
+#endif /* NDEBUG */
+ } /* end if */
+ } /* end if */
- /* Check for the cache being perturbed during the entry serialize */
- if ((cache_ptr->entries_loaded_counter > 0) || (cache_ptr->entries_inserted_counter > 0) ||
- (cache_ptr->entries_relocated_counter > 0)) {
+ /* Check for the cache being perturbed during the entry serialize */
+ if ((cache_ptr->entries_loaded_counter > 0) || (cache_ptr->entries_inserted_counter > 0) ||
+ (cache_ptr->entries_relocated_counter > 0)) {
#if H5C_COLLECT_CACHE_STATS
- H5C__UPDATE_STATS_FOR_INDEX_SCAN_RESTART(cache_ptr);
+ H5C__UPDATE_STATS_FOR_INDEX_SCAN_RESTART(cache_ptr);
#endif /* H5C_COLLECT_CACHE_STATS */
- /* Reset the counters */
- cache_ptr->entries_loaded_counter = 0;
- cache_ptr->entries_inserted_counter = 0;
- cache_ptr->entries_relocated_counter = 0;
+ /* Reset the counters */
+ cache_ptr->entries_loaded_counter = 0;
+ cache_ptr->entries_inserted_counter = 0;
+ cache_ptr->entries_relocated_counter = 0;
- /* Restart scan */
- entry_ptr = cache_ptr->il_head;
- } /* end if */
- else
- /* Advance to next entry */
- entry_ptr = entry_ptr->il_next;
- } /* while ( entry_ptr != NULL ) */
- } /* while ( ! done ) */
+ /* Restart scan */
+ entry_ptr = cache_ptr->il_head;
+ } /* end if */
+ else
+ /* Advance to next entry */
+ entry_ptr = entry_ptr->il_next;
+ } /* while ( entry_ptr != NULL ) */
+ } /* while ( ! done ) */
- /* Reset the counters so that we can detect insertions, loads,
- * moves, and flush dependency height changes caused by the pre_serialize
- * and serialize callbacks.
- */
- cache_ptr->entries_loaded_counter = 0;
- cache_ptr->entries_inserted_counter = 0;
- cache_ptr->entries_relocated_counter = 0;
+ /* Reset the counters so that we can detect insertions, loads,
+ * moves, and flush dependency height changes caused by the pre_serialize
+ * and serialize callbacks.
+ */
+ cache_ptr->entries_loaded_counter = 0;
+ cache_ptr->entries_inserted_counter = 0;
+ cache_ptr->entries_relocated_counter = 0;
+
+ /* At this point, all entries not marked "flush me last" and in
+ * the current ring or outside it should be serialized and have up
+ * to date images. Scan the index list again to serialize the
+ * "flush me last" entries (if they are in the current ring) and to
+ * verify that all other entries have up to date images.
+ */
+ entry_ptr = cache_ptr->il_head;
+ while (entry_ptr != NULL) {
+ HDassert(entry_ptr->magic == H5C__H5C_CACHE_ENTRY_T_MAGIC);
+ HDassert(entry_ptr->ring > H5C_RING_UNDEFINED);
+ HDassert(entry_ptr->ring < H5C_RING_NTYPES);
+ HDassert((entry_ptr->ring >= ring) || (entry_ptr->image_up_to_date));
+
+ if (entry_ptr->ring == ring) {
+ if (entry_ptr->flush_me_last) {
+ if (!entry_ptr->image_up_to_date) {
+ HDassert(entry_ptr->serialization_count == 0);
+ HDassert(entry_ptr->flush_dep_nunser_children == 0);
- /* At this point, all entries not marked "flush me last" and in
- * the current ring or outside it should be serialized and have up
- * to date images. Scan the index list again to serialize the
- * "flush me last" entries (if they are in the current ring) and to
- * verify that all other entries have up to date images.
- */
- entry_ptr = cache_ptr->il_head;
- while (entry_ptr != NULL) {
- HDassert(entry_ptr->magic == H5C__H5C_CACHE_ENTRY_T_MAGIC);
- HDassert(entry_ptr->ring > H5C_RING_UNDEFINED);
- HDassert(entry_ptr->ring < H5C_RING_NTYPES);
- HDassert((entry_ptr->ring >= ring) || (entry_ptr->image_up_to_date));
+ /* Serialize the entry */
+ if (H5C__serialize_single_entry(f, cache_ptr, entry_ptr) < 0)
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTSERIALIZE, FAIL, "entry serialization failed")
+
+ /* Check for the cache changing */
+ if ((cache_ptr->entries_loaded_counter > 0) ||
+ (cache_ptr->entries_inserted_counter > 0) ||
+ (cache_ptr->entries_relocated_counter > 0))
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL,
+ "flush_me_last entry serialization triggered restart")
- if (entry_ptr->ring == ring) {
- if (entry_ptr->flush_me_last) {
- if (!entry_ptr->image_up_to_date) {
- HDassert(entry_ptr->serialization_count == 0);
- HDassert(entry_ptr->flush_dep_nunser_children == 0);
-
- /* Serialize the entry */
- if (H5C__serialize_single_entry(f, cache_ptr, entry_ptr) < 0)
- HGOTO_ERROR(H5E_CACHE, H5E_CANTSERIALIZE, FAIL, "entry serialization failed")
-
- /* Check for the cache changing */
- if ((cache_ptr->entries_loaded_counter > 0) ||
- (cache_ptr->entries_inserted_counter > 0) ||
- (cache_ptr->entries_relocated_counter > 0))
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL,
- "flush_me_last entry serialization triggered restart")
-
- HDassert(entry_ptr->flush_dep_nunser_children == 0);
- HDassert(entry_ptr->serialization_count == 0);
-#ifndef NDEBUG
- /* Increment serialization counter (to detect multiple serializations) */
- entry_ptr->serialization_count++;
-#endif /* NDEBUG */
- } /* end if */
- } /* end if */
- else {
- HDassert(entry_ptr->image_up_to_date);
- HDassert(entry_ptr->serialization_count <= 1);
HDassert(entry_ptr->flush_dep_nunser_children == 0);
- } /* end else */
- } /* if ( entry_ptr->ring == ring ) */
+ HDassert(entry_ptr->serialization_count == 0);
+#ifndef NDEBUG
+ /* Increment serialization counter (to detect multiple serializations) */
+ entry_ptr->serialization_count++;
+#endif /* NDEBUG */
+ } /* end if */
+ } /* end if */
+ else {
+ HDassert(entry_ptr->image_up_to_date);
+ HDassert(entry_ptr->serialization_count <= 1);
+ HDassert(entry_ptr->flush_dep_nunser_children == 0);
+ } /* end else */
+ } /* if ( entry_ptr->ring == ring ) */
- entry_ptr = entry_ptr->il_next;
- } /* while ( entry_ptr != NULL ) */
+ entry_ptr = entry_ptr->il_next;
+ } /* while ( entry_ptr != NULL ) */
done:
- HDassert(cache_ptr->serialization_in_progress);
- FUNC_LEAVE_NOAPI(ret_value)
- } /* H5C__serialize_ring() */
+ HDassert(cache_ptr->serialization_in_progress);
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* H5C__serialize_ring() */
- /*-------------------------------------------------------------------------
- * Function: H5C__serialize_single_entry
- *
- * Purpose: Serialize the cache entry pointed to by the entry_ptr
- * parameter.
- *
- * Return: Non-negative on success/Negative on failure
- *
- * Programmer: John Mainzer, 7/24/15
- *
- *-------------------------------------------------------------------------
- */
- static herr_t H5C__serialize_single_entry(H5F_t * f, H5C_t * cache_ptr, H5C_cache_entry_t * entry_ptr)
- {
- herr_t ret_value = SUCCEED; /* Return value */
+/*-------------------------------------------------------------------------
+ * Function: H5C__serialize_single_entry
+ *
+ * Purpose: Serialize the cache entry pointed to by the entry_ptr
+ * parameter.
+ *
+ * Return: Non-negative on success/Negative on failure
+ *
+ * Programmer: John Mainzer, 7/24/15
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5C__serialize_single_entry(H5F_t *f, H5C_t *cache_ptr, H5C_cache_entry_t *entry_ptr)
+{
+ herr_t ret_value = SUCCEED; /* Return value */
- FUNC_ENTER_STATIC
+ FUNC_ENTER_STATIC
- /* Sanity checks */
- HDassert(f);
- HDassert(cache_ptr);
- HDassert(cache_ptr->magic == H5C__H5C_T_MAGIC);
- HDassert(entry_ptr);
- HDassert(entry_ptr->magic == H5C__H5C_CACHE_ENTRY_T_MAGIC);
- HDassert(!entry_ptr->prefetched);
- HDassert(!entry_ptr->image_up_to_date);
- HDassert(entry_ptr->is_dirty);
- HDassert(!entry_ptr->is_protected);
- HDassert(!entry_ptr->flush_in_progress);
- HDassert(entry_ptr->type);
+ /* Sanity checks */
+ HDassert(f);
+ HDassert(cache_ptr);
+ HDassert(cache_ptr->magic == H5C__H5C_T_MAGIC);
+ HDassert(entry_ptr);
+ HDassert(entry_ptr->magic == H5C__H5C_CACHE_ENTRY_T_MAGIC);
+ HDassert(!entry_ptr->prefetched);
+ HDassert(!entry_ptr->image_up_to_date);
+ HDassert(entry_ptr->is_dirty);
+ HDassert(!entry_ptr->is_protected);
+ HDassert(!entry_ptr->flush_in_progress);
+ HDassert(entry_ptr->type);
- /* Set entry_ptr->flush_in_progress to TRUE so the the target entry
- * will not be evicted out from under us. Must set it back to FALSE
- * when we are done.
- */
- entry_ptr->flush_in_progress = TRUE;
+ /* Set entry_ptr->flush_in_progress to TRUE so the the target entry
+ * will not be evicted out from under us. Must set it back to FALSE
+ * when we are done.
+ */
+ entry_ptr->flush_in_progress = TRUE;
- /* Allocate buffer for the entry image if required. */
- if (NULL == entry_ptr->image_ptr) {
- HDassert(entry_ptr->size > 0);
- if (NULL == (entry_ptr->image_ptr = H5MM_malloc(entry_ptr->size + H5C_IMAGE_EXTRA_SPACE)))
- HGOTO_ERROR(H5E_CACHE, H5E_CANTALLOC, FAIL,
- "memory allocation failed for on disk image buffer")
+ /* Allocate buffer for the entry image if required. */
+ if (NULL == entry_ptr->image_ptr) {
+ HDassert(entry_ptr->size > 0);
+ if (NULL == (entry_ptr->image_ptr = H5MM_malloc(entry_ptr->size + H5C_IMAGE_EXTRA_SPACE)))
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTALLOC, FAIL, "memory allocation failed for on disk image buffer")
#if H5C_DO_MEMORY_SANITY_CHECKS
- H5MM_memcpy(((uint8_t *)entry_ptr->image_ptr) + image_size, H5C_IMAGE_SANITY_VALUE,
- H5C_IMAGE_EXTRA_SPACE);
-#endif /* H5C_DO_MEMORY_SANITY_CHECKS */
- } /* end if */
+ H5MM_memcpy(((uint8_t *)entry_ptr->image_ptr) + image_size, H5C_IMAGE_SANITY_VALUE,
+ H5C_IMAGE_EXTRA_SPACE);
+#endif /* H5C_DO_MEMORY_SANITY_CHECKS */
+ } /* end if */
- /* Generate image for entry */
- if (H5C__generate_image(f, cache_ptr, entry_ptr) < 0)
- HGOTO_ERROR(H5E_CACHE, H5E_CANTSERIALIZE, FAIL, "Can't generate image for cache entry")
+ /* Generate image for entry */
+ if (H5C__generate_image(f, cache_ptr, entry_ptr) < 0)
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTSERIALIZE, FAIL, "Can't generate image for cache entry")
- /* Reset the flush_in progress flag */
- entry_ptr->flush_in_progress = FALSE;
+ /* Reset the flush_in progress flag */
+ entry_ptr->flush_in_progress = FALSE;
done:
- HDassert((ret_value != SUCCEED) || (!entry_ptr->flush_in_progress));
- HDassert((ret_value != SUCCEED) || (entry_ptr->image_up_to_date));
- FUNC_LEAVE_NOAPI(ret_value)
- } /* H5C__serialize_single_entry() */
+ HDassert((ret_value != SUCCEED) || (!entry_ptr->flush_in_progress));
+ HDassert((ret_value != SUCCEED) || (entry_ptr->image_up_to_date));
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* H5C__serialize_single_entry() */
- /*-------------------------------------------------------------------------
- * Function: H5C__generate_image
- *
- * Purpose: Serialize an entry and generate its image.
- *
- * Note: This may cause the entry to be re-sized and/or moved in
- * the cache.
- *
- * As we will not update the metadata cache's data structures
- * until we we finish the write, we must touch up these
- * data structures for size and location changes even if we
- * are about to delete the entry from the cache (i.e. on a
- * flush destroy).
- *
- * Return: Non-negative on success/Negative on failure
- *
- * Programmer: Mohamad Chaarawi
- * 2/10/16
- *
- *-------------------------------------------------------------------------
- */
- static herr_t H5C__generate_image(H5F_t * f, H5C_t * cache_ptr, H5C_cache_entry_t * entry_ptr)
- {
- haddr_t new_addr = HADDR_UNDEF;
- haddr_t old_addr = HADDR_UNDEF;
- size_t new_len = 0;
- unsigned serialize_flags = H5C__SERIALIZE_NO_FLAGS_SET;
- herr_t ret_value = SUCCEED;
+/*-------------------------------------------------------------------------
+ * Function: H5C__generate_image
+ *
+ * Purpose: Serialize an entry and generate its image.
+ *
+ * Note: This may cause the entry to be re-sized and/or moved in
+ * the cache.
+ *
+ * As we will not update the metadata cache's data structures
+ * until we we finish the write, we must touch up these
+ * data structures for size and location changes even if we
+ * are about to delete the entry from the cache (i.e. on a
+ * flush destroy).
+ *
+ * Return: Non-negative on success/Negative on failure
+ *
+ * Programmer: Mohamad Chaarawi
+ * 2/10/16
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5C__generate_image(H5F_t *f, H5C_t *cache_ptr, H5C_cache_entry_t *entry_ptr)
+{
+ haddr_t new_addr = HADDR_UNDEF;
+ haddr_t old_addr = HADDR_UNDEF;
+ size_t new_len = 0;
+ unsigned serialize_flags = H5C__SERIALIZE_NO_FLAGS_SET;
+ herr_t ret_value = SUCCEED;
- FUNC_ENTER_STATIC
+ FUNC_ENTER_STATIC
- /* Sanity check */
- HDassert(f);
- HDassert(cache_ptr);
- HDassert(cache_ptr->magic == H5C__H5C_T_MAGIC);
- HDassert(entry_ptr);
- HDassert(entry_ptr->magic == H5C__H5C_CACHE_ENTRY_T_MAGIC);
- HDassert(!entry_ptr->image_up_to_date);
- HDassert(entry_ptr->is_dirty);
- HDassert(!entry_ptr->is_protected);
- HDassert(entry_ptr->type);
+ /* Sanity check */
+ HDassert(f);
+ HDassert(cache_ptr);
+ HDassert(cache_ptr->magic == H5C__H5C_T_MAGIC);
+ HDassert(entry_ptr);
+ HDassert(entry_ptr->magic == H5C__H5C_CACHE_ENTRY_T_MAGIC);
+ HDassert(!entry_ptr->image_up_to_date);
+ HDassert(entry_ptr->is_dirty);
+ HDassert(!entry_ptr->is_protected);
+ HDassert(entry_ptr->type);
- /* make note of the entry's current address */
- old_addr = entry_ptr->addr;
+ /* make note of the entry's current address */
+ old_addr = entry_ptr->addr;
- /* Call client's pre-serialize callback, if there's one */
- if (entry_ptr->type->pre_serialize &&
- (entry_ptr->type->pre_serialize)(f, (void *)entry_ptr, entry_ptr->addr, entry_ptr->size,
- &new_addr, &new_len, &serialize_flags) < 0)
- HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "unable to pre-serialize entry")
+ /* Call client's pre-serialize callback, if there's one */
+ if (entry_ptr->type->pre_serialize &&
+ (entry_ptr->type->pre_serialize)(f, (void *)entry_ptr, entry_ptr->addr, entry_ptr->size, &new_addr,
+ &new_len, &serialize_flags) < 0)
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "unable to pre-serialize entry")
- /* Check for any flags set in the pre-serialize callback */
- if (serialize_flags != H5C__SERIALIZE_NO_FLAGS_SET) {
- /* Check for unexpected flags from serialize callback */
- if (serialize_flags & ~(H5C__SERIALIZE_RESIZED_FLAG | H5C__SERIALIZE_MOVED_FLAG))
- HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "unknown serialize flag(s)")
+ /* Check for any flags set in the pre-serialize callback */
+ if (serialize_flags != H5C__SERIALIZE_NO_FLAGS_SET) {
+ /* Check for unexpected flags from serialize callback */
+ if (serialize_flags & ~(H5C__SERIALIZE_RESIZED_FLAG | H5C__SERIALIZE_MOVED_FLAG))
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "unknown serialize flag(s)")
#ifdef H5_HAVE_PARALLEL
- /* In the parallel case, resizes and moves in
- * the serialize operation can cause problems.
- * If they occur, scream and die.
- *
- * At present, in the parallel case, the aux_ptr
- * will only be set if there is more than one
- * process. Thus we can use this to detect
- * the parallel case.
- *
- * This works for now, but if we start using the
- * aux_ptr for other purposes, we will have to
- * change this test accordingly.
- *
- * NB: While this test detects entryies that attempt
- * to resize or move themselves during a flush
- * in the parallel case, it will not detect an
- * entry that dirties, resizes, and/or moves
- * other entries during its flush.
- *
- * From what Quincey tells me, this test is
- * sufficient for now, as any flush routine that
- * does the latter will also do the former.
- *
- * If that ceases to be the case, further
- * tests will be necessary.
- */
- if (cache_ptr->aux_ptr != NULL)
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "resize/move in serialize occurred in parallel case")
+ /* In the parallel case, resizes and moves in
+ * the serialize operation can cause problems.
+ * If they occur, scream and die.
+ *
+ * At present, in the parallel case, the aux_ptr
+ * will only be set if there is more than one
+ * process. Thus we can use this to detect
+ * the parallel case.
+ *
+ * This works for now, but if we start using the
+ * aux_ptr for other purposes, we will have to
+ * change this test accordingly.
+ *
+ * NB: While this test detects entryies that attempt
+ * to resize or move themselves during a flush
+ * in the parallel case, it will not detect an
+ * entry that dirties, resizes, and/or moves
+ * other entries during its flush.
+ *
+ * From what Quincey tells me, this test is
+ * sufficient for now, as any flush routine that
+ * does the latter will also do the former.
+ *
+ * If that ceases to be the case, further
+ * tests will be necessary.
+ */
+ if (cache_ptr->aux_ptr != NULL)
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "resize/move in serialize occurred in parallel case")
#endif
- /* If required, resize the buffer and update the entry and the cache
- * data structures */
- if (serialize_flags & H5C__SERIALIZE_RESIZED_FLAG) {
- /* Sanity check */
- HDassert(new_len > 0);
+ /* If required, resize the buffer and update the entry and the cache
+ * data structures */
+ if (serialize_flags & H5C__SERIALIZE_RESIZED_FLAG) {
+ /* Sanity check */
+ HDassert(new_len > 0);
- /* Allocate a new image buffer */
- if (NULL == (entry_ptr->image_ptr =
- H5MM_realloc(entry_ptr->image_ptr, new_len + H5C_IMAGE_EXTRA_SPACE)))
- HGOTO_ERROR(H5E_CACHE, H5E_CANTALLOC, FAIL,
- "memory allocation failed for on disk image buffer")
+ /* Allocate a new image buffer */
+ if (NULL ==
+ (entry_ptr->image_ptr = H5MM_realloc(entry_ptr->image_ptr, new_len + H5C_IMAGE_EXTRA_SPACE)))
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTALLOC, FAIL,
+ "memory allocation failed for on disk image buffer")
#if H5C_DO_MEMORY_SANITY_CHECKS
- H5MM_memcpy(((uint8_t *)entry_ptr->image_ptr) + new_len, H5C_IMAGE_SANITY_VALUE,
- H5C_IMAGE_EXTRA_SPACE);
+ H5MM_memcpy(((uint8_t *)entry_ptr->image_ptr) + new_len, H5C_IMAGE_SANITY_VALUE,
+ H5C_IMAGE_EXTRA_SPACE);
#endif /* H5C_DO_MEMORY_SANITY_CHECKS */
- /* Update statistics for resizing the entry */
- H5C__UPDATE_STATS_FOR_ENTRY_SIZE_CHANGE(cache_ptr, entry_ptr, new_len);
+ /* Update statistics for resizing the entry */
+ H5C__UPDATE_STATS_FOR_ENTRY_SIZE_CHANGE(cache_ptr, entry_ptr, new_len);
- /* Update the hash table for the size change */
- H5C__UPDATE_INDEX_FOR_SIZE_CHANGE(cache_ptr, entry_ptr->size, new_len, entry_ptr,
- !(entry_ptr->is_dirty));
+ /* Update the hash table for the size change */
+ H5C__UPDATE_INDEX_FOR_SIZE_CHANGE(cache_ptr, entry_ptr->size, new_len, entry_ptr,
+ !(entry_ptr->is_dirty));
- /* The entry can't be protected since we are in the process of
- * flushing it. Thus we must update the replacement policy data
- * structures for the size change. The macro deals with the pinned
- * case.
- */
- H5C__UPDATE_RP_FOR_SIZE_CHANGE(cache_ptr, entry_ptr, new_len);
+ /* The entry can't be protected since we are in the process of
+ * flushing it. Thus we must update the replacement policy data
+ * structures for the size change. The macro deals with the pinned
+ * case.
+ */
+ H5C__UPDATE_RP_FOR_SIZE_CHANGE(cache_ptr, entry_ptr, new_len);
- /* As we haven't updated the cache data structures for
- * for the flush or flush destroy yet, the entry should
- * be in the slist. Thus update it for the size change.
- */
- HDassert(entry_ptr->is_dirty);
- HDassert(entry_ptr->in_slist);
- H5C__UPDATE_SLIST_FOR_SIZE_CHANGE(cache_ptr, entry_ptr->size, new_len);
+ /* As we haven't updated the cache data structures for
+ * for the flush or flush destroy yet, the entry should
+ * be in the slist. Thus update it for the size change.
+ */
+ HDassert(entry_ptr->is_dirty);
+ HDassert(entry_ptr->in_slist);
+ H5C__UPDATE_SLIST_FOR_SIZE_CHANGE(cache_ptr, entry_ptr->size, new_len);
- /* Finally, update the entry for its new size */
- entry_ptr->size = new_len;
- } /* end if */
+ /* Finally, update the entry for its new size */
+ entry_ptr->size = new_len;
+ } /* end if */
- /* If required, udate the entry and the cache data structures
- * for a move
- */
- if (serialize_flags & H5C__SERIALIZE_MOVED_FLAG) {
- /* Update stats and entries relocated counter */
- H5C__UPDATE_STATS_FOR_MOVE(cache_ptr, entry_ptr)
-
- /* We must update cache data structures for the change in address */
- if (entry_ptr->addr == old_addr) {
- /* Delete the entry from the hash table and the slist */
- H5C__DELETE_FROM_INDEX(cache_ptr, entry_ptr, FAIL);
- H5C__REMOVE_ENTRY_FROM_SLIST(cache_ptr, entry_ptr, FALSE);
-
- /* Update the entry for its new address */
- entry_ptr->addr = new_addr;
-
- /* And then reinsert in the index and slist */
- H5C__INSERT_IN_INDEX(cache_ptr, entry_ptr, FAIL);
- H5C__INSERT_ENTRY_IN_SLIST(cache_ptr, entry_ptr, FAIL);
- } /* end if */
- else /* move is already done for us -- just do sanity checks */
- HDassert(entry_ptr->addr == new_addr);
- } /* end if */
- } /* end if(serialize_flags != H5C__SERIALIZE_NO_FLAGS_SET) */
+ /* If required, udate the entry and the cache data structures
+ * for a move
+ */
+ if (serialize_flags & H5C__SERIALIZE_MOVED_FLAG) {
+ /* Update stats and entries relocated counter */
+ H5C__UPDATE_STATS_FOR_MOVE(cache_ptr, entry_ptr)
+
+ /* We must update cache data structures for the change in address */
+ if (entry_ptr->addr == old_addr) {
+ /* Delete the entry from the hash table and the slist */
+ H5C__DELETE_FROM_INDEX(cache_ptr, entry_ptr, FAIL);
+ H5C__REMOVE_ENTRY_FROM_SLIST(cache_ptr, entry_ptr, FALSE);
+
+ /* Update the entry for its new address */
+ entry_ptr->addr = new_addr;
+
+ /* And then reinsert in the index and slist */
+ H5C__INSERT_IN_INDEX(cache_ptr, entry_ptr, FAIL);
+ H5C__INSERT_ENTRY_IN_SLIST(cache_ptr, entry_ptr, FAIL);
+ } /* end if */
+ else /* move is already done for us -- just do sanity checks */
+ HDassert(entry_ptr->addr == new_addr);
+ } /* end if */
+ } /* end if(serialize_flags != H5C__SERIALIZE_NO_FLAGS_SET) */
- /* Serialize object into buffer */
- if (entry_ptr->type->serialize(f, entry_ptr->image_ptr, entry_ptr->size, (void *)entry_ptr) < 0)
- HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "unable to serialize entry")
+ /* Serialize object into buffer */
+ if (entry_ptr->type->serialize(f, entry_ptr->image_ptr, entry_ptr->size, (void *)entry_ptr) < 0)
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "unable to serialize entry")
#if H5C_DO_MEMORY_SANITY_CHECKS
- HDassert(0 == HDmemcmp(((uint8_t *)entry_ptr->image_ptr) + entry_ptr->size, H5C_IMAGE_SANITY_VALUE,
- H5C_IMAGE_EXTRA_SPACE));
+ HDassert(0 == HDmemcmp(((uint8_t *)entry_ptr->image_ptr) + entry_ptr->size, H5C_IMAGE_SANITY_VALUE,
+ H5C_IMAGE_EXTRA_SPACE));
#endif /* H5C_DO_MEMORY_SANITY_CHECKS */
- entry_ptr->image_up_to_date = TRUE;
+ entry_ptr->image_up_to_date = TRUE;
- /* Propagate the fact that the entry is serialized up the
- * flush dependency chain if appropriate. Since the image must
- * have been out of date for this function to have been called
- * (see assertion on entry), no need to check that -- only check
- * for flush dependency parents.
- */
- HDassert(entry_ptr->flush_dep_nunser_children == 0);
- if (entry_ptr->flush_dep_nparents > 0)
- if (H5C__mark_flush_dep_serialized(entry_ptr) < 0)
- HGOTO_ERROR(H5E_CACHE, H5E_CANTNOTIFY, FAIL,
- "Can't propagate serialization status to fd parents")
+ /* Propagate the fact that the entry is serialized up the
+ * flush dependency chain if appropriate. Since the image must
+ * have been out of date for this function to have been called
+ * (see assertion on entry), no need to check that -- only check
+ * for flush dependency parents.
+ */
+ HDassert(entry_ptr->flush_dep_nunser_children == 0);
+ if (entry_ptr->flush_dep_nparents > 0)
+ if (H5C__mark_flush_dep_serialized(entry_ptr) < 0)
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTNOTIFY, FAIL, "Can't propagate serialization status to fd parents")
done:
- FUNC_LEAVE_NOAPI(ret_value)
- } /* H5C__generate_image */
-
- /*-------------------------------------------------------------------------
- *
- * Function: H5C_remove_entry
- *
- * Purpose: Remove an entry from the cache. Must be not protected, pinned,
- * dirty, involved in flush dependencies, etc.
- *
- * Return: Non-negative on success/Negative on failure
- *
- * Programmer: Quincey Koziol
- * September 17, 2016
- *
- *-------------------------------------------------------------------------
- */
- herr_t H5C_remove_entry(void *_entry)
- {
- H5C_cache_entry_t *entry = (H5C_cache_entry_t *)_entry; /* Entry to remove */
- H5C_t * cache; /* Cache for file */
- herr_t ret_value = SUCCEED; /* Return value */
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* H5C__generate_image */
- FUNC_ENTER_NOAPI(FAIL)
+/*-------------------------------------------------------------------------
+ *
+ * Function: H5C_remove_entry
+ *
+ * Purpose: Remove an entry from the cache. Must be not protected, pinned,
+ * dirty, involved in flush dependencies, etc.
+ *
+ * Return: Non-negative on success/Negative on failure
+ *
+ * Programmer: Quincey Koziol
+ * September 17, 2016
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5C_remove_entry(void *_entry)
+{
+ H5C_cache_entry_t *entry = (H5C_cache_entry_t *)_entry; /* Entry to remove */
+ H5C_t * cache; /* Cache for file */
+ herr_t ret_value = SUCCEED; /* Return value */
- /* Sanity checks */
- HDassert(entry);
- HDassert(entry->ring != H5C_RING_UNDEFINED);
- cache = entry->cache_ptr;
- HDassert(cache);
- HDassert(cache->magic == H5C__H5C_T_MAGIC);
-
- /* Check for error conditions */
- if (entry->is_dirty)
- HGOTO_ERROR(H5E_CACHE, H5E_CANTREMOVE, FAIL, "can't remove dirty entry from cache")
- if (entry->is_protected)
- HGOTO_ERROR(H5E_CACHE, H5E_CANTREMOVE, FAIL, "can't remove protected entry from cache")
- if (entry->is_pinned)
- HGOTO_ERROR(H5E_CACHE, H5E_CANTREMOVE, FAIL, "can't remove pinned entry from cache")
- /* NOTE: If these two errors are getting tripped because the entry is
- * in a flush dependency with a freedspace entry, move the checks
- * after the "before evict" message is sent, and add the
- * "child being evicted" message to the "before evict" notify
- * section below. QAK - 2017/08/03
- */
- if (entry->flush_dep_nparents > 0)
- HGOTO_ERROR(H5E_CACHE, H5E_CANTREMOVE, FAIL,
- "can't remove entry with flush dependency parents from cache")
- if (entry->flush_dep_nchildren > 0)
- HGOTO_ERROR(H5E_CACHE, H5E_CANTREMOVE, FAIL,
- "can't remove entry with flush dependency children from cache")
-
- /* Additional internal cache consistency checks */
- HDassert(!entry->in_slist);
- HDassert(!entry->flush_marker);
- HDassert(!entry->flush_in_progress);
-
- /* Note that the algorithm below is (very) similar to the set of operations
- * in H5C__flush_single_entry() and should be kept in sync with changes
- * to that code. - QAK, 2016/11/30
- */
+ FUNC_ENTER_NOAPI(FAIL)
- /* Update stats, as if we are "destroying" and taking ownership of the entry */
- H5C__UPDATE_STATS_FOR_EVICTION(cache, entry, TRUE)
+ /* Sanity checks */
+ HDassert(entry);
+ HDassert(entry->ring != H5C_RING_UNDEFINED);
+ cache = entry->cache_ptr;
+ HDassert(cache);
+ HDassert(cache->magic == H5C__H5C_T_MAGIC);
+
+ /* Check for error conditions */
+ if (entry->is_dirty)
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTREMOVE, FAIL, "can't remove dirty entry from cache")
+ if (entry->is_protected)
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTREMOVE, FAIL, "can't remove protected entry from cache")
+ if (entry->is_pinned)
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTREMOVE, FAIL, "can't remove pinned entry from cache")
+ /* NOTE: If these two errors are getting tripped because the entry is
+ * in a flush dependency with a freedspace entry, move the checks
+ * after the "before evict" message is sent, and add the
+ * "child being evicted" message to the "before evict" notify
+ * section below. QAK - 2017/08/03
+ */
+ if (entry->flush_dep_nparents > 0)
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTREMOVE, FAIL,
+ "can't remove entry with flush dependency parents from cache")
+ if (entry->flush_dep_nchildren > 0)
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTREMOVE, FAIL,
+ "can't remove entry with flush dependency children from cache")
+
+ /* Additional internal cache consistency checks */
+ HDassert(!entry->in_slist);
+ HDassert(!entry->flush_marker);
+ HDassert(!entry->flush_in_progress);
+
+ /* Note that the algorithm below is (very) similar to the set of operations
+ * in H5C__flush_single_entry() and should be kept in sync with changes
+ * to that code. - QAK, 2016/11/30
+ */
- /* If the entry's type has a 'notify' callback, send a 'before eviction'
- * notice while the entry is still fully integrated in the cache.
- */
- if (entry->type->notify && (entry->type->notify)(H5C_NOTIFY_ACTION_BEFORE_EVICT, entry) < 0)
- HGOTO_ERROR(H5E_CACHE, H5E_CANTNOTIFY, FAIL, "can't notify client about entry to evict")
+ /* Update stats, as if we are "destroying" and taking ownership of the entry */
+ H5C__UPDATE_STATS_FOR_EVICTION(cache, entry, TRUE)
- /* Update the cache internal data structures as appropriate for a destroy.
- * Specifically:
- * 1) Delete it from the index
- * 2) Delete it from the collective read access list
- * 3) Update the replacement policy for eviction
- * 4) Remove it from the tag list for this object
- */
+ /* If the entry's type has a 'notify' callback, send a 'before eviction'
+ * notice while the entry is still fully integrated in the cache.
+ */
+ if (entry->type->notify && (entry->type->notify)(H5C_NOTIFY_ACTION_BEFORE_EVICT, entry) < 0)
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTNOTIFY, FAIL, "can't notify client about entry to evict")
+
+ /* Update the cache internal data structures as appropriate for a destroy.
+ * Specifically:
+ * 1) Delete it from the index
+ * 2) Delete it from the collective read access list
+ * 3) Update the replacement policy for eviction
+ * 4) Remove it from the tag list for this object
+ */
- H5C__DELETE_FROM_INDEX(cache, entry, FAIL)
+ H5C__DELETE_FROM_INDEX(cache, entry, FAIL)
#ifdef H5_HAVE_PARALLEL
- /* Check for collective read access flag */
- if (entry->coll_access) {
- entry->coll_access = FALSE;
- H5C__REMOVE_FROM_COLL_LIST(cache, entry, FAIL)
- } /* end if */
-#endif /* H5_HAVE_PARALLEL */
+ /* Check for collective read access flag */
+ if (entry->coll_access) {
+ entry->coll_access = FALSE;
+ H5C__REMOVE_FROM_COLL_LIST(cache, entry, FAIL)
+ } /* end if */
+#endif /* H5_HAVE_PARALLEL */
- H5C__UPDATE_RP_FOR_EVICTION(cache, entry, FAIL)
+ H5C__UPDATE_RP_FOR_EVICTION(cache, entry, FAIL)
- /* Remove entry from tag list */
- if (H5C__untag_entry(cache, entry) < 0)
- HGOTO_ERROR(H5E_CACHE, H5E_CANTREMOVE, FAIL, "can't remove entry from tag list")
+ /* Remove entry from tag list */
+ if (H5C__untag_entry(cache, entry) < 0)
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTREMOVE, FAIL, "can't remove entry from tag list")
- /* Increment entries_removed_counter and set last_entry_removed_ptr.
- * As we me be about to free the entry, recall that last_entry_removed_ptr
- * must NEVER be dereferenced.
- *
- * Recall that these fields are maintained to allow functions that perform
- * scans of lists of entries to detect the unexpected removal of entries
- * (via expunge, eviction, or take ownership at present), so that they can
- * re-start their scans if necessary.
- *
- * Also check if the entry we are watching for removal is being
- * removed (usually the 'next' entry for an iteration) and reset
- * it to indicate that it was removed.
- */
- cache->entries_removed_counter++;
- cache->last_entry_removed_ptr = entry;
- if (entry == cache->entry_watched_for_removal)
- cache->entry_watched_for_removal = NULL;
+ /* Increment entries_removed_counter and set last_entry_removed_ptr.
+ * As we me be about to free the entry, recall that last_entry_removed_ptr
+ * must NEVER be dereferenced.
+ *
+ * Recall that these fields are maintained to allow functions that perform
+ * scans of lists of entries to detect the unexpected removal of entries
+ * (via expunge, eviction, or take ownership at present), so that they can
+ * re-start their scans if necessary.
+ *
+ * Also check if the entry we are watching for removal is being
+ * removed (usually the 'next' entry for an iteration) and reset
+ * it to indicate that it was removed.
+ */
+ cache->entries_removed_counter++;
+ cache->last_entry_removed_ptr = entry;
+ if (entry == cache->entry_watched_for_removal)
+ cache->entry_watched_for_removal = NULL;
- /* Internal cache data structures should now be up to date, and
- * consistent with the status of the entry.
- *
- * Now clean up internal cache fields if appropriate.
- */
+ /* Internal cache data structures should now be up to date, and
+ * consistent with the status of the entry.
+ *
+ * Now clean up internal cache fields if appropriate.
+ */
- /* Free the buffer for the on disk image */
- if (entry->image_ptr != NULL)
- entry->image_ptr = H5MM_xfree(entry->image_ptr);
+ /* Free the buffer for the on disk image */
+ if (entry->image_ptr != NULL)
+ entry->image_ptr = H5MM_xfree(entry->image_ptr);
- /* Reset the pointer to the cache the entry is within */
- entry->cache_ptr = NULL;
+ /* Reset the pointer to the cache the entry is within */
+ entry->cache_ptr = NULL;
- /* Client is taking ownership of the entry. Set bad magic here so the
- * cache will choke unless the entry is re-inserted properly
- */
- entry->magic = H5C__H5C_CACHE_ENTRY_T_BAD_MAGIC;
+ /* Client is taking ownership of the entry. Set bad magic here so the
+ * cache will choke unless the entry is re-inserted properly
+ */
+ entry->magic = H5C__H5C_CACHE_ENTRY_T_BAD_MAGIC;
done:
- FUNC_LEAVE_NOAPI(ret_value)
- } /* H5C__remove_entry() */
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* H5C__remove_entry() */
diff --git a/src/H5Cdbg.c b/src/H5Cdbg.c
index 7dc7d34..0752673 100644
--- a/src/H5Cdbg.c
+++ b/src/H5Cdbg.c
@@ -248,11 +248,12 @@ H5C_dump_cache_LRU(H5C_t *cache_ptr, const char *cache_name)
#endif /* NDEBUG */
/*-------------------------------------------------------------------------
+ *
* Function: H5C_dump_cache_skip_list
*
* Purpose: Debugging routine that prints a summary of the contents of
- * the skip list used by the metadata cache metadata cache to
- * maintain an address sorted list of dirty entries.
+ * the skip list used by the metadata cache metadata cache to
+ * maintain an address sorted list of dirty entries.
*
* Return: Non-negative on success/Negative on failure
*
@@ -277,23 +278,31 @@ H5C_dump_cache_skip_list(H5C_t *cache_ptr, char *calling_fcn)
HDassert(calling_fcn != NULL);
HDfprintf(stdout, "\n\nDumping metadata cache skip list from %s.\n", calling_fcn);
- HDfprintf(stdout, " slist len = %u.\n", cache_ptr->slist_len);
- HDfprintf(stdout, " slist size = %lld.\n", (long long)(cache_ptr->slist_size));
+ HDfprintf(stdout, " slist len = %" PRIu32 ".\n", cache_ptr->slist_len);
+ HDfprintf(stdout, " slist size = %zu.\n", cache_ptr->slist_size);
if (cache_ptr->slist_len > 0) {
+
/* If we get this far, all entries in the cache are listed in the
* skip list -- scan the skip list generating the desired output.
*/
HDfprintf(stdout, "Num: Addr: Len: Prot/Pind: Dirty: Type:\n");
- i = 0;
+ i = 0;
+
node_ptr = H5SL_first(cache_ptr->slist_ptr);
- if (node_ptr != NULL)
+
+ if (node_ptr != NULL) {
+
entry_ptr = (H5C_cache_entry_t *)H5SL_item(node_ptr);
- else
+ }
+ else {
+
entry_ptr = NULL;
+ }
while (entry_ptr != NULL) {
+
HDassert(entry_ptr->magic == H5C__H5C_CACHE_ENTRY_T_MAGIC);
HDfprintf(stdout, "%s%d 0x%016llx %4lld %d/%d %d %s\n", cache_ptr->prefix, i,
@@ -301,22 +310,30 @@ H5C_dump_cache_skip_list(H5C_t *cache_ptr, char *calling_fcn)
(int)(entry_ptr->is_protected), (int)(entry_ptr->is_pinned), (int)(entry_ptr->is_dirty),
entry_ptr->type->name);
- HDfprintf(stdout, " node_ptr = %p, item = %p\n", node_ptr, H5SL_item(node_ptr));
+ HDfprintf(stdout, " node_ptr = %p, item = %p\n", (void *)node_ptr, H5SL_item(node_ptr));
/* increment node_ptr before we delete its target */
+
node_ptr = H5SL_next(node_ptr);
- if (node_ptr != NULL)
+
+ if (node_ptr != NULL) {
+
entry_ptr = (H5C_cache_entry_t *)H5SL_item(node_ptr);
- else
+ }
+ else {
+
entry_ptr = NULL;
+ }
i++;
+
} /* end while */
} /* end if */
HDfprintf(stdout, "\n\n");
FUNC_LEAVE_NOAPI(ret_value)
+
} /* H5C_dump_cache_skip_list() */
#endif /* NDEBUG */
@@ -593,8 +610,8 @@ H5C_stats(H5C_t *cache_ptr, const char *cache_name,
(long long)(cache_ptr->slist_scan_restarts), (long long)(cache_ptr->LRU_scan_restarts),
(long long)(cache_ptr->index_scan_restarts));
- HDfprintf(stdout, "%s cache image creations/reads/loads/size = %d / %d /%d / %Hu\n", cache_ptr->prefix,
- cache_ptr->images_created, cache_ptr->images_read, cache_ptr->images_loaded,
+ HDfprintf(stdout, "%s cache image creations/reads/loads/size = %d / %d /%d / %" PRIuHSIZE "\n",
+ cache_ptr->prefix, cache_ptr->images_created, cache_ptr->images_read, cache_ptr->images_loaded,
cache_ptr->last_image_size);
HDfprintf(stdout, "%s prefetches / dirty prefetches = %lld / %lld\n", cache_ptr->prefix,
diff --git a/src/H5Cimage.c b/src/H5Cimage.c
index b6c49ce..e876265 100644
--- a/src/H5Cimage.c
+++ b/src/H5Cimage.c
@@ -423,33 +423,33 @@ done:
* Function: H5C__deserialize_prefetched_entry()
*
* Purpose: Deserialize the supplied prefetched entry entry, and return
- * a pointer to the deserialized entry in *entry_ptr_ptr.
- * If successful, remove the prefetched entry from the cache,
- * and free it. Insert the deserialized entry into the cache.
- *
- * Note that the on disk image of the entry is not freed --
- * a pointer to it is stored in the deserialized entries'
- * image_ptr field, and its image_up_to_date field is set to
- * TRUE unless the entry is dirtied by the deserialize call.
- *
- * If the prefetched entry is a flush dependency child,
- * destroy that flush dependency prior to calling the
- * deserialize callback. If appropriate, the flush dependency
- * relationship will be recreated by the cache client.
- *
- * If the prefetched entry is a flush dependency parent,
- * destroy the flush dependency relationship with all its
- * children. As all these children must be prefetched entries,
- * recreate these flush dependency relationships with
- * deserialized entry after it is inserted in the cache.
- *
- * Since deserializing a prefetched entry is semantically
- * equivalent to a load, issue an entry loaded nofification
- * if the notify callback is defined.
+ * a pointer to the deserialized entry in *entry_ptr_ptr.
+ * If successful, remove the prefetched entry from the cache,
+ * and free it. Insert the deserialized entry into the cache.
+ *
+ * Note that the on disk image of the entry is not freed --
+ * a pointer to it is stored in the deserialized entries'
+ * image_ptr field, and its image_up_to_date field is set to
+ * TRUE unless the entry is dirtied by the deserialize call.
+ *
+ * If the prefetched entry is a flush dependency child,
+ * destroy that flush dependency prior to calling the
+ * deserialize callback. If appropriate, the flush dependency
+ * relationship will be recreated by the cache client.
+ *
+ * If the prefetched entry is a flush dependency parent,
+ * destroy the flush dependency relationship with all its
+ * children. As all these children must be prefetched entries,
+ * recreate these flush dependency relationships with
+ * deserialized entry after it is inserted in the cache.
+ *
+ * Since deserializing a prefetched entry is semantically
+ * equivalent to a load, issue an entry loaded nofification
+ * if the notify callback is defined.
*
* Return: SUCCEED on success, and FAIL on failure.
*
- * Note that *entry_ptr_ptr is undefined on failure.
+ * Note that *entry_ptr_ptr is undefined on failure.
*
* Programmer: John Mainzer, 8/10/15
*
@@ -685,15 +685,17 @@ H5C__deserialize_prefetched_entry(H5F_t *f, H5C_t *cache_ptr, H5C_cache_entry_t
*
* 1) Set pf_entry_ptr->image_ptr to NULL. Since we have already
* transferred the buffer containing the image to *ds_entry_ptr,
- * this is not a memory leak.
+ * this is not a memory leak.
*
* 2) Call H5C__flush_single_entry() with the H5C__FLUSH_INVALIDATE_FLAG
* and H5C__FLUSH_CLEAR_ONLY_FLAG flags set.
*/
pf_entry_ptr->image_ptr = NULL;
+
if (pf_entry_ptr->is_dirty) {
HDassert(pf_entry_ptr->in_slist);
flush_flags |= H5C__DEL_FROM_SLIST_ON_DESTROY_FLAG;
+
} /* end if */
if (H5C__flush_single_entry(f, pf_entry_ptr, flush_flags) < 0)
diff --git a/src/H5Cmpio.c b/src/H5Cmpio.c
index 37d7a9b..e529c58 100644
--- a/src/H5Cmpio.c
+++ b/src/H5Cmpio.c
@@ -105,9 +105,9 @@ static herr_t H5C__flush_candidates_in_ring(H5F_t *f, H5C_ring_t ring, unsigned
*
* We construct the table as follows. Let:
*
- * n = num_candidates / mpi_size;
+ * n = num_candidates / mpi_size;
*
- * m = num_candidates % mpi_size;
+ * m = num_candidates % mpi_size;
*
* Now allocate an array of integers of length mpi_size + 1,
* and call this array candidate_assignment_table.
@@ -127,10 +127,10 @@ static herr_t H5C__flush_candidates_in_ring(H5F_t *f, H5C_ring_t ring, unsigned
* Once the table is constructed, we determine the first and
* last entry this process is to flush as follows:
*
- * first_entry_to_flush = candidate_assignment_table[mpi_rank]
+ * first_entry_to_flush = candidate_assignment_table[mpi_rank]
*
* last_entry_to_flush =
- * candidate_assignment_table[mpi_rank + 1] - 1;
+ * candidate_assignment_table[mpi_rank + 1] - 1;
*
* With these values determined, we simply scan through the
* candidate list, marking all entries in the range
@@ -172,12 +172,15 @@ H5C_apply_candidate_list(H5F_t *f, H5C_t *cache_ptr, unsigned num_candidates, ha
unsigned entries_to_clear[H5C_RING_NTYPES];
haddr_t addr;
H5C_cache_entry_t *entry_ptr = NULL;
+
#if H5C_DO_SANITY_CHECKS
haddr_t last_addr;
#endif /* H5C_DO_SANITY_CHECKS */
+
#if H5C_APPLY_CANDIDATE_LIST__DEBUG
char tbl_buf[1024];
-#endif /* H5C_APPLY_CANDIDATE_LIST__DEBUG */
+#endif /* H5C_APPLY_CANDIDATE_LIST__DEBUG */
+
unsigned u; /* Local index variable */
herr_t ret_value = SUCCEED; /* Return value */
@@ -397,6 +400,7 @@ done:
} /* H5C_apply_candidate_list() */
/*-------------------------------------------------------------------------
+ *
* Function: H5C_construct_candidate_list__clean_cache
*
* Purpose: Construct the list of entries that should be flushed to
@@ -439,6 +443,7 @@ H5C_construct_candidate_list__clean_cache(H5C_t *cache_ptr)
HDassert(cache_ptr->slist_len <= (cache_ptr->dLRU_list_len + cache_ptr->pel_len));
if (space_needed > 0) { /* we have work to do */
+
H5C_cache_entry_t *entry_ptr;
unsigned nominated_entries_count = 0;
size_t nominated_entries_size = 0;
@@ -450,8 +455,11 @@ H5C_construct_candidate_list__clean_cache(H5C_t *cache_ptr)
* entries to free up the necessary space.
*/
entry_ptr = cache_ptr->dLRU_tail_ptr;
- while ((nominated_entries_size < space_needed) && (nominated_entries_count < cache_ptr->slist_len) &&
+
+ while ((nominated_entries_size < space_needed) &&
+ ((!cache_ptr->slist_enabled) || (nominated_entries_count < cache_ptr->slist_len)) &&
(entry_ptr != NULL)) {
+
HDassert(!(entry_ptr->is_protected));
HDassert(!(entry_ptr->is_read_only));
HDassert(entry_ptr->ro_ref_count == 0);
@@ -459,13 +467,17 @@ H5C_construct_candidate_list__clean_cache(H5C_t *cache_ptr)
HDassert(entry_ptr->in_slist);
nominated_addr = entry_ptr->addr;
+
if (H5AC_add_candidate((H5AC_t *)cache_ptr, nominated_addr) < 0)
+
HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "H5AC_add_candidate() failed")
nominated_entries_size += entry_ptr->size;
nominated_entries_count++;
entry_ptr = entry_ptr->aux_prev;
+
} /* end while */
+
HDassert(entry_ptr == NULL);
/* it is possible that there are some dirty entries on the
@@ -474,7 +486,9 @@ H5C_construct_candidate_list__clean_cache(H5C_t *cache_ptr)
entry_ptr = cache_ptr->pel_head_ptr;
while ((nominated_entries_size < space_needed) && (nominated_entries_count < cache_ptr->slist_len) &&
(entry_ptr != NULL)) {
+
if (entry_ptr->is_dirty) {
+
HDassert(!(entry_ptr->is_protected));
HDassert(!(entry_ptr->is_read_only));
HDassert(entry_ptr->ro_ref_count == 0);
@@ -482,22 +496,29 @@ H5C_construct_candidate_list__clean_cache(H5C_t *cache_ptr)
HDassert(entry_ptr->in_slist);
nominated_addr = entry_ptr->addr;
+
if (H5AC_add_candidate((H5AC_t *)cache_ptr, nominated_addr) < 0)
+
HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "H5AC_add_candidate() failed")
nominated_entries_size += entry_ptr->size;
nominated_entries_count++;
+
} /* end if */
entry_ptr = entry_ptr->next;
+
} /* end while */
HDassert(nominated_entries_count == cache_ptr->slist_len);
HDassert(nominated_entries_size == space_needed);
+
} /* end if */
done:
+
FUNC_LEAVE_NOAPI(ret_value)
+
} /* H5C_construct_candidate_list__clean_cache() */
/*-------------------------------------------------------------------------
@@ -533,6 +554,7 @@ H5C_construct_candidate_list__min_clean(H5C_t *cache_ptr)
* cache back within its min clean constraints.
*/
if (cache_ptr->max_cache_size > cache_ptr->index_size) {
+
if (((cache_ptr->max_cache_size - cache_ptr->index_size) + cache_ptr->cLRU_list_size) >=
cache_ptr->min_clean_size)
space_needed = 0;
@@ -548,6 +570,7 @@ H5C_construct_candidate_list__min_clean(H5C_t *cache_ptr)
} /* end else */
if (space_needed > 0) { /* we have work to do */
+
H5C_cache_entry_t *entry_ptr;
unsigned nominated_entries_count = 0;
size_t nominated_entries_size = 0;
@@ -560,6 +583,7 @@ H5C_construct_candidate_list__min_clean(H5C_t *cache_ptr)
entry_ptr = cache_ptr->dLRU_tail_ptr;
while ((nominated_entries_size < space_needed) && (nominated_entries_count < cache_ptr->slist_len) &&
(entry_ptr != NULL) && (!entry_ptr->flush_me_last)) {
+
haddr_t nominated_addr;
HDassert(!(entry_ptr->is_protected));
@@ -569,12 +593,15 @@ H5C_construct_candidate_list__min_clean(H5C_t *cache_ptr)
HDassert(entry_ptr->in_slist);
nominated_addr = entry_ptr->addr;
+
if (H5AC_add_candidate((H5AC_t *)cache_ptr, nominated_addr) < 0)
+
HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "H5AC_add_candidate() failed")
nominated_entries_size += entry_ptr->size;
nominated_entries_count++;
entry_ptr = entry_ptr->aux_prev;
+
} /* end while */
HDassert(nominated_entries_count <= cache_ptr->slist_len);
HDassert(nominated_entries_size >= space_needed);
@@ -679,13 +706,14 @@ H5C_mark_entries_as_clean(H5F_t *f, unsigned ce_array_len, haddr_t *ce_array_ptr
if (entry_ptr == NULL) {
#if H5C_DO_SANITY_CHECKS
- HDfprintf(stdout, "H5C_mark_entries_as_clean: entry[%u] = %a not in cache.\n", u, addr);
+ HDfprintf(stdout, "H5C_mark_entries_as_clean: entry[%u] = %" PRIuHADDR " not in cache.\n", u,
+ addr);
#endif /* H5C_DO_SANITY_CHECKS */
HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Listed entry not in cache?!?!?")
} /* end if */
else if (!entry_ptr->is_dirty) {
#if H5C_DO_SANITY_CHECKS
- HDfprintf(stdout, "H5C_mark_entries_as_clean: entry %a is not dirty!?!\n", addr);
+ HDfprintf(stdout, "H5C_mark_entries_as_clean: entry %" PRIuHADDR " is not dirty!?!\n", addr);
#endif /* H5C_DO_SANITY_CHECKS */
HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Listed entry not dirty?!?!?")
} /* end else-if */
@@ -737,7 +765,7 @@ H5C_mark_entries_as_clean(H5F_t *f, unsigned ce_array_len, haddr_t *ce_array_ptr
* of the pre_serialize / serialize routines, this may
* cease to be the case -- requiring a review of this
* point.
- * JRM -- 4/7/15
+ * JRM -- 4/7/15
*/
entries_cleared = 0;
entries_examined = 0;
diff --git a/src/H5Cpkg.h b/src/H5Cpkg.h
index fd82b2b..409dccc 100644
--- a/src/H5Cpkg.h
+++ b/src/H5Cpkg.h
@@ -14,8 +14,8 @@
/*
* Programmer: John Mainzer -- 10/12/04
*
- * Purpose: This file contains declarations which are normally visible
- * only within the H5C package.
+ * Purpose: This file contains declarations which are normally visible
+ * only within the H5C package.
*
* Source files outside the H5C package should include
* H5Cprivate.h instead.
@@ -50,10 +50,12 @@
/* Number of epoch markers active */
#define H5C__MAX_EPOCH_MARKERS 10
+
/* Cache configuration settings */
#define H5C__HASH_TABLE_LEN (64 * 1024) /* must be a power of 2 */
#define H5C__H5C_T_MAGIC 0x005CAC0E
+
/* Initial allocated size of the "flush_dep_parent" array */
#define H5C_FLUSH_DEP_PARENT_INIT 8
@@ -1575,12 +1577,17 @@ if ( ( (cache_ptr)->index_size != \
*/
#if H5C_DO_SLIST_SANITY_CHECKS
+
#define ENTRY_IN_SLIST(cache_ptr, entry_ptr) \
H5C_entry_in_skip_list((cache_ptr), (entry_ptr))
+
#else /* H5C_DO_SLIST_SANITY_CHECKS */
+
#define ENTRY_IN_SLIST(cache_ptr, entry_ptr) FALSE
+
#endif /* H5C_DO_SLIST_SANITY_CHECKS */
+
#if H5C_DO_SANITY_CHECKS
#define H5C__INSERT_ENTRY_IN_SLIST(cache_ptr, entry_ptr, fail_val) \
@@ -1738,6 +1745,7 @@ if ( ( (cache_ptr)->index_size != \
((cache_ptr)->slist_ring_size[(entry_ptr)->ring]) -= (entry_ptr)->size; \
(entry_ptr)->in_slist = FALSE; \
} /* H5C__REMOVE_ENTRY_FROM_SLIST */
+
#endif /* H5C_DO_SANITY_CHECKS */
@@ -1754,24 +1762,24 @@ if ( ( (cache_ptr)->index_size != \
*
* Modifications:
*
- * JRM -- 8/27/06
- * Added the H5C_DO_SANITY_CHECKS version of the macro.
+ * JRM -- 8/27/06
+ * Added the H5C_DO_SANITY_CHECKS version of the macro.
*
- * This version maintains the slist_size_increase field
- * that are used in sanity checks in the flush routines.
+ * This version maintains the slist_size_increase field
+ * that are used in sanity checks in the flush routines.
*
- * All this is needed as the fractal heap needs to be
- * able to dirty, resize and/or move entries during the
- * flush.
+ * All this is needed as the fractal heap needs to be
+ * able to dirty, resize and/or move entries during the
+ * flush.
*
- * JRM -- 12/13/14
- * Note that we do not set cache_ptr->slist_changed to TRUE
- * in this case, as the structure of the slist is not
- * modified.
+ * JRM -- 12/13/14
+ * Note that we do not set cache_ptr->slist_changed to TRUE
+ * in this case, as the structure of the slist is not
+ * modified.
*
- * JRM -- 9/1/15
- * Added code to maintain the cache_ptr->slist_ring_len
- * and cache_ptr->slist_ring_size arrays.
+ * JRM -- 9/1/15
+ * Added code to maintain the cache_ptr->slist_ring_len
+ * and cache_ptr->slist_ring_size arrays.
*
*-------------------------------------------------------------------------
*/
@@ -4653,6 +4661,7 @@ typedef struct H5C_tag_info_t {
* NDEBUG is not #defined.
*
****************************************************************************/
+
struct H5C_t {
uint32_t magic;
hbool_t flush_in_progress;
@@ -4668,7 +4677,7 @@ struct H5C_t {
hbool_t evictions_enabled;
hbool_t close_warning_received;
- /* Fields for maintaining [hash table] index of entries */
+ /* Fields for maintaining the [hash table] index of entries */
uint32_t index_len;
size_t index_size;
uint32_t index_ring_len[H5C_RING_NTYPES];
@@ -4886,7 +4895,8 @@ struct H5C_t {
#ifndef NDEBUG
int64_t get_entry_ptr_from_addr_counter;
#endif /* NDEBUG */
-};
+
+}; /* H5C_t */
/* Define typedef for tagged cache entry iteration callbacks */
typedef int (*H5C_tag_iter_cb_t)(H5C_cache_entry_t *entry, void *ctx);
diff --git a/src/H5Cprivate.h b/src/H5Cprivate.h
index 149bc1e..80ab5ff 100644
--- a/src/H5Cprivate.h
+++ b/src/H5Cprivate.h
@@ -13,12 +13,12 @@
/*-------------------------------------------------------------------------
*
- * Created: H5Cprivate.h
+ * Created: H5Cprivate.h
* 6/3/04
* John Mainzer
*
- * Purpose: Constants and typedefs available to the rest of the
- * library.
+ * Purpose: Constants and typedefs available to the rest of the
+ * library.
*
*-------------------------------------------------------------------------
*/
@@ -26,11 +26,11 @@
#ifndef _H5Cprivate_H
#define _H5Cprivate_H
-#include "H5Cpublic.h" /* public prototypes */
+#include "H5Cpublic.h" /* public prototypes */
/* Private headers needed by this header */
#include "H5private.h" /* Generic Functions */
-#include "H5Fprivate.h" /* File access */
+#include "H5Fprivate.h" /* File access */
/**************************/
/* Library Private Macros */
diff --git a/src/H5Dbtree.c b/src/H5Dbtree.c
index c412bf6..d0a191f 100644
--- a/src/H5Dbtree.c
+++ b/src/H5Dbtree.c
@@ -741,7 +741,7 @@ H5D__btree_debug_key(FILE *stream, int indent, int fwidth, const void *_key, con
HDfprintf(stream, "%*s%-*s 0x%08x\n", indent, "", fwidth, "Filter mask:", key->filter_mask);
HDfprintf(stream, "%*s%-*s {", indent, "", fwidth, "Logical offset:");
for (u = 0; u < udata->ndims; u++)
- HDfprintf(stream, "%s%Hd", u ? ", " : "", (key->scaled[u] * udata->common.layout->dim[u]));
+ HDfprintf(stream, "%s%" PRIuHSIZE, u ? ", " : "", (key->scaled[u] * udata->common.layout->dim[u]));
HDfputs("}\n", stream);
FUNC_LEAVE_NOAPI(SUCCEED)
@@ -1370,7 +1370,7 @@ H5D__btree_idx_dump(const H5O_storage_chunk_t *storage, FILE *stream)
HDassert(storage);
HDassert(stream);
- HDfprintf(stream, " Address: %a\n", storage->idx_addr);
+ HDfprintf(stream, " Address: %" PRIuHADDR "\n", storage->idx_addr);
FUNC_LEAVE_NOAPI(SUCCEED)
} /* end H5D__btree_idx_dump() */
diff --git a/src/H5Dbtree2.c b/src/H5Dbtree2.c
index 51380e4..866b794 100644
--- a/src/H5Dbtree2.c
+++ b/src/H5Dbtree2.c
@@ -441,11 +441,11 @@ H5D__bt2_unfilt_debug(FILE *stream, int indent, int fwidth, const void *_record,
HDassert(ctx->chunk_size == record->nbytes);
HDassert(0 == record->filter_mask);
- HDfprintf(stream, "%*s%-*s %a\n", indent, "", fwidth, "Chunk address:", record->chunk_addr);
+ HDfprintf(stream, "%*s%-*s %" PRIuHADDR "\n", indent, "", fwidth, "Chunk address:", record->chunk_addr);
HDfprintf(stream, "%*s%-*s {", indent, "", fwidth, "Logical offset:");
for (u = 0; u < ctx->ndims; u++)
- HDfprintf(stream, "%s%Hd", u ? ", " : "", record->scaled[u] * ctx->dim[u]);
+ HDfprintf(stream, "%s%" PRIuHSIZE, u ? ", " : "", record->scaled[u] * ctx->dim[u]);
HDfputs("}\n", stream);
FUNC_LEAVE_NOAPI(SUCCEED)
@@ -555,13 +555,13 @@ H5D__bt2_filt_debug(FILE *stream, int indent, int fwidth, const void *_record, c
HDassert(H5F_addr_defined(record->chunk_addr));
HDassert(0 != record->nbytes);
- HDfprintf(stream, "%*s%-*s %a\n", indent, "", fwidth, "Chunk address:", record->chunk_addr);
+ HDfprintf(stream, "%*s%-*s %" PRIuHADDR "\n", indent, "", fwidth, "Chunk address:", record->chunk_addr);
HDfprintf(stream, "%*s%-*s %u bytes\n", indent, "", fwidth, "Chunk size:", (unsigned)record->nbytes);
HDfprintf(stream, "%*s%-*s 0x%08x\n", indent, "", fwidth, "Filter mask:", record->filter_mask);
HDfprintf(stream, "%*s%-*s {", indent, "", fwidth, "Logical offset:");
for (u = 0; u < ctx->ndims; u++)
- HDfprintf(stream, "%s%Hd", u ? ", " : "", record->scaled[u] * ctx->dim[u]);
+ HDfprintf(stream, "%s%" PRIuHSIZE, u ? ", " : "", record->scaled[u] * ctx->dim[u]);
HDfputs("}\n", stream);
FUNC_LEAVE_NOAPI(SUCCEED)
@@ -1467,7 +1467,7 @@ H5D__bt2_idx_dump(const H5O_storage_chunk_t *storage, FILE *stream)
HDassert(storage);
HDassert(stream);
- HDfprintf(stream, " Address: %a\n", storage->idx_addr);
+ HDfprintf(stream, " Address: %" PRIuHADDR "\n", storage->idx_addr);
FUNC_LEAVE_NOAPI(SUCCEED)
} /* end H5D__bt2_idx_dump() */
diff --git a/src/H5Dchunk.c b/src/H5Dchunk.c
index 9689744..60bf57e 100644
--- a/src/H5Dchunk.c
+++ b/src/H5Dchunk.c
@@ -6541,10 +6541,11 @@ H5D__chunk_dump_index_cb(const H5D_chunk_rec_t *chunk_rec, void *_udata)
} /* end if */
/* Print information about this chunk */
- HDfprintf(udata->stream, " 0x%08x %8Zu %10a [", chunk_rec->filter_mask, chunk_rec->nbytes,
- chunk_rec->chunk_addr);
+ HDfprintf(udata->stream, " 0x%08x %8" PRIu32 " %10" PRIuHADDR " [", chunk_rec->filter_mask,
+ chunk_rec->nbytes, chunk_rec->chunk_addr);
for (u = 0; u < udata->ndims; u++)
- HDfprintf(udata->stream, "%s%Hu", (u ? ", " : ""), (chunk_rec->scaled[u] * udata->chunk_dim[u]));
+ HDfprintf(udata->stream, "%s%" PRIuHSIZE, (u ? ", " : ""),
+ (chunk_rec->scaled[u] * udata->chunk_dim[u]));
HDfputs("]\n", udata->stream);
} /* end if */
diff --git a/src/H5Ddbg.c b/src/H5Ddbg.c
index 8c10983..9509de3 100644
--- a/src/H5Ddbg.c
+++ b/src/H5Ddbg.c
@@ -78,7 +78,8 @@ H5Ddebug(hid_t dset_id)
if (H5D_CHUNKED == dset->shared->layout.type)
(void)H5D__chunk_dump_index(dset, stdout);
else if (H5D_CONTIGUOUS == dset->shared->layout.type)
- HDfprintf(stdout, " %-10s %a\n", "Address:", dset->shared->layout.storage.u.contig.addr);
+ HDfprintf(stdout, " %-10s %" PRIuHADDR "\n",
+ "Address:", dset->shared->layout.storage.u.contig.addr);
done:
FUNC_LEAVE_API(ret_value)
diff --git a/src/H5Ddeprec.c b/src/H5Ddeprec.c
index db345c1..a091152 100644
--- a/src/H5Ddeprec.c
+++ b/src/H5Ddeprec.c
@@ -137,13 +137,13 @@ H5Dcreate1(hid_t loc_id, const char *name, hid_t type_id, hid_t space_id, hid_t
if (NULL == (vol_obj = H5VL_vol_object(loc_id)))
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, H5I_INVALID_HID, "invalid location identifier")
- /* Create the dataset through the VOL */
+ /* Create the dataset */
if (NULL == (dset = H5VL_dataset_create(vol_obj, &loc_params, name, H5P_LINK_CREATE_DEFAULT, type_id,
space_id, dcpl_id, H5P_DATASET_ACCESS_DEFAULT,
H5P_DATASET_XFER_DEFAULT, H5_REQUEST_NULL)))
HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, H5I_INVALID_HID, "unable to create dataset")
- /* Get an atom for the dataset */
+ /* Register the new dataset to get an ID for it */
if ((ret_value = H5VL_register(H5I_DATASET, dset, vol_obj->connector, TRUE)) < 0)
HGOTO_ERROR(H5E_DATASET, H5E_CANTREGISTER, H5I_INVALID_HID, "unable to register dataset")
diff --git a/src/H5Dearray.c b/src/H5Dearray.c
index 162018a..8a30054 100644
--- a/src/H5Dearray.c
+++ b/src/H5Dearray.c
@@ -417,8 +417,8 @@ H5D__earray_debug(FILE *stream, int indent, int fwidth, hsize_t idx, const void
HDassert(elmt);
/* Print element */
- HDsprintf(temp_str, "Element #%llu:", (unsigned long long)idx);
- HDfprintf(stream, "%*s%-*s %a\n", indent, "", fwidth, temp_str, *(const haddr_t *)elmt);
+ HDsprintf(temp_str, "Element #%" PRIuHSIZE ":", idx);
+ HDfprintf(stream, "%*s%-*s %" PRIuHADDR "\n", indent, "", fwidth, temp_str, *(const haddr_t *)elmt);
FUNC_LEAVE_NOAPI(SUCCEED)
} /* end H5D__earray_debug() */
@@ -573,9 +573,9 @@ H5D__earray_filt_debug(FILE *stream, int indent, int fwidth, hsize_t idx, const
HDassert(elmt);
/* Print element */
- HDsprintf(temp_str, "Element #%llu:", (unsigned long long)idx);
- HDfprintf(stream, "%*s%-*s {%a, %u, %0x}\n", indent, "", fwidth, temp_str, elmt->addr, elmt->nbytes,
- elmt->filter_mask);
+ HDsprintf(temp_str, "Element #%" PRIuHSIZE ":", idx);
+ HDfprintf(stream, "%*s%-*s {%" PRIuHADDR ", %u, %0x}\n", indent, "", fwidth, temp_str, elmt->addr,
+ elmt->nbytes, elmt->filter_mask);
FUNC_LEAVE_NOAPI(SUCCEED)
} /* end H5D__earray_filt_debug() */
@@ -1742,7 +1742,7 @@ H5D__earray_idx_dump(const H5O_storage_chunk_t *storage, FILE *stream)
HDassert(storage);
HDassert(stream);
- HDfprintf(stream, " Address: %a\n", storage->idx_addr);
+ HDfprintf(stream, " Address: %" PRIuHADDR "\n", storage->idx_addr);
FUNC_LEAVE_NOAPI(SUCCEED)
} /* end H5D__earray_idx_dump() */
diff --git a/src/H5Dfarray.c b/src/H5Dfarray.c
index 8c23634..bf1274f 100644
--- a/src/H5Dfarray.c
+++ b/src/H5Dfarray.c
@@ -415,8 +415,8 @@ H5D__farray_debug(FILE *stream, int indent, int fwidth, hsize_t idx, const void
HDassert(elmt);
/* Print element */
- HDsprintf(temp_str, "Element #%llu:", (unsigned long long)idx);
- HDfprintf(stream, "%*s%-*s %a\n", indent, "", fwidth, temp_str, *(const haddr_t *)elmt);
+ HDsprintf(temp_str, "Element #%" PRIuHSIZE ":", idx);
+ HDfprintf(stream, "%*s%-*s %" PRIuHADDR "\n", indent, "", fwidth, temp_str, *(const haddr_t *)elmt);
FUNC_LEAVE_NOAPI(SUCCEED)
} /* end H5D__farray_debug() */
@@ -675,9 +675,9 @@ H5D__farray_filt_debug(FILE *stream, int indent, int fwidth, hsize_t idx, const
HDassert(elmt);
/* Print element */
- HDsprintf(temp_str, "Element #%llu:", (unsigned long long)idx);
- HDfprintf(stream, "%*s%-*s {%a, %u, %0x}\n", indent, "", fwidth, temp_str, elmt->addr, elmt->nbytes,
- elmt->filter_mask);
+ HDsprintf(temp_str, "Element #%" PRIuHSIZE ":", idx);
+ HDfprintf(stream, "%*s%-*s {%" PRIuHADDR ", %u, %0x}\n", indent, "", fwidth, temp_str, elmt->addr,
+ elmt->nbytes, elmt->filter_mask);
FUNC_LEAVE_NOAPI(SUCCEED)
} /* end H5D__farray_filt_debug() */
@@ -1591,7 +1591,7 @@ H5D__farray_idx_dump(const H5O_storage_chunk_t *storage, FILE *stream)
HDassert(storage);
HDassert(stream);
- HDfprintf(stream, " Address: %a\n", storage->idx_addr);
+ HDfprintf(stream, " Address: %" PRIuHADDR "\n", storage->idx_addr);
FUNC_LEAVE_NOAPI(SUCCEED)
} /* end H5D__farray_idx_dump() */
diff --git a/src/H5Dmpio.c b/src/H5Dmpio.c
index 3bed43f..df7c829 100644
--- a/src/H5Dmpio.c
+++ b/src/H5Dmpio.c
@@ -1091,7 +1091,7 @@ H5D__link_chunk_collective_io(H5D_io_info_t *io_info, const H5D_type_info_t *typ
#ifdef H5D_DEBUG
if (H5DEBUG(D))
- HDfprintf(H5DEBUG(D), "total_chunks = %Zu, num_chunk = %Zu\n", total_chunks, num_chunk);
+ HDfprintf(H5DEBUG(D), "total_chunks = %zu, num_chunk = %zu\n", total_chunks, num_chunk);
#endif
/* Set up MPI datatype for chunks selected */
@@ -1571,7 +1571,7 @@ H5D__multi_chunk_collective_io(H5D_io_info_t *io_info, const H5D_type_info_t *ty
chunk_addr = (haddr_t *)H5MM_calloc(total_chunk * sizeof(haddr_t));
#ifdef H5D_DEBUG
if (H5DEBUG(D))
- HDfprintf(H5DEBUG(D), "total_chunk %Zu\n", total_chunk);
+ HDfprintf(H5DEBUG(D), "total_chunk %zu\n", total_chunk);
#endif
/* Obtain IO option for each chunk */
@@ -1605,7 +1605,7 @@ H5D__multi_chunk_collective_io(H5D_io_info_t *io_info, const H5D_type_info_t *ty
#ifdef H5D_DEBUG
if (H5DEBUG(D))
- HDfprintf(H5DEBUG(D), "mpi_rank = %d, chunk index = %Zu\n", mpi_rank, u);
+ HDfprintf(H5DEBUG(D), "mpi_rank = %d, chunk index = %zu\n", mpi_rank, u);
#endif
/* Get the chunk info for this chunk, if there are elements selected */
chunk_info = fm->select_chunk[u];
@@ -1625,7 +1625,7 @@ H5D__multi_chunk_collective_io(H5D_io_info_t *io_info, const H5D_type_info_t *ty
if (chunk_io_option[u] == H5D_CHUNK_IO_MODE_COL) {
#ifdef H5D_DEBUG
if (H5DEBUG(D))
- HDfprintf(H5DEBUG(D), "inside collective chunk IO mpi_rank = %d, chunk index = %Zu\n",
+ HDfprintf(H5DEBUG(D), "inside collective chunk IO mpi_rank = %d, chunk index = %zu\n",
mpi_rank, u);
#endif
@@ -1664,7 +1664,7 @@ H5D__multi_chunk_collective_io(H5D_io_info_t *io_info, const H5D_type_info_t *ty
else { /* possible independent IO for this chunk */
#ifdef H5D_DEBUG
if (H5DEBUG(D))
- HDfprintf(H5DEBUG(D), "inside independent IO mpi_rank = %d, chunk index = %Zu\n", mpi_rank,
+ HDfprintf(H5DEBUG(D), "inside independent IO mpi_rank = %d, chunk index = %zu\n", mpi_rank,
u);
#endif
diff --git a/src/H5Dnone.c b/src/H5Dnone.c
index fad1c1e..82fbffb 100644
--- a/src/H5Dnone.c
+++ b/src/H5Dnone.c
@@ -470,7 +470,7 @@ H5D__none_idx_dump(const H5O_storage_chunk_t *storage, FILE *stream)
HDassert(storage);
HDassert(stream);
- HDfprintf(stream, " Address: %a\n", storage->idx_addr);
+ HDfprintf(stream, " Address: %" PRIuHADDR "\n", storage->idx_addr);
FUNC_LEAVE_NOAPI(SUCCEED)
} /* end H5D__none_idx_dump() */
diff --git a/src/H5Dsingle.c b/src/H5Dsingle.c
index 1f354fe..2996ca5 100644
--- a/src/H5Dsingle.c
+++ b/src/H5Dsingle.c
@@ -521,7 +521,7 @@ H5D__single_idx_dump(const H5O_storage_chunk_t *storage, FILE *stream)
HDassert(storage);
HDassert(stream);
- HDfprintf(stream, " Address: %a\n", storage->idx_addr);
+ HDfprintf(stream, " Address: %" PRIuHADDR "\n", storage->idx_addr);
FUNC_LEAVE_NOAPI(SUCCEED)
} /* end H5D__single_idx_dump() */
diff --git a/src/H5E.c b/src/H5E.c
index 8333572..731d263 100644
--- a/src/H5E.c
+++ b/src/H5E.c
@@ -49,7 +49,6 @@
/* Headers */
/***********/
#include "H5private.h" /* Generic Functions */
-#include "H5CXprivate.h" /* API Contexts */
#include "H5Epkg.h" /* Error handling */
#include "H5FLprivate.h" /* Free lists */
#include "H5Iprivate.h" /* IDs */
@@ -498,9 +497,9 @@ done:
*
* Purpose: Closes an error class.
*
- * Return: SUCCEED/FAIL
+ * Return: Non-negative value on success/Negative on failure
*
- * Programmer: Raymond Lu
+ * Programmer: Raymond Lu
* Friday, July 11, 2003
*
*-------------------------------------------------------------------------
@@ -1014,9 +1013,9 @@ done:
* Purpose: Replaces current stack with specified stack. This closes the
* stack ID also.
*
- * Return: SUCCEED/FAIL
+ * Return: Non-negative value on success/Negative on failure
*
- * Programmer: Raymond Lu
+ * Programmer: Raymond Lu
* Friday, July 15, 2003
*
*-------------------------------------------------------------------------
@@ -1119,9 +1118,9 @@ done:
*
* Purpose: Closes an error stack.
*
- * Return: SUCCEED/FAIL
+ * Return: Non-negative value on success/Negative on failure
*
- * Programmer: Raymond Lu
+ * Programmer: Raymond Lu
* Friday, July 14, 2003
*
*-------------------------------------------------------------------------
@@ -1254,9 +1253,9 @@ H5E__get_num(const H5E_t *estack)
*
* Purpose: Deletes some error messages from the top of error stack.
*
- * Return: SUCCEED/FAIL
+ * Return: Non-negative value on success/Negative on failure
*
- * Programmer: Raymond Lu
+ * Programmer: Raymond Lu
* Friday, July 16, 2003
*
*-------------------------------------------------------------------------
@@ -1309,9 +1308,9 @@ done:
* function name, file name, and error description strings must
* be statically allocated.
*
- * Return: SUCCEED/FAIL
+ * Return: Non-negative on success/Negative on failure
*
- * Programmer: Quincey Koziol
+ * Programmer: Quincey Koziol
* Monday, October 18, 1999
*
* Notes: Basically a new public API wrapper around the H5E__push_stack
@@ -1323,12 +1322,8 @@ herr_t
H5Epush2(hid_t err_stack, const char *file, const char *func, unsigned line, hid_t cls_id, hid_t maj_id,
hid_t min_id, const char *fmt, ...)
{
- va_list ap; /* Varargs info */
- H5E_t * estack; /* Pointer to error stack to modify */
-#ifndef H5_HAVE_VASPRINTF
- int tmp_len; /* Current size of description buffer */
- int desc_len; /* Actual length of description when formatted */
-#endif /* H5_HAVE_VASPRINTF */
+ va_list ap; /* Varargs info */
+ H5E_t * estack; /* Pointer to error stack to modify */
char * tmp = NULL; /* Buffer to place formatted description in */
hbool_t va_started = FALSE; /* Whether the variable argument list is open */
herr_t ret_value = SUCCEED; /* Return value */
@@ -1357,31 +1352,9 @@ H5Epush2(hid_t err_stack, const char *file, const char *func, unsigned line, hid
HDva_start(ap, fmt);
va_started = TRUE;
-#ifdef H5_HAVE_VASPRINTF
/* Use the vasprintf() routine, since it does what we're trying to do below */
if (HDvasprintf(&tmp, fmt, ap) < 0)
HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed")
-#else /* H5_HAVE_VASPRINTF */
- /* Allocate space for the formatted description buffer */
- tmp_len = 128;
- if (NULL == (tmp = H5MM_malloc((size_t)tmp_len)))
- HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed")
-
- /* If the description doesn't fit into the initial buffer size, allocate more space and try again */
- while ((desc_len = HDvsnprintf(tmp, (size_t)tmp_len, fmt, ap)) > (tmp_len - 1)) {
- /* shutdown & restart the va_list */
- HDva_end(ap);
- HDva_start(ap, fmt);
-
- /* Release the previous description, it's too small */
- H5MM_xfree(tmp);
-
- /* Allocate a description of the appropriate length */
- tmp_len = desc_len + 1;
- if (NULL == (tmp = H5MM_malloc((size_t)tmp_len)))
- HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed")
- } /* end while */
-#endif /* H5_HAVE_VASPRINTF */
/* Push the error on the stack */
if (H5E__push_stack(estack, file, func, line, cls_id, maj_id, min_id, tmp) < 0)
@@ -1390,16 +1363,11 @@ H5Epush2(hid_t err_stack, const char *file, const char *func, unsigned line, hid
done:
if (va_started)
HDva_end(ap);
-#ifdef H5_HAVE_VASPRINTF
/* Memory was allocated with HDvasprintf so it needs to be freed
* with HDfree
*/
if (tmp)
HDfree(tmp);
-#else /* H5_HAVE_VASPRINTF */
- if (tmp)
- H5MM_xfree(tmp);
-#endif /* H5_HAVE_VASPRINTF */
FUNC_LEAVE_API(ret_value)
} /* end H5Epush2() */
@@ -1409,9 +1377,9 @@ done:
*
* Purpose: Clears the error stack for the specified error stack.
*
- * Return: SUCCEED/FAIL
+ * Return: Non-negative on success/Negative on failure
*
- * Programmer: Raymond Lu
+ * Programmer: Raymond Lu
* Wednesday, July 16, 2003
*
*-------------------------------------------------------------------------
@@ -1453,9 +1421,9 @@ done:
* prints error messages. Users are encouraged to write their
* own more specific error handlers.
*
- * Return: SUCCEED/FAIL
+ * Return: Non-negative on success/Negative on failure
*
- * Programmer: Robb Matzke
+ * Programmer: Robb Matzke
* Friday, February 27, 1998
*
*-------------------------------------------------------------------------
@@ -1498,9 +1466,9 @@ done:
* Purpose: Walks the error stack for the current thread and calls some
* function for each error along the way.
*
- * Return: SUCCEED/FAIL
+ * Return: Non-negative on success/Negative on failure
*
- * Programmer: Robb Matzke
+ * Programmer: Robb Matzke
* Friday, February 27, 1998
*
*-------------------------------------------------------------------------
@@ -1548,7 +1516,7 @@ done:
* Either (or both) arguments may be null in which case the
* value is not returned.
*
- * Return: SUCCEED/FAIL
+ * Return: Non-negative value on success/Negative on failure
*
* Programmer: Robb Matzke
* Saturday, February 28, 1998
@@ -1605,7 +1573,7 @@ done:
* Automatic stack traversal is always in the H5E_WALK_DOWNWARD
* direction.
*
- * Return: SUCCEED/FAIL
+ * Return: Non-negative value on success/Negative on failure
*
* Programmer: Robb Matzke
* Friday, February 27, 1998
@@ -1663,7 +1631,7 @@ done:
* or the H5E_auto_t typedef. The IS_STACK parameter is set
* to 1 for the first case and 0 for the latter case.
*
- * Return: SUCCEED/FAIL
+ * Return: Non-negative value on success/Negative on failure
*
* Programmer: Quincey Koziol
* Wednesday, September 8, 2004
diff --git a/src/H5EA.c b/src/H5EA.c
index f246686..f601e28 100644
--- a/src/H5EA.c
+++ b/src/H5EA.c
@@ -119,50 +119,50 @@ H5FL_BLK_DEFINE(ea_native_elmt);
BEGIN_FUNC(STATIC, ERR, H5EA_t *, NULL, NULL,
H5EA__new(H5F_t *f, haddr_t ea_addr, hbool_t from_open, void *ctx_udata))
-/* Local variables */
-H5EA_t * ea = NULL; /* Pointer to new extensible array */
-H5EA_hdr_t *hdr = NULL; /* The extensible array header information */
+ /* Local variables */
+ H5EA_t * ea = NULL; /* Pointer to new extensible array */
+ H5EA_hdr_t *hdr = NULL; /* The extensible array header information */
-/*
- * Check arguments.
- */
-HDassert(f);
-HDassert(H5F_addr_defined(ea_addr));
+ /*
+ * Check arguments.
+ */
+ HDassert(f);
+ HDassert(H5F_addr_defined(ea_addr));
-/* Allocate extensible array wrapper */
-if (NULL == (ea = H5FL_CALLOC(H5EA_t)))
- H5E_THROW(H5E_CANTALLOC, "memory allocation failed for extensible array info")
+ /* Allocate extensible array wrapper */
+ if (NULL == (ea = H5FL_CALLOC(H5EA_t)))
+ H5E_THROW(H5E_CANTALLOC, "memory allocation failed for extensible array info")
-/* Lock the array header into memory */
-if (NULL == (hdr = H5EA__hdr_protect(f, ea_addr, ctx_udata, H5AC__READ_ONLY_FLAG)))
- H5E_THROW(H5E_CANTPROTECT, "unable to load extensible array header")
+ /* Lock the array header into memory */
+ if (NULL == (hdr = H5EA__hdr_protect(f, ea_addr, ctx_udata, H5AC__READ_ONLY_FLAG)))
+ H5E_THROW(H5E_CANTPROTECT, "unable to load extensible array header")
-/* Check for pending array deletion */
-if (from_open && hdr->pending_delete)
- H5E_THROW(H5E_CANTOPENOBJ, "can't open extensible array pending deletion")
+ /* Check for pending array deletion */
+ if (from_open && hdr->pending_delete)
+ H5E_THROW(H5E_CANTOPENOBJ, "can't open extensible array pending deletion")
-/* Point extensible array wrapper at header and bump it's ref count */
-ea->hdr = hdr;
-if (H5EA__hdr_incr(ea->hdr) < 0)
- H5E_THROW(H5E_CANTINC, "can't increment reference count on shared array header")
+ /* Point extensible array wrapper at header and bump it's ref count */
+ ea->hdr = hdr;
+ if (H5EA__hdr_incr(ea->hdr) < 0)
+ H5E_THROW(H5E_CANTINC, "can't increment reference count on shared array header")
-/* Increment # of files using this array header */
-if (H5EA__hdr_fuse_incr(ea->hdr) < 0)
- H5E_THROW(H5E_CANTINC, "can't increment file reference count on shared array header")
+ /* Increment # of files using this array header */
+ if (H5EA__hdr_fuse_incr(ea->hdr) < 0)
+ H5E_THROW(H5E_CANTINC, "can't increment file reference count on shared array header")
-/* Set file pointer for this array open context */
-ea->f = f;
+ /* Set file pointer for this array open context */
+ ea->f = f;
-/* Set the return value */
-ret_value = ea;
+ /* Set the return value */
+ ret_value = ea;
-CATCH
+ CATCH
-if (hdr && H5EA__hdr_unprotect(hdr, H5AC__NO_FLAGS_SET) < 0)
- H5E_THROW(H5E_CANTUNPROTECT, "unable to release extensible array header")
-if (!ret_value)
- if (ea && H5EA_close(ea) < 0)
- H5E_THROW(H5E_CLOSEERROR, "unable to close extensible array")
+ if (hdr && H5EA__hdr_unprotect(hdr, H5AC__NO_FLAGS_SET) < 0)
+ H5E_THROW(H5E_CANTUNPROTECT, "unable to release extensible array header")
+ if (!ret_value)
+ if (ea && H5EA_close(ea) < 0)
+ H5E_THROW(H5E_CLOSEERROR, "unable to close extensible array")
END_FUNC(STATIC) /* end H5EA__new() */
@@ -182,35 +182,35 @@ END_FUNC(STATIC) /* end H5EA__new() */
BEGIN_FUNC(PRIV, ERR, H5EA_t *, NULL, NULL,
H5EA_create(H5F_t *f, const H5EA_create_t *cparam, void *ctx_udata))
-/* Local variables */
-H5EA_t *ea = NULL; /* Pointer to new extensible array */
-haddr_t ea_addr; /* Array header address */
+ /* Local variables */
+ H5EA_t *ea = NULL; /* Pointer to new extensible array */
+ haddr_t ea_addr; /* Array header address */
-/*
- * Check arguments.
- */
-HDassert(f);
-HDassert(cparam);
+ /*
+ * Check arguments.
+ */
+ HDassert(f);
+ HDassert(cparam);
-/* H5EA interface sanity check */
-HDcompile_assert(H5EA_NUM_CLS_ID == NELMTS(H5EA_client_class_g));
+ /* H5EA interface sanity check */
+ HDcompile_assert(H5EA_NUM_CLS_ID == NELMTS(H5EA_client_class_g));
-/* Create extensible array header */
-if (HADDR_UNDEF == (ea_addr = H5EA__hdr_create(f, cparam, ctx_udata)))
- H5E_THROW(H5E_CANTINIT, "can't create extensible array header")
+ /* Create extensible array header */
+ if (HADDR_UNDEF == (ea_addr = H5EA__hdr_create(f, cparam, ctx_udata)))
+ H5E_THROW(H5E_CANTINIT, "can't create extensible array header")
-/* Allocate and initialize new extensible array wrapper */
-if (NULL == (ea = H5EA__new(f, ea_addr, FALSE, ctx_udata)))
- H5E_THROW(H5E_CANTINIT, "allocation and/or initialization failed for extensible array wrapper")
+ /* Allocate and initialize new extensible array wrapper */
+ if (NULL == (ea = H5EA__new(f, ea_addr, FALSE, ctx_udata)))
+ H5E_THROW(H5E_CANTINIT, "allocation and/or initialization failed for extensible array wrapper")
-/* Set the return value */
-ret_value = ea;
+ /* Set the return value */
+ ret_value = ea;
-CATCH
+ CATCH
-if (!ret_value)
- if (ea && H5EA_close(ea) < 0)
- H5E_THROW(H5E_CLOSEERROR, "unable to close extensible array")
+ if (!ret_value)
+ if (ea && H5EA_close(ea) < 0)
+ H5E_THROW(H5E_CLOSEERROR, "unable to close extensible array")
END_FUNC(PRIV) /* end H5EA_create() */
@@ -229,27 +229,27 @@ END_FUNC(PRIV) /* end H5EA_create() */
*/
BEGIN_FUNC(PRIV, ERR, H5EA_t *, NULL, NULL, H5EA_open(H5F_t *f, haddr_t ea_addr, void *ctx_udata))
-/* Local variables */
-H5EA_t *ea = NULL; /* Pointer to new extensible array wrapper */
+ /* Local variables */
+ H5EA_t *ea = NULL; /* Pointer to new extensible array wrapper */
-/*
- * Check arguments.
- */
-HDassert(f);
-HDassert(H5F_addr_defined(ea_addr));
+ /*
+ * Check arguments.
+ */
+ HDassert(f);
+ HDassert(H5F_addr_defined(ea_addr));
-/* Allocate and initialize new extensible array wrapper */
-if (NULL == (ea = H5EA__new(f, ea_addr, TRUE, ctx_udata)))
- H5E_THROW(H5E_CANTINIT, "allocation and/or initialization failed for extensible array wrapper")
+ /* Allocate and initialize new extensible array wrapper */
+ if (NULL == (ea = H5EA__new(f, ea_addr, TRUE, ctx_udata)))
+ H5E_THROW(H5E_CANTINIT, "allocation and/or initialization failed for extensible array wrapper")
-/* Set the return value */
-ret_value = ea;
+ /* Set the return value */
+ ret_value = ea;
-CATCH
+ CATCH
-if (!ret_value)
- if (ea && H5EA_close(ea) < 0)
- H5E_THROW(H5E_CLOSEERROR, "unable to close extensible array")
+ if (!ret_value)
+ if (ea && H5EA_close(ea) < 0)
+ H5E_THROW(H5E_CLOSEERROR, "unable to close extensible array")
END_FUNC(PRIV) /* end H5EA_open() */
@@ -267,16 +267,16 @@ END_FUNC(PRIV) /* end H5EA_open() */
*/
BEGIN_FUNC(PRIV, NOERR, herr_t, SUCCEED, -, H5EA_get_nelmts(const H5EA_t *ea, hsize_t *nelmts))
-/* Local variables */
+ /* Local variables */
-/*
- * Check arguments.
- */
-HDassert(ea);
-HDassert(nelmts);
+ /*
+ * Check arguments.
+ */
+ HDassert(ea);
+ HDassert(nelmts);
-/* Retrieve the max. index set */
-*nelmts = ea->hdr->stats.stored.max_idx_set;
+ /* Retrieve the max. index set */
+ *nelmts = ea->hdr->stats.stored.max_idx_set;
END_FUNC(PRIV) /* end H5EA_get_nelmts() */
@@ -294,17 +294,17 @@ END_FUNC(PRIV) /* end H5EA_get_nelmts() */
*/
BEGIN_FUNC(PRIV, NOERR, herr_t, SUCCEED, -, H5EA_get_addr(const H5EA_t *ea, haddr_t *addr))
-/* Local variables */
+ /* Local variables */
-/*
- * Check arguments.
- */
-HDassert(ea);
-HDassert(ea->hdr);
-HDassert(addr);
+ /*
+ * Check arguments.
+ */
+ HDassert(ea);
+ HDassert(ea->hdr);
+ HDassert(addr);
-/* Retrieve the address of the extensible array's header */
-*addr = ea->hdr->addr;
+ /* Retrieve the address of the extensible array's header */
+ *addr = ea->hdr->addr;
END_FUNC(PRIV) /* end H5EA_get_addr() */
@@ -326,263 +326,114 @@ BEGIN_FUNC(STATIC, ERR, herr_t, SUCCEED, FAIL,
void **thing, uint8_t **thing_elmt_buf, hsize_t *thing_elmt_idx,
H5EA__unprotect_func_t *thing_unprot_func))
-/* Local variables */
-H5EA_hdr_t * hdr = ea->hdr; /* Header for EA */
-H5EA_iblock_t * iblock = NULL; /* Pointer to index block for EA */
-H5EA_sblock_t * sblock = NULL; /* Pointer to super block for EA */
-H5EA_dblock_t * dblock = NULL; /* Pointer to data block for EA */
-H5EA_dblk_page_t *dblk_page = NULL; /* Pointer to data block page for EA */
-unsigned iblock_cache_flags = H5AC__NO_FLAGS_SET; /* Flags to unprotecting index block */
-unsigned sblock_cache_flags = H5AC__NO_FLAGS_SET; /* Flags to unprotecting super block */
-hbool_t stats_changed = FALSE; /* Whether array statistics changed */
-hbool_t hdr_dirty = FALSE; /* Whether the array header changed */
-
-/*
- * Check arguments.
- */
-HDassert(ea);
-HDassert(hdr);
-HDassert(thing);
-HDassert(thing_elmt_buf);
-HDassert(thing_unprot_func);
-
-/* only the H5AC__READ_ONLY_FLAG may be set in thing_acc */
-HDassert((thing_acc & (unsigned)(~H5AC__READ_ONLY_FLAG)) == 0);
-
-/* Set the shared array header's file context for this operation */
-hdr->f = ea->f;
-
-/* Reset the pointers to the 'thing' info */
-*thing = NULL;
-*thing_elmt_buf = NULL;
-*thing_elmt_idx = 0;
-*thing_unprot_func = (H5EA__unprotect_func_t)NULL;
-
-/* Check if we should create the index block */
-if (!H5F_addr_defined(hdr->idx_blk_addr)) {
- /* Check if we are allowed to create the thing */
- if (0 == (thing_acc & H5AC__READ_ONLY_FLAG)) { /* i.e. r/w access */
- /* Create the index block */
- hdr->idx_blk_addr = H5EA__iblock_create(hdr, &stats_changed);
- if (!H5F_addr_defined(hdr->idx_blk_addr))
- H5E_THROW(H5E_CANTCREATE, "unable to create index block")
- hdr_dirty = TRUE;
- } /* end if */
- else
- H5_LEAVE(SUCCEED)
-} /* end if */
-
-/* Protect index block */
-if (NULL == (iblock = H5EA__iblock_protect(hdr, thing_acc)))
- H5E_THROW(H5E_CANTPROTECT, "unable to protect extensible array index block, address = %llu",
- (unsigned long long)hdr->idx_blk_addr)
-
-/* Check if element is in index block */
-if (idx < hdr->cparam.idx_blk_elmts) {
- /* Set 'thing' info to refer to the index block */
- *thing = iblock;
- *thing_elmt_buf = (uint8_t *)iblock->elmts;
- *thing_elmt_idx = idx;
- *thing_unprot_func = (H5EA__unprotect_func_t)H5EA__iblock_unprotect;
-} /* end if */
-else {
- unsigned sblk_idx; /* Which superblock does this index fall in? */
- size_t dblk_idx; /* Data block index */
- hsize_t elmt_idx; /* Offset of element in super block */
-
- /* Get super block index where element is located */
- sblk_idx = H5EA__dblock_sblk_idx(hdr, idx);
-
- /* Adjust index to offset in super block */
- elmt_idx = idx - (hdr->cparam.idx_blk_elmts + hdr->sblk_info[sblk_idx].start_idx);
-
- /* Check for data block containing element address in the index block */
- if (sblk_idx < iblock->nsblks) {
- /* Compute the data block index in index block */
- dblk_idx =
- (size_t)(hdr->sblk_info[sblk_idx].start_dblk + (elmt_idx / hdr->sblk_info[sblk_idx].dblk_nelmts));
- HDassert(dblk_idx < iblock->ndblk_addrs);
-
- /* Check if the data block has been allocated on disk yet */
- if (!H5F_addr_defined(iblock->dblk_addrs[dblk_idx])) {
- /* Check if we are allowed to create the thing */
- if (0 == (thing_acc & H5AC__READ_ONLY_FLAG)) { /* i.e. r/w access */
- haddr_t dblk_addr; /* Address of data block created */
- hsize_t dblk_off; /* Offset of data block in array */
-
- /* Create data block */
- dblk_off =
- hdr->sblk_info[sblk_idx].start_idx + (dblk_idx * hdr->sblk_info[sblk_idx].dblk_nelmts);
- dblk_addr = H5EA__dblock_create(hdr, iblock, &stats_changed, dblk_off,
- hdr->sblk_info[sblk_idx].dblk_nelmts);
- if (!H5F_addr_defined(dblk_addr))
- H5E_THROW(H5E_CANTCREATE, "unable to create extensible array data block")
-
- /* Set data block address in index block */
- iblock->dblk_addrs[dblk_idx] = dblk_addr;
- iblock_cache_flags |= H5AC__DIRTIED_FLAG;
- } /* end if */
- else
- H5_LEAVE(SUCCEED)
- } /* end if */
-
- /* Protect data block */
- if (NULL == (dblock = H5EA__dblock_protect(hdr, iblock, iblock->dblk_addrs[dblk_idx],
- hdr->sblk_info[sblk_idx].dblk_nelmts, thing_acc)))
- H5E_THROW(H5E_CANTPROTECT, "unable to protect extensible array data block, address = %llu",
- (unsigned long long)iblock->dblk_addrs[dblk_idx])
-
- /* Adjust index to offset in data block */
- elmt_idx %= hdr->sblk_info[sblk_idx].dblk_nelmts;
-
- /* Check if there is already a dependency on the header */
- if (will_extend && !dblock->has_hdr_depend) {
- if (H5EA__create_flush_depend((H5AC_info_t *)hdr, (H5AC_info_t *)dblock) < 0)
- H5E_THROW(H5E_CANTDEPEND,
- "unable to create flush dependency between data block and header, index = %llu",
- (unsigned long long)idx)
- dblock->has_hdr_depend = TRUE;
- } /* end if */
-
- /* Set 'thing' info to refer to the data block */
- *thing = dblock;
- *thing_elmt_buf = (uint8_t *)dblock->elmts;
- *thing_elmt_idx = elmt_idx;
- *thing_unprot_func = (H5EA__unprotect_func_t)H5EA__dblock_unprotect;
- } /* end if */
- else {
- size_t sblk_off; /* Offset of super block in index block array of super blocks */
-
- /* Calculate offset of super block in index block's array */
- sblk_off = sblk_idx - iblock->nsblks;
-
- /* Check if the super block has been allocated on disk yet */
- if (!H5F_addr_defined(iblock->sblk_addrs[sblk_off])) {
- /* Check if we are allowed to create the thing */
- if (0 == (thing_acc & H5AC__READ_ONLY_FLAG)) { /* i.e. r/w access */
- haddr_t sblk_addr; /* Address of data block created */
+ /* Local variables */
+ H5EA_hdr_t * hdr = ea->hdr; /* Header for EA */
+ H5EA_iblock_t * iblock = NULL; /* Pointer to index block for EA */
+ H5EA_sblock_t * sblock = NULL; /* Pointer to super block for EA */
+ H5EA_dblock_t * dblock = NULL; /* Pointer to data block for EA */
+ H5EA_dblk_page_t *dblk_page = NULL; /* Pointer to data block page for EA */
+ unsigned iblock_cache_flags = H5AC__NO_FLAGS_SET; /* Flags to unprotecting index block */
+ unsigned sblock_cache_flags = H5AC__NO_FLAGS_SET; /* Flags to unprotecting super block */
+ hbool_t stats_changed = FALSE; /* Whether array statistics changed */
+ hbool_t hdr_dirty = FALSE; /* Whether the array header changed */
+
+ /*
+ * Check arguments.
+ */
+ HDassert(ea);
+ HDassert(hdr);
+ HDassert(thing);
+ HDassert(thing_elmt_buf);
+ HDassert(thing_unprot_func);
+
+ /* only the H5AC__READ_ONLY_FLAG may be set in thing_acc */
+ HDassert((thing_acc & (unsigned)(~H5AC__READ_ONLY_FLAG)) == 0);
- /* Create super block */
- sblk_addr = H5EA__sblock_create(hdr, iblock, &stats_changed, sblk_idx);
- if (!H5F_addr_defined(sblk_addr))
- H5E_THROW(H5E_CANTCREATE, "unable to create extensible array super block")
+ /* Set the shared array header's file context for this operation */
+ hdr->f = ea->f;
- /* Set super block address in index block */
- iblock->sblk_addrs[sblk_off] = sblk_addr;
- iblock_cache_flags |= H5AC__DIRTIED_FLAG;
- } /* end if */
- else
- H5_LEAVE(SUCCEED)
- } /* end if */
+ /* Reset the pointers to the 'thing' info */
+ *thing = NULL;
+ *thing_elmt_buf = NULL;
+ *thing_elmt_idx = 0;
+ *thing_unprot_func = (H5EA__unprotect_func_t)NULL;
- /* Protect super block */
- if (NULL ==
- (sblock = H5EA__sblock_protect(hdr, iblock, iblock->sblk_addrs[sblk_off], sblk_idx, thing_acc)))
- H5E_THROW(H5E_CANTPROTECT, "unable to protect extensible array super block, address = %llu",
- (unsigned long long)iblock->sblk_addrs[sblk_off])
-
- /* Compute the data block index in super block */
- dblk_idx = (size_t)(elmt_idx / sblock->dblk_nelmts);
- HDassert(dblk_idx < sblock->ndblks);
-
- /* Check if the data block has been allocated on disk yet */
- if (!H5F_addr_defined(sblock->dblk_addrs[dblk_idx])) {
- /* Check if we are allowed to create the thing */
- if (0 == (thing_acc & H5AC__READ_ONLY_FLAG)) { /* i.e. r/w access */
- haddr_t dblk_addr; /* Address of data block created */
- hsize_t dblk_off; /* Offset of data block in array */
-
- /* Create data block */
- dblk_off =
- hdr->sblk_info[sblk_idx].start_idx + (dblk_idx * hdr->sblk_info[sblk_idx].dblk_nelmts);
- dblk_addr = H5EA__dblock_create(hdr, sblock, &stats_changed, dblk_off, sblock->dblk_nelmts);
- if (!H5F_addr_defined(dblk_addr))
- H5E_THROW(H5E_CANTCREATE, "unable to create extensible array data block")
-
- /* Set data block address in index block */
- sblock->dblk_addrs[dblk_idx] = dblk_addr;
- sblock_cache_flags |= H5AC__DIRTIED_FLAG;
-
- /* Create flush dependency on header, if extending the array and one doesn't already exist */
- if (will_extend && !sblock->has_hdr_depend) {
- if (H5EA__create_flush_depend((H5AC_info_t *)sblock->hdr, (H5AC_info_t *)sblock) < 0)
- H5E_THROW(H5E_CANTDEPEND,
- "unable to create flush dependency between super block and header, address "
- "= %llu",
- (unsigned long long)sblock->addr)
- sblock->has_hdr_depend = TRUE;
- } /* end if */
- } /* end if */
- else
- H5_LEAVE(SUCCEED)
+ /* Check if we should create the index block */
+ if (!H5F_addr_defined(hdr->idx_blk_addr)) {
+ /* Check if we are allowed to create the thing */
+ if (0 == (thing_acc & H5AC__READ_ONLY_FLAG)) { /* i.e. r/w access */
+ /* Create the index block */
+ hdr->idx_blk_addr = H5EA__iblock_create(hdr, &stats_changed);
+ if (!H5F_addr_defined(hdr->idx_blk_addr))
+ H5E_THROW(H5E_CANTCREATE, "unable to create index block")
+ hdr_dirty = TRUE;
} /* end if */
+ else
+ H5_LEAVE(SUCCEED)
+ } /* end if */
- /* Adjust index to offset in data block */
- elmt_idx %= sblock->dblk_nelmts;
-
- /* Check if the data block is paged */
- if (sblock->dblk_npages) {
- haddr_t dblk_page_addr; /* Address of data block page */
- size_t page_idx; /* Index of page within data block */
- size_t page_init_idx; /* Index of 'page init' bit */
-
- /* Compute page index */
- page_idx = (size_t)elmt_idx / hdr->dblk_page_nelmts;
+ /* Protect index block */
+ if (NULL == (iblock = H5EA__iblock_protect(hdr, thing_acc)))
+ H5E_THROW(H5E_CANTPROTECT, "unable to protect extensible array index block, address = %llu",
+ (unsigned long long)hdr->idx_blk_addr)
+
+ /* Check if element is in index block */
+ if (idx < hdr->cparam.idx_blk_elmts) {
+ /* Set 'thing' info to refer to the index block */
+ *thing = iblock;
+ *thing_elmt_buf = (uint8_t *)iblock->elmts;
+ *thing_elmt_idx = idx;
+ *thing_unprot_func = (H5EA__unprotect_func_t)H5EA__iblock_unprotect;
+ } /* end if */
+ else {
+ unsigned sblk_idx; /* Which superblock does this index fall in? */
+ size_t dblk_idx; /* Data block index */
+ hsize_t elmt_idx; /* Offset of element in super block */
- /* Compute 'page init' index */
- page_init_idx = (dblk_idx * sblock->dblk_npages) + page_idx;
+ /* Get super block index where element is located */
+ sblk_idx = H5EA__dblock_sblk_idx(hdr, idx);
- /* Adjust index to offset in data block page */
- elmt_idx %= hdr->dblk_page_nelmts;
+ /* Adjust index to offset in super block */
+ elmt_idx = idx - (hdr->cparam.idx_blk_elmts + hdr->sblk_info[sblk_idx].start_idx);
- /* Compute data block page address */
- dblk_page_addr = sblock->dblk_addrs[dblk_idx] + H5EA_DBLOCK_PREFIX_SIZE(sblock) +
- (page_idx * sblock->dblk_page_size);
+ /* Check for data block containing element address in the index block */
+ if (sblk_idx < iblock->nsblks) {
+ /* Compute the data block index in index block */
+ dblk_idx = (size_t)(hdr->sblk_info[sblk_idx].start_dblk +
+ (elmt_idx / hdr->sblk_info[sblk_idx].dblk_nelmts));
+ HDassert(dblk_idx < iblock->ndblk_addrs);
- /* Check if page has been initialized yet */
- if (!H5VM_bit_get(sblock->page_init, page_init_idx)) {
+ /* Check if the data block has been allocated on disk yet */
+ if (!H5F_addr_defined(iblock->dblk_addrs[dblk_idx])) {
/* Check if we are allowed to create the thing */
if (0 == (thing_acc & H5AC__READ_ONLY_FLAG)) { /* i.e. r/w access */
- /* Create the data block page */
- if (H5EA__dblk_page_create(hdr, sblock, dblk_page_addr) < 0)
- H5E_THROW(H5E_CANTCREATE, "unable to create data block page")
-
- /* Mark data block page as initialized in super block */
- H5VM_bit_set(sblock->page_init, page_init_idx, TRUE);
- sblock_cache_flags |= H5AC__DIRTIED_FLAG;
+ haddr_t dblk_addr; /* Address of data block created */
+ hsize_t dblk_off; /* Offset of data block in array */
+
+ /* Create data block */
+ dblk_off = hdr->sblk_info[sblk_idx].start_idx +
+ (dblk_idx * hdr->sblk_info[sblk_idx].dblk_nelmts);
+ dblk_addr = H5EA__dblock_create(hdr, iblock, &stats_changed, dblk_off,
+ hdr->sblk_info[sblk_idx].dblk_nelmts);
+ if (!H5F_addr_defined(dblk_addr))
+ H5E_THROW(H5E_CANTCREATE, "unable to create extensible array data block")
+
+ /* Set data block address in index block */
+ iblock->dblk_addrs[dblk_idx] = dblk_addr;
+ iblock_cache_flags |= H5AC__DIRTIED_FLAG;
} /* end if */
else
H5_LEAVE(SUCCEED)
} /* end if */
- /* Protect data block page */
- if (NULL == (dblk_page = H5EA__dblk_page_protect(hdr, sblock, dblk_page_addr, thing_acc)))
- H5E_THROW(H5E_CANTPROTECT,
- "unable to protect extensible array data block page, address = %llu",
- (unsigned long long)dblk_page_addr)
-
- /* Check if there is already a dependency on the header */
- if (will_extend && !dblk_page->has_hdr_depend) {
- if (H5EA__create_flush_depend((H5AC_info_t *)hdr, (H5AC_info_t *)dblk_page) < 0)
- H5E_THROW(
- H5E_CANTDEPEND,
- "unable to create flush dependency between data block page and header, index = %llu",
- (unsigned long long)idx)
- dblk_page->has_hdr_depend = TRUE;
- } /* end if */
-
- /* Set 'thing' info to refer to the data block page */
- *thing = dblk_page;
- *thing_elmt_buf = (uint8_t *)dblk_page->elmts;
- *thing_elmt_idx = elmt_idx;
- *thing_unprot_func = (H5EA__unprotect_func_t)H5EA__dblk_page_unprotect;
- } /* end if */
- else {
/* Protect data block */
- if (NULL == (dblock = H5EA__dblock_protect(hdr, sblock, sblock->dblk_addrs[dblk_idx],
- sblock->dblk_nelmts, thing_acc)))
+ if (NULL == (dblock = H5EA__dblock_protect(hdr, iblock, iblock->dblk_addrs[dblk_idx],
+ hdr->sblk_info[sblk_idx].dblk_nelmts, thing_acc)))
H5E_THROW(H5E_CANTPROTECT, "unable to protect extensible array data block, address = %llu",
- (unsigned long long)sblock->dblk_addrs[dblk_idx])
+ (unsigned long long)iblock->dblk_addrs[dblk_idx])
+
+ /* Adjust index to offset in data block */
+ elmt_idx %= hdr->sblk_info[sblk_idx].dblk_nelmts;
/* Check if there is already a dependency on the header */
if (will_extend && !dblock->has_hdr_depend) {
@@ -598,42 +449,196 @@ else {
*thing_elmt_buf = (uint8_t *)dblock->elmts;
*thing_elmt_idx = elmt_idx;
*thing_unprot_func = (H5EA__unprotect_func_t)H5EA__dblock_unprotect;
- } /* end else */
- } /* end else */
-} /* end else */
+ } /* end if */
+ else {
+ size_t sblk_off; /* Offset of super block in index block array of super blocks */
-/* Sanity checks */
-HDassert(*thing != NULL);
-HDassert(*thing_unprot_func != NULL);
+ /* Calculate offset of super block in index block's array */
+ sblk_off = sblk_idx - iblock->nsblks;
-CATCH
-/* Reset 'thing' info on error */
-if (ret_value < 0) {
- *thing = NULL;
- *thing_elmt_buf = NULL;
- *thing_elmt_idx = 0;
- *thing_unprot_func = (H5EA__unprotect_func_t)NULL;
-} /* end if */
-
-/* Check for updating array statistics */
-if (stats_changed)
- hdr_dirty = TRUE;
-
-/* Check for header modified */
-if (hdr_dirty)
- if (H5EA__hdr_modified(hdr) < 0)
- H5E_THROW(H5E_CANTMARKDIRTY, "unable to mark extensible array header as modified")
-
-/* Release resources */
-if (iblock && *thing != iblock && H5EA__iblock_unprotect(iblock, iblock_cache_flags) < 0)
- H5E_THROW(H5E_CANTUNPROTECT, "unable to release extensible array index block")
-/* (Note: super blocks don't contain elements, so don't have a '*thing != sblock' check) */
-if (sblock && H5EA__sblock_unprotect(sblock, sblock_cache_flags) < 0)
- H5E_THROW(H5E_CANTUNPROTECT, "unable to release extensible array super block")
-if (dblock && *thing != dblock && H5EA__dblock_unprotect(dblock, H5AC__NO_FLAGS_SET) < 0)
- H5E_THROW(H5E_CANTUNPROTECT, "unable to release extensible array data block")
-if (dblk_page && *thing != dblk_page && H5EA__dblk_page_unprotect(dblk_page, H5AC__NO_FLAGS_SET) < 0)
- H5E_THROW(H5E_CANTUNPROTECT, "unable to release extensible array data block page")
+ /* Check if the super block has been allocated on disk yet */
+ if (!H5F_addr_defined(iblock->sblk_addrs[sblk_off])) {
+ /* Check if we are allowed to create the thing */
+ if (0 == (thing_acc & H5AC__READ_ONLY_FLAG)) { /* i.e. r/w access */
+ haddr_t sblk_addr; /* Address of data block created */
+
+ /* Create super block */
+ sblk_addr = H5EA__sblock_create(hdr, iblock, &stats_changed, sblk_idx);
+ if (!H5F_addr_defined(sblk_addr))
+ H5E_THROW(H5E_CANTCREATE, "unable to create extensible array super block")
+
+ /* Set super block address in index block */
+ iblock->sblk_addrs[sblk_off] = sblk_addr;
+ iblock_cache_flags |= H5AC__DIRTIED_FLAG;
+ } /* end if */
+ else
+ H5_LEAVE(SUCCEED)
+ } /* end if */
+
+ /* Protect super block */
+ if (NULL == (sblock = H5EA__sblock_protect(hdr, iblock, iblock->sblk_addrs[sblk_off], sblk_idx,
+ thing_acc)))
+ H5E_THROW(H5E_CANTPROTECT, "unable to protect extensible array super block, address = %llu",
+ (unsigned long long)iblock->sblk_addrs[sblk_off])
+
+ /* Compute the data block index in super block */
+ dblk_idx = (size_t)(elmt_idx / sblock->dblk_nelmts);
+ HDassert(dblk_idx < sblock->ndblks);
+
+ /* Check if the data block has been allocated on disk yet */
+ if (!H5F_addr_defined(sblock->dblk_addrs[dblk_idx])) {
+ /* Check if we are allowed to create the thing */
+ if (0 == (thing_acc & H5AC__READ_ONLY_FLAG)) { /* i.e. r/w access */
+ haddr_t dblk_addr; /* Address of data block created */
+ hsize_t dblk_off; /* Offset of data block in array */
+
+ /* Create data block */
+ dblk_off = hdr->sblk_info[sblk_idx].start_idx +
+ (dblk_idx * hdr->sblk_info[sblk_idx].dblk_nelmts);
+ dblk_addr =
+ H5EA__dblock_create(hdr, sblock, &stats_changed, dblk_off, sblock->dblk_nelmts);
+ if (!H5F_addr_defined(dblk_addr))
+ H5E_THROW(H5E_CANTCREATE, "unable to create extensible array data block")
+
+ /* Set data block address in index block */
+ sblock->dblk_addrs[dblk_idx] = dblk_addr;
+ sblock_cache_flags |= H5AC__DIRTIED_FLAG;
+
+ /* Create flush dependency on header, if extending the array and one doesn't already exist
+ */
+ if (will_extend && !sblock->has_hdr_depend) {
+ if (H5EA__create_flush_depend((H5AC_info_t *)sblock->hdr, (H5AC_info_t *)sblock) < 0)
+ H5E_THROW(
+ H5E_CANTDEPEND,
+ "unable to create flush dependency between super block and header, address "
+ "= %llu",
+ (unsigned long long)sblock->addr)
+ sblock->has_hdr_depend = TRUE;
+ } /* end if */
+ } /* end if */
+ else
+ H5_LEAVE(SUCCEED)
+ } /* end if */
+
+ /* Adjust index to offset in data block */
+ elmt_idx %= sblock->dblk_nelmts;
+
+ /* Check if the data block is paged */
+ if (sblock->dblk_npages) {
+ haddr_t dblk_page_addr; /* Address of data block page */
+ size_t page_idx; /* Index of page within data block */
+ size_t page_init_idx; /* Index of 'page init' bit */
+
+ /* Compute page index */
+ page_idx = (size_t)elmt_idx / hdr->dblk_page_nelmts;
+
+ /* Compute 'page init' index */
+ page_init_idx = (dblk_idx * sblock->dblk_npages) + page_idx;
+
+ /* Adjust index to offset in data block page */
+ elmt_idx %= hdr->dblk_page_nelmts;
+
+ /* Compute data block page address */
+ dblk_page_addr = sblock->dblk_addrs[dblk_idx] + H5EA_DBLOCK_PREFIX_SIZE(sblock) +
+ (page_idx * sblock->dblk_page_size);
+
+ /* Check if page has been initialized yet */
+ if (!H5VM_bit_get(sblock->page_init, page_init_idx)) {
+ /* Check if we are allowed to create the thing */
+ if (0 == (thing_acc & H5AC__READ_ONLY_FLAG)) { /* i.e. r/w access */
+ /* Create the data block page */
+ if (H5EA__dblk_page_create(hdr, sblock, dblk_page_addr) < 0)
+ H5E_THROW(H5E_CANTCREATE, "unable to create data block page")
+
+ /* Mark data block page as initialized in super block */
+ H5VM_bit_set(sblock->page_init, page_init_idx, TRUE);
+ sblock_cache_flags |= H5AC__DIRTIED_FLAG;
+ } /* end if */
+ else
+ H5_LEAVE(SUCCEED)
+ } /* end if */
+
+ /* Protect data block page */
+ if (NULL == (dblk_page = H5EA__dblk_page_protect(hdr, sblock, dblk_page_addr, thing_acc)))
+ H5E_THROW(H5E_CANTPROTECT,
+ "unable to protect extensible array data block page, address = %llu",
+ (unsigned long long)dblk_page_addr)
+
+ /* Check if there is already a dependency on the header */
+ if (will_extend && !dblk_page->has_hdr_depend) {
+ if (H5EA__create_flush_depend((H5AC_info_t *)hdr, (H5AC_info_t *)dblk_page) < 0)
+ H5E_THROW(H5E_CANTDEPEND,
+ "unable to create flush dependency between data block page and header, "
+ "index = %llu",
+ (unsigned long long)idx)
+ dblk_page->has_hdr_depend = TRUE;
+ } /* end if */
+
+ /* Set 'thing' info to refer to the data block page */
+ *thing = dblk_page;
+ *thing_elmt_buf = (uint8_t *)dblk_page->elmts;
+ *thing_elmt_idx = elmt_idx;
+ *thing_unprot_func = (H5EA__unprotect_func_t)H5EA__dblk_page_unprotect;
+ } /* end if */
+ else {
+ /* Protect data block */
+ if (NULL == (dblock = H5EA__dblock_protect(hdr, sblock, sblock->dblk_addrs[dblk_idx],
+ sblock->dblk_nelmts, thing_acc)))
+ H5E_THROW(H5E_CANTPROTECT,
+ "unable to protect extensible array data block, address = %llu",
+ (unsigned long long)sblock->dblk_addrs[dblk_idx])
+
+ /* Check if there is already a dependency on the header */
+ if (will_extend && !dblock->has_hdr_depend) {
+ if (H5EA__create_flush_depend((H5AC_info_t *)hdr, (H5AC_info_t *)dblock) < 0)
+ H5E_THROW(
+ H5E_CANTDEPEND,
+ "unable to create flush dependency between data block and header, index = %llu",
+ (unsigned long long)idx)
+ dblock->has_hdr_depend = TRUE;
+ } /* end if */
+
+ /* Set 'thing' info to refer to the data block */
+ *thing = dblock;
+ *thing_elmt_buf = (uint8_t *)dblock->elmts;
+ *thing_elmt_idx = elmt_idx;
+ *thing_unprot_func = (H5EA__unprotect_func_t)H5EA__dblock_unprotect;
+ } /* end else */
+ } /* end else */
+ } /* end else */
+
+ /* Sanity checks */
+ HDassert(*thing != NULL);
+ HDassert(*thing_unprot_func != NULL);
+
+ CATCH
+ /* Reset 'thing' info on error */
+ if (ret_value < 0) {
+ *thing = NULL;
+ *thing_elmt_buf = NULL;
+ *thing_elmt_idx = 0;
+ *thing_unprot_func = (H5EA__unprotect_func_t)NULL;
+ } /* end if */
+
+ /* Check for updating array statistics */
+ if (stats_changed)
+ hdr_dirty = TRUE;
+
+ /* Check for header modified */
+ if (hdr_dirty)
+ if (H5EA__hdr_modified(hdr) < 0)
+ H5E_THROW(H5E_CANTMARKDIRTY, "unable to mark extensible array header as modified")
+
+ /* Release resources */
+ if (iblock && *thing != iblock && H5EA__iblock_unprotect(iblock, iblock_cache_flags) < 0)
+ H5E_THROW(H5E_CANTUNPROTECT, "unable to release extensible array index block")
+ /* (Note: super blocks don't contain elements, so don't have a '*thing != sblock' check) */
+ if (sblock && H5EA__sblock_unprotect(sblock, sblock_cache_flags) < 0)
+ H5E_THROW(H5E_CANTUNPROTECT, "unable to release extensible array super block")
+ if (dblock && *thing != dblock && H5EA__dblock_unprotect(dblock, H5AC__NO_FLAGS_SET) < 0)
+ H5E_THROW(H5E_CANTUNPROTECT, "unable to release extensible array data block")
+ if (dblk_page && *thing != dblk_page && H5EA__dblk_page_unprotect(dblk_page, H5AC__NO_FLAGS_SET) < 0)
+ H5E_THROW(H5E_CANTUNPROTECT, "unable to release extensible array data block page")
END_FUNC(STATIC) /* end H5EA__lookup_elmt() */
@@ -651,52 +656,52 @@ END_FUNC(STATIC) /* end H5EA__lookup_elmt() */
*/
BEGIN_FUNC(PRIV, ERR, herr_t, SUCCEED, FAIL, H5EA_set(const H5EA_t *ea, hsize_t idx, const void *elmt))
-/* Local variables */
-H5EA_hdr_t *hdr = ea->hdr; /* Header for EA */
-void * thing = NULL; /* Pointer to the array metadata containing the array index we are interested in */
-uint8_t * thing_elmt_buf; /* Pointer to the element buffer for the array metadata */
-hsize_t thing_elmt_idx; /* Index of the element in the element buffer for the array metadata */
-H5EA__unprotect_func_t thing_unprot_func; /* Function pointer for unprotecting the array metadata */
-hbool_t will_extend; /* Flag indicating if setting the element will extend the array */
-unsigned thing_cache_flags = H5AC__NO_FLAGS_SET; /* Flags for unprotecting array metadata */
-
-/*
- * Check arguments.
- */
-HDassert(ea);
-HDassert(hdr);
-
-/* Set the shared array header's file context for this operation */
-hdr->f = ea->f;
-
-/* Look up the array metadata containing the element we want to set */
-will_extend = (idx >= hdr->stats.stored.max_idx_set);
-if (H5EA__lookup_elmt(ea, idx, will_extend, H5AC__NO_FLAGS_SET, &thing, &thing_elmt_buf, &thing_elmt_idx,
- &thing_unprot_func) < 0)
- H5E_THROW(H5E_CANTPROTECT, "unable to protect array metadata")
-
-/* Sanity check */
-HDassert(thing);
-HDassert(thing_elmt_buf);
-HDassert(thing_unprot_func);
-
-/* Set element in thing's element buffer */
-H5MM_memcpy(thing_elmt_buf + (hdr->cparam.cls->nat_elmt_size * thing_elmt_idx), elmt,
- hdr->cparam.cls->nat_elmt_size);
-thing_cache_flags |= H5AC__DIRTIED_FLAG;
-
-/* Update max. element set in array, if appropriate */
-if (will_extend) {
- /* Update the max index for the array */
- hdr->stats.stored.max_idx_set = idx + 1;
- if (H5EA__hdr_modified(hdr) < 0)
- H5E_THROW(H5E_CANTMARKDIRTY, "unable to mark extensible array header as modified")
-} /* end if */
-
-CATCH
-/* Release resources */
-if (thing && (thing_unprot_func)(thing, thing_cache_flags) < 0)
- H5E_THROW(H5E_CANTUNPROTECT, "unable to release extensible array metadata")
+ /* Local variables */
+ H5EA_hdr_t *hdr = ea->hdr; /* Header for EA */
+ void * thing = NULL; /* Pointer to the array metadata containing the array index we are interested in */
+ uint8_t *thing_elmt_buf; /* Pointer to the element buffer for the array metadata */
+ hsize_t thing_elmt_idx; /* Index of the element in the element buffer for the array metadata */
+ H5EA__unprotect_func_t thing_unprot_func; /* Function pointer for unprotecting the array metadata */
+ hbool_t will_extend; /* Flag indicating if setting the element will extend the array */
+ unsigned thing_cache_flags = H5AC__NO_FLAGS_SET; /* Flags for unprotecting array metadata */
+
+ /*
+ * Check arguments.
+ */
+ HDassert(ea);
+ HDassert(hdr);
+
+ /* Set the shared array header's file context for this operation */
+ hdr->f = ea->f;
+
+ /* Look up the array metadata containing the element we want to set */
+ will_extend = (idx >= hdr->stats.stored.max_idx_set);
+ if (H5EA__lookup_elmt(ea, idx, will_extend, H5AC__NO_FLAGS_SET, &thing, &thing_elmt_buf, &thing_elmt_idx,
+ &thing_unprot_func) < 0)
+ H5E_THROW(H5E_CANTPROTECT, "unable to protect array metadata")
+
+ /* Sanity check */
+ HDassert(thing);
+ HDassert(thing_elmt_buf);
+ HDassert(thing_unprot_func);
+
+ /* Set element in thing's element buffer */
+ H5MM_memcpy(thing_elmt_buf + (hdr->cparam.cls->nat_elmt_size * thing_elmt_idx), elmt,
+ hdr->cparam.cls->nat_elmt_size);
+ thing_cache_flags |= H5AC__DIRTIED_FLAG;
+
+ /* Update max. element set in array, if appropriate */
+ if (will_extend) {
+ /* Update the max index for the array */
+ hdr->stats.stored.max_idx_set = idx + 1;
+ if (H5EA__hdr_modified(hdr) < 0)
+ H5E_THROW(H5E_CANTMARKDIRTY, "unable to mark extensible array header as modified")
+ } /* end if */
+
+ CATCH
+ /* Release resources */
+ if (thing && (thing_unprot_func)(thing, thing_cache_flags) < 0)
+ H5E_THROW(H5E_CANTUNPROTECT, "unable to release extensible array metadata")
END_FUNC(PRIV) /* end H5EA_set() */
@@ -714,51 +719,51 @@ END_FUNC(PRIV) /* end H5EA_set() */
*/
BEGIN_FUNC(PRIV, ERR, herr_t, SUCCEED, FAIL, H5EA_get(const H5EA_t *ea, hsize_t idx, void *elmt))
-/* Local variables */
-H5EA_hdr_t *hdr = ea->hdr; /* Header for EA */
-void * thing = NULL; /* Pointer to the array metadata containing the array index we are interested in */
-H5EA__unprotect_func_t thing_unprot_func; /* Function pointer for unprotecting the array metadata */
-
-/*
- * Check arguments.
- */
-HDassert(ea);
-HDassert(hdr);
-
-/* Check for element beyond max. element in array */
-if (idx >= hdr->stats.stored.max_idx_set) {
- /* Call the class's 'fill' callback */
- if ((hdr->cparam.cls->fill)(elmt, (size_t)1) < 0)
- H5E_THROW(H5E_CANTSET, "can't set element to class's fill value")
-} /* end if */
-else {
- uint8_t *thing_elmt_buf; /* Pointer to the element buffer for the array metadata */
- hsize_t thing_elmt_idx; /* Index of the element in the element buffer for the array metadata */
-
- /* Set the shared array header's file context for this operation */
- hdr->f = ea->f;
+ /* Local variables */
+ H5EA_hdr_t *hdr = ea->hdr; /* Header for EA */
+ void *thing = NULL; /* Pointer to the array metadata containing the array index we are interested in */
+ H5EA__unprotect_func_t thing_unprot_func; /* Function pointer for unprotecting the array metadata */
- /* Look up the array metadata containing the element we want to set */
- if (H5EA__lookup_elmt(ea, idx, FALSE, H5AC__READ_ONLY_FLAG, &thing, &thing_elmt_buf, &thing_elmt_idx,
- &thing_unprot_func) < 0)
- H5E_THROW(H5E_CANTPROTECT, "unable to protect array metadata")
+ /*
+ * Check arguments.
+ */
+ HDassert(ea);
+ HDassert(hdr);
- /* Check if the thing holding the element has been created yet */
- if (NULL == thing) {
+ /* Check for element beyond max. element in array */
+ if (idx >= hdr->stats.stored.max_idx_set) {
/* Call the class's 'fill' callback */
if ((hdr->cparam.cls->fill)(elmt, (size_t)1) < 0)
H5E_THROW(H5E_CANTSET, "can't set element to class's fill value")
} /* end if */
- else
- /* Get element from thing's element buffer */
- H5MM_memcpy(elmt, thing_elmt_buf + (hdr->cparam.cls->nat_elmt_size * thing_elmt_idx),
- hdr->cparam.cls->nat_elmt_size);
-} /* end else */
+ else {
+ uint8_t *thing_elmt_buf; /* Pointer to the element buffer for the array metadata */
+ hsize_t thing_elmt_idx; /* Index of the element in the element buffer for the array metadata */
+
+ /* Set the shared array header's file context for this operation */
+ hdr->f = ea->f;
+
+ /* Look up the array metadata containing the element we want to set */
+ if (H5EA__lookup_elmt(ea, idx, FALSE, H5AC__READ_ONLY_FLAG, &thing, &thing_elmt_buf, &thing_elmt_idx,
+ &thing_unprot_func) < 0)
+ H5E_THROW(H5E_CANTPROTECT, "unable to protect array metadata")
+
+ /* Check if the thing holding the element has been created yet */
+ if (NULL == thing) {
+ /* Call the class's 'fill' callback */
+ if ((hdr->cparam.cls->fill)(elmt, (size_t)1) < 0)
+ H5E_THROW(H5E_CANTSET, "can't set element to class's fill value")
+ } /* end if */
+ else
+ /* Get element from thing's element buffer */
+ H5MM_memcpy(elmt, thing_elmt_buf + (hdr->cparam.cls->nat_elmt_size * thing_elmt_idx),
+ hdr->cparam.cls->nat_elmt_size);
+ } /* end else */
-CATCH
-/* Release thing */
-if (thing && (thing_unprot_func)(thing, H5AC__NO_FLAGS_SET) < 0)
- H5E_THROW(H5E_CANTUNPROTECT, "unable to release extensible array metadata")
+ CATCH
+ /* Release thing */
+ if (thing && (thing_unprot_func)(thing, H5AC__NO_FLAGS_SET) < 0)
+ H5E_THROW(H5E_CANTUNPROTECT, "unable to release extensible array metadata")
END_FUNC(PRIV) /* end H5EA_get() */
@@ -777,35 +782,35 @@ END_FUNC(PRIV) /* end H5EA_get() */
*/
BEGIN_FUNC(PRIV, ERR, herr_t, SUCCEED, FAIL, H5EA_depend(H5EA_t *ea, H5AC_proxy_entry_t *parent))
-/* Local variables */
-H5EA_hdr_t *hdr = ea->hdr; /* Header for EA */
+ /* Local variables */
+ H5EA_hdr_t *hdr = ea->hdr; /* Header for EA */
+
+ /*
+ * Check arguments.
+ */
+ HDassert(ea);
+ HDassert(hdr);
+ HDassert(parent);
+
+ /*
+ * Check to see if a flush dependency between the extensible array
+ * and another data structure in the file has already been set up.
+ * If it hasn't, do so now.
+ */
+ if (NULL == hdr->parent) {
+ /* Sanity check */
+ HDassert(hdr->top_proxy);
-/*
- * Check arguments.
- */
-HDassert(ea);
-HDassert(hdr);
-HDassert(parent);
-
-/*
- * Check to see if a flush dependency between the extensible array
- * and another data structure in the file has already been set up.
- * If it hasn't, do so now.
- */
-if (NULL == hdr->parent) {
- /* Sanity check */
- HDassert(hdr->top_proxy);
-
- /* Set the shared array header's file context for this operation */
- hdr->f = ea->f;
+ /* Set the shared array header's file context for this operation */
+ hdr->f = ea->f;
- /* Add the extensible array as a child of the parent (proxy) */
- if (H5AC_proxy_entry_add_child(parent, hdr->f, hdr->top_proxy) < 0)
- H5E_THROW(H5E_CANTSET, "unable to add extensible array as child of proxy")
- hdr->parent = parent;
-} /* end if */
+ /* Add the extensible array as a child of the parent (proxy) */
+ if (H5AC_proxy_entry_add_child(parent, hdr->f, hdr->top_proxy) < 0)
+ H5E_THROW(H5E_CANTSET, "unable to add extensible array as child of proxy")
+ hdr->parent = parent;
+ } /* end if */
-CATCH
+ CATCH
END_FUNC(PRIV) /* end H5EA_depend() */
@@ -823,87 +828,88 @@ END_FUNC(PRIV) /* end H5EA_depend() */
*/
BEGIN_FUNC(PRIV, ERR, herr_t, SUCCEED, FAIL, H5EA_close(H5EA_t *ea))
-/* Local variables */
-hbool_t pending_delete = FALSE; /* Whether the array is pending deletion */
-haddr_t ea_addr = HADDR_UNDEF; /* Address of array (for deletion) */
-
-/*
- * Check arguments.
- */
-HDassert(ea);
-
-/* Close the header, if it was set */
-if (ea->hdr) {
- /* Decrement file reference & check if this is the last open extensible array using the shared array
- * header */
- if (0 == H5EA__hdr_fuse_decr(ea->hdr)) {
- /* Set the shared array header's file context for this operation */
- ea->hdr->f = ea->f;
-
- /* Shut down anything that can't be put in the header's 'flush' callback */
+ /* Local variables */
+ hbool_t pending_delete = FALSE; /* Whether the array is pending deletion */
+ haddr_t ea_addr = HADDR_UNDEF; /* Address of array (for deletion) */
+
+ /*
+ * Check arguments.
+ */
+ HDassert(ea);
+
+ /* Close the header, if it was set */
+ if (ea->hdr) {
+ /* Decrement file reference & check if this is the last open extensible array using the shared array
+ * header */
+ if (0 == H5EA__hdr_fuse_decr(ea->hdr)) {
+ /* Set the shared array header's file context for this operation */
+ ea->hdr->f = ea->f;
+
+ /* Shut down anything that can't be put in the header's 'flush' callback */
+
+ /* Check for pending array deletion */
+ if (ea->hdr->pending_delete) {
+ /* Set local info, so array deletion can occur after decrementing the
+ * header's ref count
+ */
+ pending_delete = TRUE;
+ ea_addr = ea->hdr->addr;
+ } /* end if */
+ } /* end if */
/* Check for pending array deletion */
- if (ea->hdr->pending_delete) {
- /* Set local info, so array deletion can occur after decrementing the
- * header's ref count
- */
- pending_delete = TRUE;
- ea_addr = ea->hdr->addr;
- } /* end if */
- } /* end if */
-
- /* Check for pending array deletion */
- if (pending_delete) {
- H5EA_hdr_t *hdr; /* Another pointer to extensible array header */
+ if (pending_delete) {
+ H5EA_hdr_t *hdr; /* Another pointer to extensible array header */
#ifndef NDEBUG
- {
- unsigned hdr_status = 0; /* Header's status in the metadata cache */
-
- /* Check the header's status in the metadata cache */
- if (H5AC_get_entry_status(ea->f, ea_addr, &hdr_status) < 0)
- H5E_THROW(H5E_CANTGET, "unable to check metadata cache status for extensible array header")
-
- /* Sanity checks on header */
- HDassert(hdr_status & H5AC_ES__IN_CACHE);
- HDassert(hdr_status & H5AC_ES__IS_PINNED);
- HDassert(!(hdr_status & H5AC_ES__IS_PROTECTED));
- }
+ {
+ unsigned hdr_status = 0; /* Header's status in the metadata cache */
+
+ /* Check the header's status in the metadata cache */
+ if (H5AC_get_entry_status(ea->f, ea_addr, &hdr_status) < 0)
+ H5E_THROW(H5E_CANTGET,
+ "unable to check metadata cache status for extensible array header")
+
+ /* Sanity checks on header */
+ HDassert(hdr_status & H5AC_ES__IN_CACHE);
+ HDassert(hdr_status & H5AC_ES__IS_PINNED);
+ HDassert(!(hdr_status & H5AC_ES__IS_PROTECTED));
+ }
#endif /* NDEBUG */
- /* Lock the array header into memory */
- /* (OK to pass in NULL for callback context, since we know the header must be in the cache) */
- if (NULL == (hdr = H5EA__hdr_protect(ea->f, ea_addr, NULL, H5AC__NO_FLAGS_SET)))
- H5E_THROW(H5E_CANTLOAD, "unable to load extensible array header")
+ /* Lock the array header into memory */
+ /* (OK to pass in NULL for callback context, since we know the header must be in the cache) */
+ if (NULL == (hdr = H5EA__hdr_protect(ea->f, ea_addr, NULL, H5AC__NO_FLAGS_SET)))
+ H5E_THROW(H5E_CANTLOAD, "unable to load extensible array header")
- /* Set the shared array header's file context for this operation */
- hdr->f = ea->f;
+ /* Set the shared array header's file context for this operation */
+ hdr->f = ea->f;
- /* Decrement the reference count on the array header */
- /* (don't put in H5EA_hdr_fuse_decr() as the array header may be evicted
- * immediately -QAK)
- */
- if (H5EA__hdr_decr(ea->hdr) < 0)
- H5E_THROW(H5E_CANTDEC, "can't decrement reference count on shared array header")
+ /* Decrement the reference count on the array header */
+ /* (don't put in H5EA_hdr_fuse_decr() as the array header may be evicted
+ * immediately -QAK)
+ */
+ if (H5EA__hdr_decr(ea->hdr) < 0)
+ H5E_THROW(H5E_CANTDEC, "can't decrement reference count on shared array header")
- /* Delete array, starting with header (unprotects header) */
- if (H5EA__hdr_delete(hdr) < 0)
- H5E_THROW(H5E_CANTDELETE, "unable to delete extensible array")
- } /* end if */
- else {
- /* Decrement the reference count on the array header */
- /* (don't put in H5EA_hdr_fuse_decr() as the array header may be evicted
- * immediately -QAK)
- */
- if (H5EA__hdr_decr(ea->hdr) < 0)
- H5E_THROW(H5E_CANTDEC, "can't decrement reference count on shared array header")
- } /* end else */
-} /* end if */
+ /* Delete array, starting with header (unprotects header) */
+ if (H5EA__hdr_delete(hdr) < 0)
+ H5E_THROW(H5E_CANTDELETE, "unable to delete extensible array")
+ } /* end if */
+ else {
+ /* Decrement the reference count on the array header */
+ /* (don't put in H5EA_hdr_fuse_decr() as the array header may be evicted
+ * immediately -QAK)
+ */
+ if (H5EA__hdr_decr(ea->hdr) < 0)
+ H5E_THROW(H5E_CANTDEC, "can't decrement reference count on shared array header")
+ } /* end else */
+ } /* end if */
-/* Release the extensible array wrapper */
-ea = (H5EA_t *)H5FL_FREE(H5EA_t, ea);
+ /* Release the extensible array wrapper */
+ ea = (H5EA_t *)H5FL_FREE(H5EA_t, ea);
-CATCH
+ CATCH
END_FUNC(PRIV) /* end H5EA_close() */
@@ -921,38 +927,38 @@ END_FUNC(PRIV) /* end H5EA_close() */
*/
BEGIN_FUNC(PRIV, ERR, herr_t, SUCCEED, FAIL, H5EA_delete(H5F_t *f, haddr_t ea_addr, void *ctx_udata))
-/* Local variables */
-H5EA_hdr_t *hdr = NULL; /* The fractal heap header information */
+ /* Local variables */
+ H5EA_hdr_t *hdr = NULL; /* The fractal heap header information */
-/*
- * Check arguments.
- */
-HDassert(f);
-HDassert(H5F_addr_defined(ea_addr));
-
-/* Lock the array header into memory */
-if (NULL == (hdr = H5EA__hdr_protect(f, ea_addr, ctx_udata, H5AC__NO_FLAGS_SET)))
- H5E_THROW(H5E_CANTPROTECT, "unable to protect extensible array header, address = %llu",
- (unsigned long long)ea_addr)
-
-/* Check for files using shared array header */
-if (hdr->file_rc)
- hdr->pending_delete = TRUE;
-else {
- /* Set the shared array header's file context for this operation */
- hdr->f = f;
+ /*
+ * Check arguments.
+ */
+ HDassert(f);
+ HDassert(H5F_addr_defined(ea_addr));
- /* Delete array now, starting with header (unprotects header) */
- if (H5EA__hdr_delete(hdr) < 0)
- H5E_THROW(H5E_CANTDELETE, "unable to delete extensible array")
- hdr = NULL;
-} /* end if */
+ /* Lock the array header into memory */
+ if (NULL == (hdr = H5EA__hdr_protect(f, ea_addr, ctx_udata, H5AC__NO_FLAGS_SET)))
+ H5E_THROW(H5E_CANTPROTECT, "unable to protect extensible array header, address = %llu",
+ (unsigned long long)ea_addr)
-CATCH
+ /* Check for files using shared array header */
+ if (hdr->file_rc)
+ hdr->pending_delete = TRUE;
+ else {
+ /* Set the shared array header's file context for this operation */
+ hdr->f = f;
+
+ /* Delete array now, starting with header (unprotects header) */
+ if (H5EA__hdr_delete(hdr) < 0)
+ H5E_THROW(H5E_CANTDELETE, "unable to delete extensible array")
+ hdr = NULL;
+ } /* end if */
+
+ CATCH
-/* Unprotect the header, if an error occurred */
-if (hdr && H5EA__hdr_unprotect(hdr, H5AC__NO_FLAGS_SET) < 0)
- H5E_THROW(H5E_CANTUNPROTECT, "unable to release extensible array header")
+ /* Unprotect the header, if an error occurred */
+ if (hdr && H5EA__hdr_unprotect(hdr, H5AC__NO_FLAGS_SET) < 0)
+ H5E_THROW(H5E_CANTUNPROTECT, "unable to release extensible array header")
END_FUNC(PRIV) /* end H5EA_delete() */
@@ -971,37 +977,37 @@ END_FUNC(PRIV) /* end H5EA_delete() */
BEGIN_FUNC(PRIV, ERR, int, H5_ITER_CONT, H5_ITER_ERROR,
H5EA_iterate(H5EA_t *ea, H5EA_operator_t op, void *udata))
-/* Local variables */
-uint8_t *elmt = NULL;
-hsize_t u;
-int cb_ret = H5_ITER_CONT; /* Return value from callback */
-
-/* Check arguments */
-HDassert(ea);
-HDassert(op);
-HDassert(udata);
-
-/* Allocate space for a native array element */
-if (NULL == (elmt = H5FL_BLK_MALLOC(ea_native_elmt, ea->hdr->cparam.cls->nat_elmt_size)))
- H5E_THROW(H5E_CANTALLOC, "memory allocation failed for extensible array element")
-
-/* Iterate over all elements in array */
-for (u = 0; u < ea->hdr->stats.stored.max_idx_set && cb_ret == H5_ITER_CONT; u++) {
- /* Get array element */
- if (H5EA_get(ea, u, elmt) < 0)
- H5E_THROW(H5E_CANTGET, "unable to delete fixed array")
-
- /* Make callback */
- if ((cb_ret = (*op)(u, elmt, udata)) < 0) {
- H5E_PRINTF(H5E_BADITER, "iterator function failed");
- H5_LEAVE(cb_ret)
- } /* end if */
-} /* end for */
+ /* Local variables */
+ uint8_t *elmt = NULL;
+ hsize_t u;
+ int cb_ret = H5_ITER_CONT; /* Return value from callback */
+
+ /* Check arguments */
+ HDassert(ea);
+ HDassert(op);
+ HDassert(udata);
+
+ /* Allocate space for a native array element */
+ if (NULL == (elmt = H5FL_BLK_MALLOC(ea_native_elmt, ea->hdr->cparam.cls->nat_elmt_size)))
+ H5E_THROW(H5E_CANTALLOC, "memory allocation failed for extensible array element")
+
+ /* Iterate over all elements in array */
+ for (u = 0; u < ea->hdr->stats.stored.max_idx_set && cb_ret == H5_ITER_CONT; u++) {
+ /* Get array element */
+ if (H5EA_get(ea, u, elmt) < 0)
+ H5E_THROW(H5E_CANTGET, "unable to delete fixed array")
+
+ /* Make callback */
+ if ((cb_ret = (*op)(u, elmt, udata)) < 0) {
+ H5E_PRINTF(H5E_BADITER, "iterator function failed");
+ H5_LEAVE(cb_ret)
+ } /* end if */
+ } /* end for */
-CATCH
+ CATCH
-if (elmt)
- elmt = H5FL_BLK_FREE(ea_native_elmt, elmt);
+ if (elmt)
+ elmt = H5FL_BLK_FREE(ea_native_elmt, elmt);
END_FUNC(PRIV) /* end H5EA_iterate() */
@@ -1019,15 +1025,15 @@ END_FUNC(PRIV) /* end H5EA_iterate() */
*/
BEGIN_FUNC(PRIV, NOERR, herr_t, SUCCEED, -, H5EA_patch_file(H5EA_t *ea, H5F_t *f))
-/* Local variables */
+ /* Local variables */
-/*
- * Check arguments.
- */
-HDassert(ea);
-HDassert(f);
+ /*
+ * Check arguments.
+ */
+ HDassert(ea);
+ HDassert(f);
-if (ea->f != f || ea->hdr->f != f)
- ea->f = ea->hdr->f = f;
+ if (ea->f != f || ea->hdr->f != f)
+ ea->f = ea->hdr->f = f;
END_FUNC(PRIV) /* end H5EA_patch_file() */
diff --git a/src/H5EAcache.c b/src/H5EAcache.c
index d621483..6316ded 100644
--- a/src/H5EAcache.c
+++ b/src/H5EAcache.c
@@ -224,16 +224,16 @@ const H5AC_class_t H5AC_EARRAY_DBLK_PAGE[1] = {{
BEGIN_FUNC(STATIC, NOERR, herr_t, SUCCEED, -,
H5EA__cache_hdr_get_initial_load_size(void *_udata, size_t *image_len))
-/* Local variables */
-H5EA_hdr_cache_ud_t *udata = (H5EA_hdr_cache_ud_t *)_udata; /* User data for callback */
+ /* Local variables */
+ H5EA_hdr_cache_ud_t *udata = (H5EA_hdr_cache_ud_t *)_udata; /* User data for callback */
-/* Check arguments */
-HDassert(udata);
-HDassert(udata->f);
-HDassert(image_len);
+ /* Check arguments */
+ HDassert(udata);
+ HDassert(udata->f);
+ HDassert(image_len);
-/* Set the image length size */
-*image_len = (size_t)H5EA_HEADER_SIZE_FILE(udata->f);
+ /* Set the image length size */
+ *image_len = (size_t)H5EA_HEADER_SIZE_FILE(udata->f);
END_FUNC(STATIC) /* end H5EA__cache_hdr_get_initial_load_size() */
@@ -253,19 +253,19 @@ END_FUNC(STATIC) /* end H5EA__cache_hdr_get_initial_load_size() */
BEGIN_FUNC(STATIC, NOERR, htri_t, TRUE, -,
H5EA__cache_hdr_verify_chksum(const void *_image, size_t len, void H5_ATTR_UNUSED *_udata))
-/* Local variables */
-const uint8_t *image = (const uint8_t *)_image; /* Pointer into raw data buffer */
-uint32_t stored_chksum; /* Stored metadata checksum value */
-uint32_t computed_chksum; /* Computed metadata checksum value */
+ /* Local variables */
+ const uint8_t *image = (const uint8_t *)_image; /* Pointer into raw data buffer */
+ uint32_t stored_chksum; /* Stored metadata checksum value */
+ uint32_t computed_chksum; /* Computed metadata checksum value */
-/* Check arguments */
-HDassert(image);
+ /* Check arguments */
+ HDassert(image);
-/* Get stored and computed checksums */
-H5F_get_checksums(image, len, &stored_chksum, &computed_chksum);
+ /* Get stored and computed checksums */
+ H5F_get_checksums(image, len, &stored_chksum, &computed_chksum);
-if (stored_chksum != computed_chksum)
- ret_value = FALSE;
+ if (stored_chksum != computed_chksum)
+ ret_value = FALSE;
END_FUNC(STATIC) /* end H5EA__cache_hdr_verify_chksum() */
@@ -286,111 +286,111 @@ BEGIN_FUNC(STATIC, ERR, void *, NULL, NULL,
H5EA__cache_hdr_deserialize(const void *_image, size_t len, void *_udata,
hbool_t H5_ATTR_UNUSED *dirty))
-/* Local variables */
-H5EA_cls_id_t id; /* ID of extensible array class, as found in file */
-H5EA_hdr_t * hdr = NULL; /* Extensible array info */
-H5EA_hdr_cache_ud_t *udata = (H5EA_hdr_cache_ud_t *)_udata;
-const uint8_t * image = (const uint8_t *)_image; /* Pointer into raw data buffer */
-uint32_t stored_chksum; /* Stored metadata checksum value */
-
-/* Check arguments */
-HDassert(image);
-HDassert(udata);
-HDassert(udata->f);
-HDassert(H5F_addr_defined(udata->addr));
-
-/* Allocate space for the extensible array data structure */
-if (NULL == (hdr = H5EA__hdr_alloc(udata->f)))
- H5E_THROW(H5E_CANTALLOC, "memory allocation failed for extensible array shared header")
-
-/* Set the extensible array header's address */
-hdr->addr = udata->addr;
-
-/* Magic number */
-if (HDmemcmp(image, H5EA_HDR_MAGIC, (size_t)H5_SIZEOF_MAGIC))
- H5E_THROW(H5E_BADVALUE, "wrong extensible array header signature")
-image += H5_SIZEOF_MAGIC;
-
-/* Version */
-if (*image++ != H5EA_HDR_VERSION)
- H5E_THROW(H5E_VERSION, "wrong extensible array header version")
-
-/* Extensible array class */
-id = (H5EA_cls_id_t)*image++;
-if (id >= H5EA_NUM_CLS_ID)
- H5E_THROW(H5E_BADTYPE, "incorrect extensible array class")
-hdr->cparam.cls = H5EA_client_class_g[id];
-
-/* General array creation/configuration information */
-hdr->cparam.raw_elmt_size = *image++; /* Element size in file (in bytes) */
-hdr->cparam.max_nelmts_bits =
- *image++; /* Log2(Max. # of elements in array) - i.e. # of bits needed to store max. # of elements */
-hdr->cparam.idx_blk_elmts = *image++; /* # of elements to store in index block */
-hdr->cparam.data_blk_min_elmts = *image++; /* Min. # of elements per data block */
-hdr->cparam.sup_blk_min_data_ptrs = *image++; /* Min. # of data block pointers for a super block */
-hdr->cparam.max_dblk_page_nelmts_bits =
- *image++; /* Log2(Max. # of elements in data block page) - i.e. # of bits needed to store max. # of
- elements in data block page */
-
-/* Array statistics */
-hdr->stats.computed.hdr_size = len; /* Size of header in file */
-H5F_DECODE_LENGTH(udata->f, image, hdr->stats.stored.nsuper_blks); /* Number of super blocks created */
-H5F_DECODE_LENGTH(udata->f, image, hdr->stats.stored.super_blk_size); /* Size of super blocks created */
-H5F_DECODE_LENGTH(udata->f, image, hdr->stats.stored.ndata_blks); /* Number of data blocks created */
-H5F_DECODE_LENGTH(udata->f, image, hdr->stats.stored.data_blk_size); /* Size of data blocks created */
-H5F_DECODE_LENGTH(udata->f, image, hdr->stats.stored.max_idx_set); /* Max. index set (+1) */
-H5F_DECODE_LENGTH(udata->f, image, hdr->stats.stored.nelmts); /* Number of elements 'realized' */
-
-/* Internal information */
-H5F_addr_decode(udata->f, &image, &hdr->idx_blk_addr); /* Address of index block */
-
-/* Index block statistics */
-if (H5F_addr_defined(hdr->idx_blk_addr)) {
- H5EA_iblock_t iblock; /* Fake index block for computing size */
-
- /* Set index block count for file */
- hdr->stats.computed.nindex_blks = 1;
-
- /* Set up fake index block for computing size on disk */
- iblock.hdr = hdr;
- iblock.nsblks = H5EA_SBLK_FIRST_IDX(hdr->cparam.sup_blk_min_data_ptrs);
- iblock.ndblk_addrs = 2 * ((size_t)hdr->cparam.sup_blk_min_data_ptrs - 1);
- iblock.nsblk_addrs = hdr->nsblks - iblock.nsblks;
-
- /* Compute size of index block in file */
- hdr->stats.computed.index_blk_size = H5EA_IBLOCK_SIZE(&iblock);
-} /* end if */
-else {
- hdr->stats.computed.nindex_blks = 0; /* Number of index blocks in file */
- hdr->stats.computed.index_blk_size = 0; /* Size of index blocks in file */
-} /* end else */
-
-/* Sanity check */
-/* (allow for checksum not decoded yet) */
-HDassert((size_t)(image - (const uint8_t *)_image) == (len - H5EA_SIZEOF_CHKSUM));
-
-/* checksum verification already done in verify_chksum cb */
-
-/* Metadata checksum */
-UINT32DECODE(image, stored_chksum);
-
-/* Sanity check */
-HDassert((size_t)(image - (const uint8_t *)_image) == len);
-
-/* Finish initializing extensible array header */
-if (H5EA__hdr_init(hdr, udata->ctx_udata) < 0)
- H5E_THROW(H5E_CANTINIT, "initialization failed for extensible array header")
-HDassert(hdr->size == len);
-
-/* Set return value */
-ret_value = hdr;
-
-CATCH
-
-/* Release resources */
-if (!ret_value)
- if (hdr && H5EA__hdr_dest(hdr) < 0)
- H5E_THROW(H5E_CANTFREE, "unable to destroy extensible array header")
+ /* Local variables */
+ H5EA_cls_id_t id; /* ID of extensible array class, as found in file */
+ H5EA_hdr_t * hdr = NULL; /* Extensible array info */
+ H5EA_hdr_cache_ud_t *udata = (H5EA_hdr_cache_ud_t *)_udata;
+ const uint8_t * image = (const uint8_t *)_image; /* Pointer into raw data buffer */
+ uint32_t stored_chksum; /* Stored metadata checksum value */
+
+ /* Check arguments */
+ HDassert(image);
+ HDassert(udata);
+ HDassert(udata->f);
+ HDassert(H5F_addr_defined(udata->addr));
+
+ /* Allocate space for the extensible array data structure */
+ if (NULL == (hdr = H5EA__hdr_alloc(udata->f)))
+ H5E_THROW(H5E_CANTALLOC, "memory allocation failed for extensible array shared header")
+
+ /* Set the extensible array header's address */
+ hdr->addr = udata->addr;
+
+ /* Magic number */
+ if (HDmemcmp(image, H5EA_HDR_MAGIC, (size_t)H5_SIZEOF_MAGIC))
+ H5E_THROW(H5E_BADVALUE, "wrong extensible array header signature")
+ image += H5_SIZEOF_MAGIC;
+
+ /* Version */
+ if (*image++ != H5EA_HDR_VERSION)
+ H5E_THROW(H5E_VERSION, "wrong extensible array header version")
+
+ /* Extensible array class */
+ id = (H5EA_cls_id_t)*image++;
+ if (id >= H5EA_NUM_CLS_ID)
+ H5E_THROW(H5E_BADTYPE, "incorrect extensible array class")
+ hdr->cparam.cls = H5EA_client_class_g[id];
+
+ /* General array creation/configuration information */
+ hdr->cparam.raw_elmt_size = *image++; /* Element size in file (in bytes) */
+ hdr->cparam.max_nelmts_bits =
+ *image++; /* Log2(Max. # of elements in array) - i.e. # of bits needed to store max. # of elements */
+ hdr->cparam.idx_blk_elmts = *image++; /* # of elements to store in index block */
+ hdr->cparam.data_blk_min_elmts = *image++; /* Min. # of elements per data block */
+ hdr->cparam.sup_blk_min_data_ptrs = *image++; /* Min. # of data block pointers for a super block */
+ hdr->cparam.max_dblk_page_nelmts_bits =
+ *image++; /* Log2(Max. # of elements in data block page) - i.e. # of bits needed to store max. # of
+ elements in data block page */
+
+ /* Array statistics */
+ hdr->stats.computed.hdr_size = len; /* Size of header in file */
+ H5F_DECODE_LENGTH(udata->f, image, hdr->stats.stored.nsuper_blks); /* Number of super blocks created */
+ H5F_DECODE_LENGTH(udata->f, image, hdr->stats.stored.super_blk_size); /* Size of super blocks created */
+ H5F_DECODE_LENGTH(udata->f, image, hdr->stats.stored.ndata_blks); /* Number of data blocks created */
+ H5F_DECODE_LENGTH(udata->f, image, hdr->stats.stored.data_blk_size); /* Size of data blocks created */
+ H5F_DECODE_LENGTH(udata->f, image, hdr->stats.stored.max_idx_set); /* Max. index set (+1) */
+ H5F_DECODE_LENGTH(udata->f, image, hdr->stats.stored.nelmts); /* Number of elements 'realized' */
+
+ /* Internal information */
+ H5F_addr_decode(udata->f, &image, &hdr->idx_blk_addr); /* Address of index block */
+
+ /* Index block statistics */
+ if (H5F_addr_defined(hdr->idx_blk_addr)) {
+ H5EA_iblock_t iblock; /* Fake index block for computing size */
+
+ /* Set index block count for file */
+ hdr->stats.computed.nindex_blks = 1;
+
+ /* Set up fake index block for computing size on disk */
+ iblock.hdr = hdr;
+ iblock.nsblks = H5EA_SBLK_FIRST_IDX(hdr->cparam.sup_blk_min_data_ptrs);
+ iblock.ndblk_addrs = 2 * ((size_t)hdr->cparam.sup_blk_min_data_ptrs - 1);
+ iblock.nsblk_addrs = hdr->nsblks - iblock.nsblks;
+
+ /* Compute size of index block in file */
+ hdr->stats.computed.index_blk_size = H5EA_IBLOCK_SIZE(&iblock);
+ } /* end if */
+ else {
+ hdr->stats.computed.nindex_blks = 0; /* Number of index blocks in file */
+ hdr->stats.computed.index_blk_size = 0; /* Size of index blocks in file */
+ } /* end else */
+
+ /* Sanity check */
+ /* (allow for checksum not decoded yet) */
+ HDassert((size_t)(image - (const uint8_t *)_image) == (len - H5EA_SIZEOF_CHKSUM));
+
+ /* checksum verification already done in verify_chksum cb */
+
+ /* Metadata checksum */
+ UINT32DECODE(image, stored_chksum);
+
+ /* Sanity check */
+ HDassert((size_t)(image - (const uint8_t *)_image) == len);
+
+ /* Finish initializing extensible array header */
+ if (H5EA__hdr_init(hdr, udata->ctx_udata) < 0)
+ H5E_THROW(H5E_CANTINIT, "initialization failed for extensible array header")
+ HDassert(hdr->size == len);
+
+ /* Set return value */
+ ret_value = hdr;
+
+ CATCH
+
+ /* Release resources */
+ if (!ret_value)
+ if (hdr && H5EA__hdr_dest(hdr) < 0)
+ H5E_THROW(H5E_CANTFREE, "unable to destroy extensible array header")
END_FUNC(STATIC) /* end H5EA__cache_hdr_deserialize() */
@@ -409,15 +409,15 @@ END_FUNC(STATIC) /* end H5EA__cache_hdr_deserialize() */
BEGIN_FUNC(STATIC, NOERR, herr_t, SUCCEED, -,
H5EA__cache_hdr_image_len(const void *_thing, size_t *image_len))
-/* Local variables */
-const H5EA_hdr_t *hdr = (const H5EA_hdr_t *)_thing; /* Pointer to the object */
+ /* Local variables */
+ const H5EA_hdr_t *hdr = (const H5EA_hdr_t *)_thing; /* Pointer to the object */
-/* Check arguments */
-HDassert(hdr);
-HDassert(image_len);
+ /* Check arguments */
+ HDassert(hdr);
+ HDassert(image_len);
-/* Set the image length size */
-*image_len = hdr->size;
+ /* Set the image length size */
+ *image_len = hdr->size;
END_FUNC(STATIC) /* end H5EA__cache_hdr_image_len() */
@@ -436,57 +436,57 @@ END_FUNC(STATIC) /* end H5EA__cache_hdr_image_len() */
BEGIN_FUNC(STATIC, NOERR, herr_t, SUCCEED, -,
H5EA__cache_hdr_serialize(const H5F_t *f, void *_image, size_t H5_ATTR_UNUSED len, void *_thing))
-/* Local variables */
-H5EA_hdr_t *hdr = (H5EA_hdr_t *)_thing; /* Pointer to the extensible array header */
-uint8_t * image = (uint8_t *)_image; /* Pointer into raw data buffer */
-uint32_t metadata_chksum; /* Computed metadata checksum value */
-
-/* check arguments */
-HDassert(f);
-HDassert(image);
-HDassert(hdr);
-
-/* Magic number */
-H5MM_memcpy(image, H5EA_HDR_MAGIC, (size_t)H5_SIZEOF_MAGIC);
-image += H5_SIZEOF_MAGIC;
-
-/* Version # */
-*image++ = H5EA_HDR_VERSION;
-
-/* Extensible array type */
-HDassert(hdr->cparam.cls->id <= 255);
-*image++ = (uint8_t)hdr->cparam.cls->id;
-
-/* General array creation/configuration information */
-*image++ = hdr->cparam.raw_elmt_size; /* Element size in file (in bytes) */
-*image++ = hdr->cparam.max_nelmts_bits; /* Log2(Max. # of elements in array) - i.e. # of bits needed to store
- max. # of elements */
-*image++ = hdr->cparam.idx_blk_elmts; /* # of elements to store in index block */
-*image++ = hdr->cparam.data_blk_min_elmts; /* Min. # of elements per data block */
-*image++ = hdr->cparam.sup_blk_min_data_ptrs; /* Min. # of data block pointers for a super block */
-*image++ =
- hdr->cparam.max_dblk_page_nelmts_bits; /* Log2(Max. # of elements in data block page) - i.e. # of bits
- needed to store max. # of elements in data block page */
-
-/* Array statistics */
-H5F_ENCODE_LENGTH(f, image, hdr->stats.stored.nsuper_blks); /* Number of super blocks created */
-H5F_ENCODE_LENGTH(f, image, hdr->stats.stored.super_blk_size); /* Size of super blocks created */
-H5F_ENCODE_LENGTH(f, image, hdr->stats.stored.ndata_blks); /* Number of data blocks created */
-H5F_ENCODE_LENGTH(f, image, hdr->stats.stored.data_blk_size); /* Size of data blocks created */
-H5F_ENCODE_LENGTH(f, image, hdr->stats.stored.max_idx_set); /* Max. index set (+1) */
-H5F_ENCODE_LENGTH(f, image, hdr->stats.stored.nelmts); /* Number of elements 'realized' */
-
-/* Internal information */
-H5F_addr_encode(f, &image, hdr->idx_blk_addr); /* Address of index block */
-
-/* Compute metadata checksum */
-metadata_chksum = H5_checksum_metadata(_image, (size_t)(image - (uint8_t *)_image), 0);
-
-/* Metadata checksum */
-UINT32ENCODE(image, metadata_chksum);
-
-/* Sanity check */
-HDassert((size_t)(image - (uint8_t *)_image) == len);
+ /* Local variables */
+ H5EA_hdr_t *hdr = (H5EA_hdr_t *)_thing; /* Pointer to the extensible array header */
+ uint8_t * image = (uint8_t *)_image; /* Pointer into raw data buffer */
+ uint32_t metadata_chksum; /* Computed metadata checksum value */
+
+ /* check arguments */
+ HDassert(f);
+ HDassert(image);
+ HDassert(hdr);
+
+ /* Magic number */
+ H5MM_memcpy(image, H5EA_HDR_MAGIC, (size_t)H5_SIZEOF_MAGIC);
+ image += H5_SIZEOF_MAGIC;
+
+ /* Version # */
+ *image++ = H5EA_HDR_VERSION;
+
+ /* Extensible array type */
+ HDassert(hdr->cparam.cls->id <= 255);
+ *image++ = (uint8_t)hdr->cparam.cls->id;
+
+ /* General array creation/configuration information */
+ *image++ = hdr->cparam.raw_elmt_size; /* Element size in file (in bytes) */
+ *image++ = hdr->cparam.max_nelmts_bits; /* Log2(Max. # of elements in array) - i.e. # of bits needed to
+ store max. # of elements */
+ *image++ = hdr->cparam.idx_blk_elmts; /* # of elements to store in index block */
+ *image++ = hdr->cparam.data_blk_min_elmts; /* Min. # of elements per data block */
+ *image++ = hdr->cparam.sup_blk_min_data_ptrs; /* Min. # of data block pointers for a super block */
+ *image++ =
+ hdr->cparam.max_dblk_page_nelmts_bits; /* Log2(Max. # of elements in data block page) - i.e. # of bits
+ needed to store max. # of elements in data block page */
+
+ /* Array statistics */
+ H5F_ENCODE_LENGTH(f, image, hdr->stats.stored.nsuper_blks); /* Number of super blocks created */
+ H5F_ENCODE_LENGTH(f, image, hdr->stats.stored.super_blk_size); /* Size of super blocks created */
+ H5F_ENCODE_LENGTH(f, image, hdr->stats.stored.ndata_blks); /* Number of data blocks created */
+ H5F_ENCODE_LENGTH(f, image, hdr->stats.stored.data_blk_size); /* Size of data blocks created */
+ H5F_ENCODE_LENGTH(f, image, hdr->stats.stored.max_idx_set); /* Max. index set (+1) */
+ H5F_ENCODE_LENGTH(f, image, hdr->stats.stored.nelmts); /* Number of elements 'realized' */
+
+ /* Internal information */
+ H5F_addr_encode(f, &image, hdr->idx_blk_addr); /* Address of index block */
+
+ /* Compute metadata checksum */
+ metadata_chksum = H5_checksum_metadata(_image, (size_t)(image - (uint8_t *)_image), 0);
+
+ /* Metadata checksum */
+ UINT32ENCODE(image, metadata_chksum);
+
+ /* Sanity check */
+ HDassert((size_t)(image - (uint8_t *)_image) == len);
END_FUNC(STATIC) /* end H5EA__cache_hdr_serialize() */
@@ -505,66 +505,65 @@ END_FUNC(STATIC) /* end H5EA__cache_hdr_serialize() */
BEGIN_FUNC(STATIC, ERR, herr_t, SUCCEED, FAIL,
H5EA__cache_hdr_notify(H5AC_notify_action_t action, void *_thing))
-/* Local variables */
-H5EA_hdr_t *hdr = (H5EA_hdr_t *)_thing; /* Pointer to the object */
-
-/* Sanity check */
-HDassert(hdr);
-
-/* Check if the file was opened with SWMR-write access */
-if (hdr->swmr_write) {
- /* Determine which action to take */
- switch (action) {
- case H5AC_NOTIFY_ACTION_AFTER_INSERT:
- case H5AC_NOTIFY_ACTION_AFTER_LOAD:
- case H5AC_NOTIFY_ACTION_AFTER_FLUSH:
- case H5AC_NOTIFY_ACTION_ENTRY_DIRTIED:
- case H5AC_NOTIFY_ACTION_ENTRY_CLEANED:
- case H5AC_NOTIFY_ACTION_CHILD_DIRTIED:
- case H5AC_NOTIFY_ACTION_CHILD_CLEANED:
- case H5AC_NOTIFY_ACTION_CHILD_UNSERIALIZED:
- case H5AC_NOTIFY_ACTION_CHILD_SERIALIZED:
- /* do nothing */
- break;
-
- case H5AC_NOTIFY_ACTION_BEFORE_EVICT:
- /* If hdr->parent != NULL, hdr->parent is used to destroy
- * the flush dependency before the header is evicted.
- */
- if (hdr->parent) {
- /* Sanity check */
- HDassert(hdr->top_proxy);
-
- /* Destroy flush dependency on object header proxy */
- if (H5AC_proxy_entry_remove_child((H5AC_proxy_entry_t *)hdr->parent, (void *)hdr->top_proxy) <
- 0)
- H5E_THROW(H5E_CANTUNDEPEND,
- "unable to destroy flush dependency between extensible array and proxy")
- hdr->parent = NULL;
- } /* end if */
-
- /* Detach from 'top' proxy for extensible array */
- if (hdr->top_proxy) {
- if (H5AC_proxy_entry_remove_child(hdr->top_proxy, hdr) < 0)
- H5E_THROW(
- H5E_CANTUNDEPEND,
- "unable to destroy flush dependency between header and extensible array 'top' proxy")
- /* Don't reset hdr->top_proxy here, it's destroyed when the header is freed -QAK */
- } /* end if */
- break;
-
- default:
+ /* Local variables */
+ H5EA_hdr_t *hdr = (H5EA_hdr_t *)_thing; /* Pointer to the object */
+
+ /* Sanity check */
+ HDassert(hdr);
+
+ /* Check if the file was opened with SWMR-write access */
+ if (hdr->swmr_write) {
+ /* Determine which action to take */
+ switch (action) {
+ case H5AC_NOTIFY_ACTION_AFTER_INSERT:
+ case H5AC_NOTIFY_ACTION_AFTER_LOAD:
+ case H5AC_NOTIFY_ACTION_AFTER_FLUSH:
+ case H5AC_NOTIFY_ACTION_ENTRY_DIRTIED:
+ case H5AC_NOTIFY_ACTION_ENTRY_CLEANED:
+ case H5AC_NOTIFY_ACTION_CHILD_DIRTIED:
+ case H5AC_NOTIFY_ACTION_CHILD_CLEANED:
+ case H5AC_NOTIFY_ACTION_CHILD_UNSERIALIZED:
+ case H5AC_NOTIFY_ACTION_CHILD_SERIALIZED:
+ /* do nothing */
+ break;
+
+ case H5AC_NOTIFY_ACTION_BEFORE_EVICT:
+ /* If hdr->parent != NULL, hdr->parent is used to destroy
+ * the flush dependency before the header is evicted.
+ */
+ if (hdr->parent) {
+ /* Sanity check */
+ HDassert(hdr->top_proxy);
+
+ /* Destroy flush dependency on object header proxy */
+ if (H5AC_proxy_entry_remove_child((H5AC_proxy_entry_t *)hdr->parent,
+ (void *)hdr->top_proxy) < 0)
+ H5E_THROW(H5E_CANTUNDEPEND,
+ "unable to destroy flush dependency between extensible array and proxy")
+ hdr->parent = NULL;
+ } /* end if */
+
+ /* Detach from 'top' proxy for extensible array */
+ if (hdr->top_proxy) {
+ if (H5AC_proxy_entry_remove_child(hdr->top_proxy, hdr) < 0)
+ H5E_THROW(H5E_CANTUNDEPEND, "unable to destroy flush dependency between header and "
+ "extensible array 'top' proxy")
+ /* Don't reset hdr->top_proxy here, it's destroyed when the header is freed -QAK */
+ } /* end if */
+ break;
+
+ default:
#ifdef NDEBUG
- H5E_THROW(H5E_BADVALUE, "unknown action from metadata cache")
-#else /* NDEBUG */
- HDassert(0 && "Unknown action?!?");
-#endif /* NDEBUG */
- } /* end switch */
-} /* end if */
-else
- HDassert(NULL == hdr->parent);
+ H5E_THROW(H5E_BADVALUE, "unknown action from metadata cache")
+#else /* NDEBUG */
+ HDassert(0 && "Unknown action?!?");
+#endif /* NDEBUG */
+ } /* end switch */
+ } /* end if */
+ else
+ HDassert(NULL == hdr->parent);
-CATCH
+ CATCH
END_FUNC(STATIC) /* end H5EA__cache_hdr_notify() */
@@ -583,14 +582,14 @@ END_FUNC(STATIC) /* end H5EA__cache_hdr_notify() */
*/
BEGIN_FUNC(STATIC, ERR, herr_t, SUCCEED, FAIL, H5EA__cache_hdr_free_icr(void *thing))
-/* Check arguments */
-HDassert(thing);
+ /* Check arguments */
+ HDassert(thing);
-/* Release the extensible array header */
-if (H5EA__hdr_dest((H5EA_hdr_t *)thing) < 0)
- H5E_THROW(H5E_CANTFREE, "can't free extensible array header")
+ /* Release the extensible array header */
+ if (H5EA__hdr_dest((H5EA_hdr_t *)thing) < 0)
+ H5E_THROW(H5E_CANTFREE, "can't free extensible array header")
-CATCH
+ CATCH
END_FUNC(STATIC) /* end H5EA__cache_hdr_free_icr() */
@@ -609,23 +608,23 @@ END_FUNC(STATIC) /* end H5EA__cache_hdr_free_icr() */
BEGIN_FUNC(STATIC, NOERR, herr_t, SUCCEED, -,
H5EA__cache_iblock_get_initial_load_size(void *_udata, size_t *image_len))
-/* Local variables */
-H5EA_hdr_t * hdr = (H5EA_hdr_t *)_udata; /* User data for callback */
-H5EA_iblock_t iblock; /* Fake index block for computing size */
+ /* Local variables */
+ H5EA_hdr_t * hdr = (H5EA_hdr_t *)_udata; /* User data for callback */
+ H5EA_iblock_t iblock; /* Fake index block for computing size */
-/* Check arguments */
-HDassert(hdr);
-HDassert(image_len);
+ /* Check arguments */
+ HDassert(hdr);
+ HDassert(image_len);
-/* Set up fake index block for computing size on disk */
-HDmemset(&iblock, 0, sizeof(iblock));
-iblock.hdr = (H5EA_hdr_t *)hdr; /* Casting away 'const' OK - QAK */
-iblock.nsblks = H5EA_SBLK_FIRST_IDX(hdr->cparam.sup_blk_min_data_ptrs);
-iblock.ndblk_addrs = 2 * ((size_t)hdr->cparam.sup_blk_min_data_ptrs - 1);
-iblock.nsblk_addrs = hdr->nsblks - iblock.nsblks;
+ /* Set up fake index block for computing size on disk */
+ HDmemset(&iblock, 0, sizeof(iblock));
+ iblock.hdr = (H5EA_hdr_t *)hdr; /* Casting away 'const' OK - QAK */
+ iblock.nsblks = H5EA_SBLK_FIRST_IDX(hdr->cparam.sup_blk_min_data_ptrs);
+ iblock.ndblk_addrs = 2 * ((size_t)hdr->cparam.sup_blk_min_data_ptrs - 1);
+ iblock.nsblk_addrs = hdr->nsblks - iblock.nsblks;
-/* Set the image length size */
-*image_len = (size_t)H5EA_IBLOCK_SIZE(&iblock);
+ /* Set the image length size */
+ *image_len = (size_t)H5EA_IBLOCK_SIZE(&iblock);
END_FUNC(STATIC) /* end H5EA__cache_iblock_get_initial_load_size() */
@@ -645,19 +644,19 @@ END_FUNC(STATIC) /* end H5EA__cache_iblock_get_initial_load_size() */
BEGIN_FUNC(STATIC, NOERR, htri_t, TRUE, -,
H5EA__cache_iblock_verify_chksum(const void *_image, size_t len, void H5_ATTR_UNUSED *_udata))
-/* Local variables */
-const uint8_t *image = (const uint8_t *)_image; /* Pointer into raw data buffer */
-uint32_t stored_chksum; /* Stored metadata checksum value */
-uint32_t computed_chksum; /* Computed metadata checksum value */
+ /* Local variables */
+ const uint8_t *image = (const uint8_t *)_image; /* Pointer into raw data buffer */
+ uint32_t stored_chksum; /* Stored metadata checksum value */
+ uint32_t computed_chksum; /* Computed metadata checksum value */
-/* Check arguments */
-HDassert(image);
+ /* Check arguments */
+ HDassert(image);
-/* Get stored and computed checksums */
-H5F_get_checksums(image, len, &stored_chksum, &computed_chksum);
+ /* Get stored and computed checksums */
+ H5F_get_checksums(image, len, &stored_chksum, &computed_chksum);
-if (stored_chksum != computed_chksum)
- ret_value = FALSE;
+ if (stored_chksum != computed_chksum)
+ ret_value = FALSE;
END_FUNC(STATIC) /* end H5EA__cache_iblock_verify_chksum() */
@@ -678,91 +677,92 @@ BEGIN_FUNC(STATIC, ERR, void *, NULL, NULL,
H5EA__cache_iblock_deserialize(const void *_image, size_t len, void *_udata,
hbool_t H5_ATTR_UNUSED *dirty))
-/* Local variables */
-H5EA_iblock_t *iblock = NULL; /* Index block info */
-H5EA_hdr_t * hdr = (H5EA_hdr_t *)_udata; /* User data for callback */
-const uint8_t *image = (const uint8_t *)_image; /* Pointer into raw data buffer */
-uint32_t stored_chksum; /* Stored metadata checksum value */
-haddr_t arr_addr; /* Address of array header in the file */
-size_t u; /* Local index variable */
-
-/* Check arguments */
-HDassert(image);
-HDassert(hdr);
-
-/* Allocate the extensible array index block */
-if (NULL == (iblock = H5EA__iblock_alloc(hdr)))
- H5E_THROW(H5E_CANTALLOC, "memory allocation failed for extensible array index block")
-
-/* Set the extensible array index block's address */
-iblock->addr = hdr->idx_blk_addr;
-
-/* Magic number */
-if (HDmemcmp(image, H5EA_IBLOCK_MAGIC, (size_t)H5_SIZEOF_MAGIC))
- H5E_THROW(H5E_BADVALUE, "wrong extensible array index block signature")
-image += H5_SIZEOF_MAGIC;
-
-/* Version */
-if (*image++ != H5EA_IBLOCK_VERSION)
- H5E_THROW(H5E_VERSION, "wrong extensible array index block version")
-
-/* Extensible array type */
-if (*image++ != (uint8_t)hdr->cparam.cls->id)
- H5E_THROW(H5E_BADTYPE, "incorrect extensible array class")
-
-/* Address of header for array that owns this block (just for file integrity checks) */
-H5F_addr_decode(hdr->f, &image, &arr_addr);
-if (H5F_addr_ne(arr_addr, hdr->addr))
- H5E_THROW(H5E_BADVALUE, "wrong extensible array header address")
-
-/* Internal information */
-
-/* Decode elements in index block */
-if (hdr->cparam.idx_blk_elmts > 0) {
- /* Convert from raw elements on disk into native elements in memory */
- if ((hdr->cparam.cls->decode)(image, iblock->elmts, (size_t)hdr->cparam.idx_blk_elmts, hdr->cb_ctx) < 0)
- H5E_THROW(H5E_CANTDECODE, "can't decode extensible array index elements")
- image += (hdr->cparam.idx_blk_elmts * hdr->cparam.raw_elmt_size);
-} /* end if */
-
-/* Decode data block addresses in index block */
-if (iblock->ndblk_addrs > 0) {
- /* Decode addresses of data blocks in index block */
- for (u = 0; u < iblock->ndblk_addrs; u++)
- H5F_addr_decode(hdr->f, &image, &iblock->dblk_addrs[u]);
-} /* end if */
-
-/* Decode super block addresses in index block */
-if (iblock->nsblk_addrs > 0) {
- /* Decode addresses of super blocks in index block */
- for (u = 0; u < iblock->nsblk_addrs; u++)
- H5F_addr_decode(hdr->f, &image, &iblock->sblk_addrs[u]);
-} /* end if */
-
-/* Sanity check */
-/* (allow for checksum not decoded yet) */
-HDassert((size_t)(image - (const uint8_t *)_image) == (len - H5EA_SIZEOF_CHKSUM));
-
-/* Save the index block's size */
-iblock->size = len;
-
-/* checksum verification already done in verify_chksum cb */
-
-/* Metadata checksum */
-UINT32DECODE(image, stored_chksum);
-
-/* Sanity check */
-HDassert((size_t)(image - (const uint8_t *)_image) == iblock->size);
-
-/* Set return value */
-ret_value = iblock;
-
-CATCH
-
-/* Release resources */
-if (!ret_value)
- if (iblock && H5EA__iblock_dest(iblock) < 0)
- H5E_THROW(H5E_CANTFREE, "unable to destroy extensible array index block")
+ /* Local variables */
+ H5EA_iblock_t *iblock = NULL; /* Index block info */
+ H5EA_hdr_t * hdr = (H5EA_hdr_t *)_udata; /* User data for callback */
+ const uint8_t *image = (const uint8_t *)_image; /* Pointer into raw data buffer */
+ uint32_t stored_chksum; /* Stored metadata checksum value */
+ haddr_t arr_addr; /* Address of array header in the file */
+ size_t u; /* Local index variable */
+
+ /* Check arguments */
+ HDassert(image);
+ HDassert(hdr);
+
+ /* Allocate the extensible array index block */
+ if (NULL == (iblock = H5EA__iblock_alloc(hdr)))
+ H5E_THROW(H5E_CANTALLOC, "memory allocation failed for extensible array index block")
+
+ /* Set the extensible array index block's address */
+ iblock->addr = hdr->idx_blk_addr;
+
+ /* Magic number */
+ if (HDmemcmp(image, H5EA_IBLOCK_MAGIC, (size_t)H5_SIZEOF_MAGIC))
+ H5E_THROW(H5E_BADVALUE, "wrong extensible array index block signature")
+ image += H5_SIZEOF_MAGIC;
+
+ /* Version */
+ if (*image++ != H5EA_IBLOCK_VERSION)
+ H5E_THROW(H5E_VERSION, "wrong extensible array index block version")
+
+ /* Extensible array type */
+ if (*image++ != (uint8_t)hdr->cparam.cls->id)
+ H5E_THROW(H5E_BADTYPE, "incorrect extensible array class")
+
+ /* Address of header for array that owns this block (just for file integrity checks) */
+ H5F_addr_decode(hdr->f, &image, &arr_addr);
+ if (H5F_addr_ne(arr_addr, hdr->addr))
+ H5E_THROW(H5E_BADVALUE, "wrong extensible array header address")
+
+ /* Internal information */
+
+ /* Decode elements in index block */
+ if (hdr->cparam.idx_blk_elmts > 0) {
+ /* Convert from raw elements on disk into native elements in memory */
+ if ((hdr->cparam.cls->decode)(image, iblock->elmts, (size_t)hdr->cparam.idx_blk_elmts, hdr->cb_ctx) <
+ 0)
+ H5E_THROW(H5E_CANTDECODE, "can't decode extensible array index elements")
+ image += (hdr->cparam.idx_blk_elmts * hdr->cparam.raw_elmt_size);
+ } /* end if */
+
+ /* Decode data block addresses in index block */
+ if (iblock->ndblk_addrs > 0) {
+ /* Decode addresses of data blocks in index block */
+ for (u = 0; u < iblock->ndblk_addrs; u++)
+ H5F_addr_decode(hdr->f, &image, &iblock->dblk_addrs[u]);
+ } /* end if */
+
+ /* Decode super block addresses in index block */
+ if (iblock->nsblk_addrs > 0) {
+ /* Decode addresses of super blocks in index block */
+ for (u = 0; u < iblock->nsblk_addrs; u++)
+ H5F_addr_decode(hdr->f, &image, &iblock->sblk_addrs[u]);
+ } /* end if */
+
+ /* Sanity check */
+ /* (allow for checksum not decoded yet) */
+ HDassert((size_t)(image - (const uint8_t *)_image) == (len - H5EA_SIZEOF_CHKSUM));
+
+ /* Save the index block's size */
+ iblock->size = len;
+
+ /* checksum verification already done in verify_chksum cb */
+
+ /* Metadata checksum */
+ UINT32DECODE(image, stored_chksum);
+
+ /* Sanity check */
+ HDassert((size_t)(image - (const uint8_t *)_image) == iblock->size);
+
+ /* Set return value */
+ ret_value = iblock;
+
+ CATCH
+
+ /* Release resources */
+ if (!ret_value)
+ if (iblock && H5EA__iblock_dest(iblock) < 0)
+ H5E_THROW(H5E_CANTFREE, "unable to destroy extensible array index block")
END_FUNC(STATIC) /* end H5EA__cache_iblock_deserialize() */
@@ -781,15 +781,15 @@ END_FUNC(STATIC) /* end H5EA__cache_iblock_deserialize() */
BEGIN_FUNC(STATIC, NOERR, herr_t, SUCCEED, -,
H5EA__cache_iblock_image_len(const void *_thing, size_t *image_len))
-/* Local variables */
-const H5EA_iblock_t *iblock = (const H5EA_iblock_t *)_thing; /* Pointer to the object */
+ /* Local variables */
+ const H5EA_iblock_t *iblock = (const H5EA_iblock_t *)_thing; /* Pointer to the object */
-/* Check arguments */
-HDassert(iblock);
-HDassert(image_len);
+ /* Check arguments */
+ HDassert(iblock);
+ HDassert(image_len);
-/* Set the image length size */
-*image_len = iblock->size;
+ /* Set the image length size */
+ *image_len = iblock->size;
END_FUNC(STATIC) /* end H5EA__cache_iblock_image_len() */
@@ -809,72 +809,72 @@ BEGIN_FUNC(STATIC, ERR, herr_t, SUCCEED, FAIL,
H5EA__cache_iblock_serialize(const H5F_t *f, void *_image, size_t H5_ATTR_UNUSED len,
void *_thing))
-/* Local variables */
-H5EA_iblock_t *iblock = (H5EA_iblock_t *)_thing; /* Pointer to the object to serialize */
-uint8_t * image = (uint8_t *)_image; /* Pointer into raw data buffer */
-uint32_t metadata_chksum; /* Computed metadata checksum value */
+ /* Local variables */
+ H5EA_iblock_t *iblock = (H5EA_iblock_t *)_thing; /* Pointer to the object to serialize */
+ uint8_t * image = (uint8_t *)_image; /* Pointer into raw data buffer */
+ uint32_t metadata_chksum; /* Computed metadata checksum value */
-/* check arguments */
-HDassert(f);
-HDassert(image);
-HDassert(iblock);
-HDassert(iblock->hdr);
+ /* check arguments */
+ HDassert(f);
+ HDassert(image);
+ HDassert(iblock);
+ HDassert(iblock->hdr);
-/* Get temporary pointer to serialized info */
+ /* Get temporary pointer to serialized info */
-/* Magic number */
-H5MM_memcpy(image, H5EA_IBLOCK_MAGIC, (size_t)H5_SIZEOF_MAGIC);
-image += H5_SIZEOF_MAGIC;
+ /* Magic number */
+ H5MM_memcpy(image, H5EA_IBLOCK_MAGIC, (size_t)H5_SIZEOF_MAGIC);
+ image += H5_SIZEOF_MAGIC;
-/* Version # */
-*image++ = H5EA_IBLOCK_VERSION;
+ /* Version # */
+ *image++ = H5EA_IBLOCK_VERSION;
-/* Extensible array type */
-HDassert(iblock->hdr->cparam.cls->id <= 255);
-*image++ = (uint8_t)iblock->hdr->cparam.cls->id;
+ /* Extensible array type */
+ HDassert(iblock->hdr->cparam.cls->id <= 255);
+ *image++ = (uint8_t)iblock->hdr->cparam.cls->id;
-/* Address of array header for array which owns this block */
-H5F_addr_encode(f, &image, iblock->hdr->addr);
+ /* Address of array header for array which owns this block */
+ H5F_addr_encode(f, &image, iblock->hdr->addr);
-/* Internal information */
+ /* Internal information */
-/* Encode elements in index block */
-if (iblock->hdr->cparam.idx_blk_elmts > 0) {
- /* Convert from native elements in memory into raw elements on disk */
- if ((iblock->hdr->cparam.cls->encode)(image, iblock->elmts, (size_t)iblock->hdr->cparam.idx_blk_elmts,
- iblock->hdr->cb_ctx) < 0)
- H5E_THROW(H5E_CANTENCODE, "can't encode extensible array index elements")
- image += (iblock->hdr->cparam.idx_blk_elmts * iblock->hdr->cparam.raw_elmt_size);
-} /* end if */
+ /* Encode elements in index block */
+ if (iblock->hdr->cparam.idx_blk_elmts > 0) {
+ /* Convert from native elements in memory into raw elements on disk */
+ if ((iblock->hdr->cparam.cls->encode)(image, iblock->elmts, (size_t)iblock->hdr->cparam.idx_blk_elmts,
+ iblock->hdr->cb_ctx) < 0)
+ H5E_THROW(H5E_CANTENCODE, "can't encode extensible array index elements")
+ image += (iblock->hdr->cparam.idx_blk_elmts * iblock->hdr->cparam.raw_elmt_size);
+ } /* end if */
-/* Encode data block addresses in index block */
-if (iblock->ndblk_addrs > 0) {
- size_t u; /* Local index variable */
+ /* Encode data block addresses in index block */
+ if (iblock->ndblk_addrs > 0) {
+ size_t u; /* Local index variable */
- /* Encode addresses of data blocks in index block */
- for (u = 0; u < iblock->ndblk_addrs; u++)
- H5F_addr_encode(f, &image, iblock->dblk_addrs[u]);
-} /* end if */
+ /* Encode addresses of data blocks in index block */
+ for (u = 0; u < iblock->ndblk_addrs; u++)
+ H5F_addr_encode(f, &image, iblock->dblk_addrs[u]);
+ } /* end if */
-/* Encode data block addresses in index block */
-if (iblock->nsblk_addrs > 0) {
- size_t u; /* Local index variable */
+ /* Encode data block addresses in index block */
+ if (iblock->nsblk_addrs > 0) {
+ size_t u; /* Local index variable */
- /* Encode addresses of super blocks in index block */
- for (u = 0; u < iblock->nsblk_addrs; u++)
- H5F_addr_encode(f, &image, iblock->sblk_addrs[u]);
-} /* end if */
+ /* Encode addresses of super blocks in index block */
+ for (u = 0; u < iblock->nsblk_addrs; u++)
+ H5F_addr_encode(f, &image, iblock->sblk_addrs[u]);
+ } /* end if */
-/* Compute metadata checksum */
-metadata_chksum = H5_checksum_metadata(_image, (size_t)(image - (uint8_t *)_image), 0);
+ /* Compute metadata checksum */
+ metadata_chksum = H5_checksum_metadata(_image, (size_t)(image - (uint8_t *)_image), 0);
-/* Metadata checksum */
-UINT32ENCODE(image, metadata_chksum);
+ /* Metadata checksum */
+ UINT32ENCODE(image, metadata_chksum);
-/* Sanity check */
-HDassert((size_t)(image - (uint8_t *)_image) == len);
+ /* Sanity check */
+ HDassert((size_t)(image - (uint8_t *)_image) == len);
-CATCH
+ CATCH
END_FUNC(STATIC) /* end H5EA__cache_iblock_serialize() */
@@ -893,59 +893,58 @@ END_FUNC(STATIC) /* end H5EA__cache_iblock_serialize() */
BEGIN_FUNC(STATIC, ERR, herr_t, SUCCEED, FAIL,
H5EA__cache_iblock_notify(H5AC_notify_action_t action, void *_thing))
-/* Local variables */
-H5EA_iblock_t *iblock = (H5EA_iblock_t *)_thing; /* Pointer to the object */
-
-/* Sanity check */
-HDassert(iblock);
-
-/* Determine which action to take */
-switch (action) {
- case H5AC_NOTIFY_ACTION_AFTER_INSERT:
- case H5AC_NOTIFY_ACTION_AFTER_LOAD:
- /* Create flush dependency on extensible array header */
- if (H5EA__create_flush_depend((H5AC_info_t *)iblock->hdr, (H5AC_info_t *)iblock) < 0)
- H5E_THROW(H5E_CANTDEPEND,
- "unable to create flush dependency between index block and header, address = %llu",
- (unsigned long long)iblock->addr)
- break;
-
- case H5AC_NOTIFY_ACTION_AFTER_FLUSH:
- case H5AC_NOTIFY_ACTION_ENTRY_DIRTIED:
- case H5AC_NOTIFY_ACTION_ENTRY_CLEANED:
- case H5AC_NOTIFY_ACTION_CHILD_DIRTIED:
- case H5AC_NOTIFY_ACTION_CHILD_CLEANED:
- case H5AC_NOTIFY_ACTION_CHILD_UNSERIALIZED:
- case H5AC_NOTIFY_ACTION_CHILD_SERIALIZED:
- /* do nothing */
- break;
-
- case H5AC_NOTIFY_ACTION_BEFORE_EVICT:
- /* Destroy flush dependency on extensible array header */
- if (H5EA__destroy_flush_depend((H5AC_info_t *)iblock->hdr, (H5AC_info_t *)iblock) < 0)
- H5E_THROW(H5E_CANTUNDEPEND,
- "unable to destroy flush dependency between index block and header, address = %llu",
- (unsigned long long)iblock->addr)
-
- /* Detach from 'top' proxy for extensible array */
- if (iblock->top_proxy) {
- if (H5AC_proxy_entry_remove_child(iblock->top_proxy, iblock) < 0)
- H5E_THROW(
- H5E_CANTUNDEPEND,
- "unable to destroy flush dependency between index block and extensible array 'top' proxy")
- iblock->top_proxy = NULL;
- } /* end if */
- break;
+ /* Local variables */
+ H5EA_iblock_t *iblock = (H5EA_iblock_t *)_thing; /* Pointer to the object */
+
+ /* Sanity check */
+ HDassert(iblock);
- default:
+ /* Determine which action to take */
+ switch (action) {
+ case H5AC_NOTIFY_ACTION_AFTER_INSERT:
+ case H5AC_NOTIFY_ACTION_AFTER_LOAD:
+ /* Create flush dependency on extensible array header */
+ if (H5EA__create_flush_depend((H5AC_info_t *)iblock->hdr, (H5AC_info_t *)iblock) < 0)
+ H5E_THROW(H5E_CANTDEPEND,
+ "unable to create flush dependency between index block and header, address = %llu",
+ (unsigned long long)iblock->addr)
+ break;
+
+ case H5AC_NOTIFY_ACTION_AFTER_FLUSH:
+ case H5AC_NOTIFY_ACTION_ENTRY_DIRTIED:
+ case H5AC_NOTIFY_ACTION_ENTRY_CLEANED:
+ case H5AC_NOTIFY_ACTION_CHILD_DIRTIED:
+ case H5AC_NOTIFY_ACTION_CHILD_CLEANED:
+ case H5AC_NOTIFY_ACTION_CHILD_UNSERIALIZED:
+ case H5AC_NOTIFY_ACTION_CHILD_SERIALIZED:
+ /* do nothing */
+ break;
+
+ case H5AC_NOTIFY_ACTION_BEFORE_EVICT:
+ /* Destroy flush dependency on extensible array header */
+ if (H5EA__destroy_flush_depend((H5AC_info_t *)iblock->hdr, (H5AC_info_t *)iblock) < 0)
+ H5E_THROW(H5E_CANTUNDEPEND,
+ "unable to destroy flush dependency between index block and header, address = %llu",
+ (unsigned long long)iblock->addr)
+
+ /* Detach from 'top' proxy for extensible array */
+ if (iblock->top_proxy) {
+ if (H5AC_proxy_entry_remove_child(iblock->top_proxy, iblock) < 0)
+ H5E_THROW(H5E_CANTUNDEPEND, "unable to destroy flush dependency between index block and "
+ "extensible array 'top' proxy")
+ iblock->top_proxy = NULL;
+ } /* end if */
+ break;
+
+ default:
#ifdef NDEBUG
- H5E_THROW(H5E_BADVALUE, "unknown action from metadata cache")
+ H5E_THROW(H5E_BADVALUE, "unknown action from metadata cache")
#else /* NDEBUG */
- HDassert(0 && "Unknown action?!?");
+ HDassert(0 && "Unknown action?!?");
#endif /* NDEBUG */
-} /* end switch */
+ } /* end switch */
-CATCH
+ CATCH
END_FUNC(STATIC) /* end H5EA__cache_iblock_notify() */
@@ -964,14 +963,14 @@ END_FUNC(STATIC) /* end H5EA__cache_iblock_notify() */
*/
BEGIN_FUNC(STATIC, ERR, herr_t, SUCCEED, FAIL, H5EA__cache_iblock_free_icr(void *thing))
-/* Check arguments */
-HDassert(thing);
+ /* Check arguments */
+ HDassert(thing);
-/* Release the extensible array index block */
-if (H5EA__iblock_dest((H5EA_iblock_t *)thing) < 0)
- H5E_THROW(H5E_CANTFREE, "can't free extensible array index block")
+ /* Release the extensible array index block */
+ if (H5EA__iblock_dest((H5EA_iblock_t *)thing) < 0)
+ H5E_THROW(H5E_CANTFREE, "can't free extensible array index block")
-CATCH
+ CATCH
END_FUNC(STATIC) /* end H5EA__cache_iblock_free_icr() */
@@ -990,42 +989,42 @@ END_FUNC(STATIC) /* end H5EA__cache_iblock_free_icr() */
BEGIN_FUNC(STATIC, NOERR, herr_t, SUCCEED, -,
H5EA__cache_sblock_get_initial_load_size(void *_udata, size_t *image_len))
-/* Local variables */
-H5EA_sblock_cache_ud_t *udata = (H5EA_sblock_cache_ud_t *)_udata; /* User data */
-H5EA_sblock_t sblock; /* Fake super block for computing size */
+ /* Local variables */
+ H5EA_sblock_cache_ud_t *udata = (H5EA_sblock_cache_ud_t *)_udata; /* User data */
+ H5EA_sblock_t sblock; /* Fake super block for computing size */
-/* Check arguments */
-HDassert(udata);
-HDassert(udata->hdr);
-HDassert(udata->sblk_idx > 0);
-HDassert(H5F_addr_defined(udata->sblk_addr));
-HDassert(image_len);
+ /* Check arguments */
+ HDassert(udata);
+ HDassert(udata->hdr);
+ HDassert(udata->sblk_idx > 0);
+ HDassert(H5F_addr_defined(udata->sblk_addr));
+ HDassert(image_len);
-/* Set up fake super block for computing size on disk */
-/* (Note: extracted from H5EA__sblock_alloc) */
-HDmemset(&sblock, 0, sizeof(sblock));
-sblock.hdr = udata->hdr;
-sblock.ndblks = udata->hdr->sblk_info[udata->sblk_idx].ndblks;
-sblock.dblk_nelmts = udata->hdr->sblk_info[udata->sblk_idx].dblk_nelmts;
+ /* Set up fake super block for computing size on disk */
+ /* (Note: extracted from H5EA__sblock_alloc) */
+ HDmemset(&sblock, 0, sizeof(sblock));
+ sblock.hdr = udata->hdr;
+ sblock.ndblks = udata->hdr->sblk_info[udata->sblk_idx].ndblks;
+ sblock.dblk_nelmts = udata->hdr->sblk_info[udata->sblk_idx].dblk_nelmts;
-/* Check if # of elements in data blocks requires paging */
-if (sblock.dblk_nelmts > udata->hdr->dblk_page_nelmts) {
- /* Compute # of pages in each data block from this super block */
- sblock.dblk_npages = sblock.dblk_nelmts / udata->hdr->dblk_page_nelmts;
+ /* Check if # of elements in data blocks requires paging */
+ if (sblock.dblk_nelmts > udata->hdr->dblk_page_nelmts) {
+ /* Compute # of pages in each data block from this super block */
+ sblock.dblk_npages = sblock.dblk_nelmts / udata->hdr->dblk_page_nelmts;
- /* Sanity check that we have at least 2 pages in data block */
- HDassert(sblock.dblk_npages > 1);
+ /* Sanity check that we have at least 2 pages in data block */
+ HDassert(sblock.dblk_npages > 1);
- /* Sanity check for integer truncation */
- HDassert((sblock.dblk_npages * udata->hdr->dblk_page_nelmts) == sblock.dblk_nelmts);
+ /* Sanity check for integer truncation */
+ HDassert((sblock.dblk_npages * udata->hdr->dblk_page_nelmts) == sblock.dblk_nelmts);
- /* Compute size of buffer for each data block's 'page init' bitmask */
- sblock.dblk_page_init_size = ((sblock.dblk_npages) + 7) / 8;
- HDassert(sblock.dblk_page_init_size > 0);
-} /* end if */
+ /* Compute size of buffer for each data block's 'page init' bitmask */
+ sblock.dblk_page_init_size = ((sblock.dblk_npages) + 7) / 8;
+ HDassert(sblock.dblk_page_init_size > 0);
+ } /* end if */
-/* Set the image length size */
-*image_len = (size_t)H5EA_SBLOCK_SIZE(&sblock);
+ /* Set the image length size */
+ *image_len = (size_t)H5EA_SBLOCK_SIZE(&sblock);
END_FUNC(STATIC) /* end H5EA__cache_sblock_get_initial_load_size() */
@@ -1045,19 +1044,19 @@ END_FUNC(STATIC) /* end H5EA__cache_sblock_get_initial_load_size() */
BEGIN_FUNC(STATIC, NOERR, htri_t, TRUE, -,
H5EA__cache_sblock_verify_chksum(const void *_image, size_t len, void H5_ATTR_UNUSED *_udata))
-/* Local variables */
-const uint8_t *image = (const uint8_t *)_image; /* Pointer into raw data buffer */
-uint32_t stored_chksum; /* Stored metadata checksum value */
-uint32_t computed_chksum; /* Computed metadata checksum value */
+ /* Local variables */
+ const uint8_t *image = (const uint8_t *)_image; /* Pointer into raw data buffer */
+ uint32_t stored_chksum; /* Stored metadata checksum value */
+ uint32_t computed_chksum; /* Computed metadata checksum value */
-/* Check arguments */
-HDassert(image);
+ /* Check arguments */
+ HDassert(image);
-/* Get stored and computed checksums */
-H5F_get_checksums(image, len, &stored_chksum, &computed_chksum);
+ /* Get stored and computed checksums */
+ H5F_get_checksums(image, len, &stored_chksum, &computed_chksum);
-if (stored_chksum != computed_chksum)
- ret_value = FALSE;
+ if (stored_chksum != computed_chksum)
+ ret_value = FALSE;
END_FUNC(STATIC) /* end H5EA__cache_sblock_verify_chksum() */
@@ -1078,89 +1077,89 @@ BEGIN_FUNC(STATIC, ERR, void *, NULL, NULL,
H5EA__cache_sblock_deserialize(const void *_image, size_t len, void *_udata,
hbool_t H5_ATTR_UNUSED *dirty))
-/* Local variables */
-H5EA_sblock_t * sblock = NULL; /* Super block info */
-H5EA_sblock_cache_ud_t *udata = (H5EA_sblock_cache_ud_t *)_udata; /* User data */
-const uint8_t * image = (const uint8_t *)_image; /* Pointer into raw data buffer */
-uint32_t stored_chksum; /* Stored metadata checksum value */
-haddr_t arr_addr; /* Address of array header in the file */
-size_t u; /* Local index variable */
+ /* Local variables */
+ H5EA_sblock_t * sblock = NULL; /* Super block info */
+ H5EA_sblock_cache_ud_t *udata = (H5EA_sblock_cache_ud_t *)_udata; /* User data */
+ const uint8_t * image = (const uint8_t *)_image; /* Pointer into raw data buffer */
+ uint32_t stored_chksum; /* Stored metadata checksum value */
+ haddr_t arr_addr; /* Address of array header in the file */
+ size_t u; /* Local index variable */
-/* Sanity check */
-HDassert(udata);
-HDassert(udata->hdr);
-HDassert(udata->parent);
-HDassert(udata->sblk_idx > 0);
-HDassert(H5F_addr_defined(udata->sblk_addr));
+ /* Sanity check */
+ HDassert(udata);
+ HDassert(udata->hdr);
+ HDassert(udata->parent);
+ HDassert(udata->sblk_idx > 0);
+ HDassert(H5F_addr_defined(udata->sblk_addr));
-/* Allocate the extensible array super block */
-if (NULL == (sblock = H5EA__sblock_alloc(udata->hdr, udata->parent, udata->sblk_idx)))
- H5E_THROW(H5E_CANTALLOC, "memory allocation failed for extensible array super block")
+ /* Allocate the extensible array super block */
+ if (NULL == (sblock = H5EA__sblock_alloc(udata->hdr, udata->parent, udata->sblk_idx)))
+ H5E_THROW(H5E_CANTALLOC, "memory allocation failed for extensible array super block")
-/* Set the extensible array super block's address */
-sblock->addr = udata->sblk_addr;
+ /* Set the extensible array super block's address */
+ sblock->addr = udata->sblk_addr;
-/* Magic number */
-if (HDmemcmp(image, H5EA_SBLOCK_MAGIC, (size_t)H5_SIZEOF_MAGIC))
- H5E_THROW(H5E_BADVALUE, "wrong extensible array super block signature")
-image += H5_SIZEOF_MAGIC;
+ /* Magic number */
+ if (HDmemcmp(image, H5EA_SBLOCK_MAGIC, (size_t)H5_SIZEOF_MAGIC))
+ H5E_THROW(H5E_BADVALUE, "wrong extensible array super block signature")
+ image += H5_SIZEOF_MAGIC;
-/* Version */
-if (*image++ != H5EA_SBLOCK_VERSION)
- H5E_THROW(H5E_VERSION, "wrong extensible array super block version")
+ /* Version */
+ if (*image++ != H5EA_SBLOCK_VERSION)
+ H5E_THROW(H5E_VERSION, "wrong extensible array super block version")
-/* Extensible array type */
-if (*image++ != (uint8_t)udata->hdr->cparam.cls->id)
- H5E_THROW(H5E_BADTYPE, "incorrect extensible array class")
+ /* Extensible array type */
+ if (*image++ != (uint8_t)udata->hdr->cparam.cls->id)
+ H5E_THROW(H5E_BADTYPE, "incorrect extensible array class")
-/* Address of header for array that owns this block (just for file integrity checks) */
-H5F_addr_decode(udata->hdr->f, &image, &arr_addr);
-if (H5F_addr_ne(arr_addr, udata->hdr->addr))
- H5E_THROW(H5E_BADVALUE, "wrong extensible array header address")
+ /* Address of header for array that owns this block (just for file integrity checks) */
+ H5F_addr_decode(udata->hdr->f, &image, &arr_addr);
+ if (H5F_addr_ne(arr_addr, udata->hdr->addr))
+ H5E_THROW(H5E_BADVALUE, "wrong extensible array header address")
-/* Offset of block within the array's address space */
-UINT64DECODE_VAR(image, sblock->block_off, udata->hdr->arr_off_size);
+ /* Offset of block within the array's address space */
+ UINT64DECODE_VAR(image, sblock->block_off, udata->hdr->arr_off_size);
-/* Internal information */
+ /* Internal information */
-/* Check for 'page init' bitmasks for this super block */
-if (sblock->dblk_npages > 0) {
- size_t tot_page_init_size =
- sblock->ndblks * sblock->dblk_page_init_size; /* Compute total size of 'page init' buffer */
+ /* Check for 'page init' bitmasks for this super block */
+ if (sblock->dblk_npages > 0) {
+ size_t tot_page_init_size =
+ sblock->ndblks * sblock->dblk_page_init_size; /* Compute total size of 'page init' buffer */
- /* Retrieve the 'page init' bitmasks */
- H5MM_memcpy(sblock->page_init, image, tot_page_init_size);
- image += tot_page_init_size;
-} /* end if */
+ /* Retrieve the 'page init' bitmasks */
+ H5MM_memcpy(sblock->page_init, image, tot_page_init_size);
+ image += tot_page_init_size;
+ } /* end if */
-/* Decode data block addresses */
-for (u = 0; u < sblock->ndblks; u++)
- H5F_addr_decode(udata->hdr->f, &image, &sblock->dblk_addrs[u]);
+ /* Decode data block addresses */
+ for (u = 0; u < sblock->ndblks; u++)
+ H5F_addr_decode(udata->hdr->f, &image, &sblock->dblk_addrs[u]);
-/* Sanity check */
-/* (allow for checksum not decoded yet) */
-HDassert((size_t)(image - (const uint8_t *)_image) == (len - H5EA_SIZEOF_CHKSUM));
+ /* Sanity check */
+ /* (allow for checksum not decoded yet) */
+ HDassert((size_t)(image - (const uint8_t *)_image) == (len - H5EA_SIZEOF_CHKSUM));
-/* Save the super block's size */
-sblock->size = len;
+ /* Save the super block's size */
+ sblock->size = len;
-/* checksum verification already done in verify_chksum cb */
+ /* checksum verification already done in verify_chksum cb */
-/* Metadata checksum */
-UINT32DECODE(image, stored_chksum);
+ /* Metadata checksum */
+ UINT32DECODE(image, stored_chksum);
-/* Sanity check */
-HDassert((size_t)(image - (const uint8_t *)_image) == sblock->size);
+ /* Sanity check */
+ HDassert((size_t)(image - (const uint8_t *)_image) == sblock->size);
-/* Set return value */
-ret_value = sblock;
+ /* Set return value */
+ ret_value = sblock;
-CATCH
+ CATCH
-/* Release resources */
-if (!ret_value)
- if (sblock && H5EA__sblock_dest(sblock) < 0)
- H5E_THROW(H5E_CANTFREE, "unable to destroy extensible array super block")
+ /* Release resources */
+ if (!ret_value)
+ if (sblock && H5EA__sblock_dest(sblock) < 0)
+ H5E_THROW(H5E_CANTFREE, "unable to destroy extensible array super block")
END_FUNC(STATIC) /* end H5EA__cache_sblock_deserialize() */
@@ -1179,15 +1178,15 @@ END_FUNC(STATIC) /* end H5EA__cache_sblock_deserialize() */
BEGIN_FUNC(STATIC, NOERR, herr_t, SUCCEED, -,
H5EA__cache_sblock_image_len(const void *_thing, size_t *image_len))
-/* Local variables */
-const H5EA_sblock_t *sblock = (const H5EA_sblock_t *)_thing; /* Pointer to the object */
+ /* Local variables */
+ const H5EA_sblock_t *sblock = (const H5EA_sblock_t *)_thing; /* Pointer to the object */
-/* Check arguments */
-HDassert(sblock);
-HDassert(image_len);
+ /* Check arguments */
+ HDassert(sblock);
+ HDassert(image_len);
-/* Set the image length size */
-*image_len = sblock->size;
+ /* Set the image length size */
+ *image_len = sblock->size;
END_FUNC(STATIC) /* end H5EA__cache_sblock_image_len() */
@@ -1207,59 +1206,59 @@ BEGIN_FUNC(STATIC, NOERR, herr_t, SUCCEED, -,
H5EA__cache_sblock_serialize(const H5F_t *f, void *_image, size_t H5_ATTR_UNUSED len,
void *_thing))
-/* Local variables */
-H5EA_sblock_t *sblock = (H5EA_sblock_t *)_thing; /* Pointer to the object to serialize */
-uint8_t * image = (uint8_t *)_image; /* Pointer into raw data buffer */
-uint32_t metadata_chksum; /* Computed metadata checksum value */
-size_t u; /* Local index variable */
+ /* Local variables */
+ H5EA_sblock_t *sblock = (H5EA_sblock_t *)_thing; /* Pointer to the object to serialize */
+ uint8_t * image = (uint8_t *)_image; /* Pointer into raw data buffer */
+ uint32_t metadata_chksum; /* Computed metadata checksum value */
+ size_t u; /* Local index variable */
-/* check arguments */
-HDassert(f);
-HDassert(image);
-HDassert(sblock);
-HDassert(sblock->hdr);
+ /* check arguments */
+ HDassert(f);
+ HDassert(image);
+ HDassert(sblock);
+ HDassert(sblock->hdr);
-/* Magic number */
-H5MM_memcpy(image, H5EA_SBLOCK_MAGIC, (size_t)H5_SIZEOF_MAGIC);
-image += H5_SIZEOF_MAGIC;
+ /* Magic number */
+ H5MM_memcpy(image, H5EA_SBLOCK_MAGIC, (size_t)H5_SIZEOF_MAGIC);
+ image += H5_SIZEOF_MAGIC;
-/* Version # */
-*image++ = H5EA_SBLOCK_VERSION;
+ /* Version # */
+ *image++ = H5EA_SBLOCK_VERSION;
-/* Extensible array type */
-HDassert(sblock->hdr->cparam.cls->id <= 255);
-*image++ = (uint8_t)sblock->hdr->cparam.cls->id;
+ /* Extensible array type */
+ HDassert(sblock->hdr->cparam.cls->id <= 255);
+ *image++ = (uint8_t)sblock->hdr->cparam.cls->id;
-/* Address of array header for array which owns this block */
-H5F_addr_encode(f, &image, sblock->hdr->addr);
+ /* Address of array header for array which owns this block */
+ H5F_addr_encode(f, &image, sblock->hdr->addr);
-/* Offset of block in array */
-UINT64ENCODE_VAR(image, sblock->block_off, sblock->hdr->arr_off_size);
+ /* Offset of block in array */
+ UINT64ENCODE_VAR(image, sblock->block_off, sblock->hdr->arr_off_size);
-/* Internal information */
+ /* Internal information */
-/* Check for 'page init' bitmasks for this super block */
-if (sblock->dblk_npages > 0) {
- size_t tot_page_init_size =
- sblock->ndblks * sblock->dblk_page_init_size; /* Compute total size of 'page init' buffer */
+ /* Check for 'page init' bitmasks for this super block */
+ if (sblock->dblk_npages > 0) {
+ size_t tot_page_init_size =
+ sblock->ndblks * sblock->dblk_page_init_size; /* Compute total size of 'page init' buffer */
- /* Store the 'page init' bitmasks */
- H5MM_memcpy(image, sblock->page_init, tot_page_init_size);
- image += tot_page_init_size;
-} /* end if */
+ /* Store the 'page init' bitmasks */
+ H5MM_memcpy(image, sblock->page_init, tot_page_init_size);
+ image += tot_page_init_size;
+ } /* end if */
-/* Encode addresses of data blocks in super block */
-for (u = 0; u < sblock->ndblks; u++)
- H5F_addr_encode(f, &image, sblock->dblk_addrs[u]);
+ /* Encode addresses of data blocks in super block */
+ for (u = 0; u < sblock->ndblks; u++)
+ H5F_addr_encode(f, &image, sblock->dblk_addrs[u]);
-/* Compute metadata checksum */
-metadata_chksum = H5_checksum_metadata(_image, (size_t)(image - (uint8_t *)_image), 0);
+ /* Compute metadata checksum */
+ metadata_chksum = H5_checksum_metadata(_image, (size_t)(image - (uint8_t *)_image), 0);
-/* Metadata checksum */
-UINT32ENCODE(image, metadata_chksum);
+ /* Metadata checksum */
+ UINT32ENCODE(image, metadata_chksum);
-/* Sanity check */
-HDassert((size_t)(image - (uint8_t *)_image) == len);
+ /* Sanity check */
+ HDassert((size_t)(image - (uint8_t *)_image) == len);
END_FUNC(STATIC) /* end H5EA__cache_sblock_serialize() */
@@ -1278,79 +1277,81 @@ END_FUNC(STATIC) /* end H5EA__cache_sblock_serialize() */
BEGIN_FUNC(STATIC, ERR, herr_t, SUCCEED, FAIL,
H5EA__cache_sblock_notify(H5AC_notify_action_t action, void *_thing))
-/* Local variables */
-H5EA_sblock_t *sblock = (H5EA_sblock_t *)_thing; /* Pointer to the object */
-
-/* Sanity check */
-HDassert(sblock);
-
-/* Determine which action to take */
-switch (action) {
- case H5AC_NOTIFY_ACTION_AFTER_INSERT:
- case H5AC_NOTIFY_ACTION_AFTER_LOAD:
- /* Create flush dependency on index block */
- if (H5EA__create_flush_depend((H5AC_info_t *)sblock->parent, (H5AC_info_t *)sblock) < 0)
- H5E_THROW(H5E_CANTDEPEND,
- "unable to create flush dependency between super block and index block, address = %llu",
- (unsigned long long)sblock->addr)
- break;
-
- case H5AC_NOTIFY_ACTION_AFTER_FLUSH:
- /* Destroy flush dependency on extensible array header, if set */
- if (sblock->has_hdr_depend) {
- if (H5EA__destroy_flush_depend((H5AC_info_t *)sblock->hdr, (H5AC_info_t *)sblock) < 0)
- H5E_THROW(H5E_CANTUNDEPEND,
- "unable to destroy flush dependency between super block and header, address = %llu",
- (unsigned long long)sblock->addr)
- sblock->has_hdr_depend = FALSE;
- } /* end if */
- break;
-
- case H5AC_NOTIFY_ACTION_BEFORE_EVICT:
- /* Destroy flush dependency on index block */
- if (H5EA__destroy_flush_depend((H5AC_info_t *)sblock->parent, (H5AC_info_t *)sblock) < 0)
- H5E_THROW(
- H5E_CANTUNDEPEND,
- "unable to destroy flush dependency between super block and index block, address = %llu",
- (unsigned long long)sblock->addr)
-
- /* Destroy flush dependency on extensible array header, if set */
- if (sblock->has_hdr_depend) {
- if (H5EA__destroy_flush_depend((H5AC_info_t *)sblock->hdr, (H5AC_info_t *)sblock) < 0)
- H5E_THROW(H5E_CANTUNDEPEND,
- "unable to destroy flush dependency between super block and header, address = %llu",
- (unsigned long long)sblock->addr)
- sblock->has_hdr_depend = FALSE;
- } /* end if */
-
- /* Detach from 'top' proxy for extensible array */
- if (sblock->top_proxy) {
- if (H5AC_proxy_entry_remove_child(sblock->top_proxy, sblock) < 0)
+ /* Local variables */
+ H5EA_sblock_t *sblock = (H5EA_sblock_t *)_thing; /* Pointer to the object */
+
+ /* Sanity check */
+ HDassert(sblock);
+
+ /* Determine which action to take */
+ switch (action) {
+ case H5AC_NOTIFY_ACTION_AFTER_INSERT:
+ case H5AC_NOTIFY_ACTION_AFTER_LOAD:
+ /* Create flush dependency on index block */
+ if (H5EA__create_flush_depend((H5AC_info_t *)sblock->parent, (H5AC_info_t *)sblock) < 0)
+ H5E_THROW(
+ H5E_CANTDEPEND,
+ "unable to create flush dependency between super block and index block, address = %llu",
+ (unsigned long long)sblock->addr)
+ break;
+
+ case H5AC_NOTIFY_ACTION_AFTER_FLUSH:
+ /* Destroy flush dependency on extensible array header, if set */
+ if (sblock->has_hdr_depend) {
+ if (H5EA__destroy_flush_depend((H5AC_info_t *)sblock->hdr, (H5AC_info_t *)sblock) < 0)
+ H5E_THROW(
+ H5E_CANTUNDEPEND,
+ "unable to destroy flush dependency between super block and header, address = %llu",
+ (unsigned long long)sblock->addr)
+ sblock->has_hdr_depend = FALSE;
+ } /* end if */
+ break;
+
+ case H5AC_NOTIFY_ACTION_BEFORE_EVICT:
+ /* Destroy flush dependency on index block */
+ if (H5EA__destroy_flush_depend((H5AC_info_t *)sblock->parent, (H5AC_info_t *)sblock) < 0)
H5E_THROW(
H5E_CANTUNDEPEND,
- "unable to destroy flush dependency between super block and extensible array 'top' proxy")
- sblock->top_proxy = NULL;
- } /* end if */
- break;
-
- case H5AC_NOTIFY_ACTION_ENTRY_DIRTIED:
- case H5AC_NOTIFY_ACTION_ENTRY_CLEANED:
- case H5AC_NOTIFY_ACTION_CHILD_DIRTIED:
- case H5AC_NOTIFY_ACTION_CHILD_CLEANED:
- case H5AC_NOTIFY_ACTION_CHILD_UNSERIALIZED:
- case H5AC_NOTIFY_ACTION_CHILD_SERIALIZED:
- /* do nothing */
- break;
-
- default:
+ "unable to destroy flush dependency between super block and index block, address = %llu",
+ (unsigned long long)sblock->addr)
+
+ /* Destroy flush dependency on extensible array header, if set */
+ if (sblock->has_hdr_depend) {
+ if (H5EA__destroy_flush_depend((H5AC_info_t *)sblock->hdr, (H5AC_info_t *)sblock) < 0)
+ H5E_THROW(
+ H5E_CANTUNDEPEND,
+ "unable to destroy flush dependency between super block and header, address = %llu",
+ (unsigned long long)sblock->addr)
+ sblock->has_hdr_depend = FALSE;
+ } /* end if */
+
+ /* Detach from 'top' proxy for extensible array */
+ if (sblock->top_proxy) {
+ if (H5AC_proxy_entry_remove_child(sblock->top_proxy, sblock) < 0)
+ H5E_THROW(H5E_CANTUNDEPEND, "unable to destroy flush dependency between super block and "
+ "extensible array 'top' proxy")
+ sblock->top_proxy = NULL;
+ } /* end if */
+ break;
+
+ case H5AC_NOTIFY_ACTION_ENTRY_DIRTIED:
+ case H5AC_NOTIFY_ACTION_ENTRY_CLEANED:
+ case H5AC_NOTIFY_ACTION_CHILD_DIRTIED:
+ case H5AC_NOTIFY_ACTION_CHILD_CLEANED:
+ case H5AC_NOTIFY_ACTION_CHILD_UNSERIALIZED:
+ case H5AC_NOTIFY_ACTION_CHILD_SERIALIZED:
+ /* do nothing */
+ break;
+
+ default:
#ifdef NDEBUG
- H5E_THROW(H5E_BADVALUE, "unknown action from metadata cache")
+ H5E_THROW(H5E_BADVALUE, "unknown action from metadata cache")
#else /* NDEBUG */
- HDassert(0 && "Unknown action?!?");
+ HDassert(0 && "Unknown action?!?");
#endif /* NDEBUG */
-} /* end switch */
+ } /* end switch */
-CATCH
+ CATCH
END_FUNC(STATIC) /* end H5EA__cache_sblock_notify() */
@@ -1369,14 +1370,14 @@ END_FUNC(STATIC) /* end H5EA__cache_sblock_notify() */
*/
BEGIN_FUNC(STATIC, ERR, herr_t, SUCCEED, FAIL, H5EA__cache_sblock_free_icr(void *thing))
-/* Check arguments */
-HDassert(thing);
+ /* Check arguments */
+ HDassert(thing);
-/* Release the extensible array super block */
-if (H5EA__sblock_dest((H5EA_sblock_t *)thing) < 0)
- H5E_THROW(H5E_CANTFREE, "can't free extensible array super block")
+ /* Release the extensible array super block */
+ if (H5EA__sblock_dest((H5EA_sblock_t *)thing) < 0)
+ H5E_THROW(H5E_CANTFREE, "can't free extensible array super block")
-CATCH
+ CATCH
END_FUNC(STATIC) /* end H5EA__cache_sblock_free_icr() */
@@ -1395,43 +1396,43 @@ END_FUNC(STATIC) /* end H5EA__cache_sblock_free_icr() */
BEGIN_FUNC(STATIC, NOERR, herr_t, SUCCEED, -,
H5EA__cache_dblock_get_initial_load_size(void *_udata, size_t *image_len))
-/* Local variables */
-H5EA_dblock_cache_ud_t *udata = (H5EA_dblock_cache_ud_t *)_udata; /* User data */
-H5EA_dblock_t dblock; /* Fake data block for computing size */
-
-/* Check arguments */
-HDassert(udata);
-HDassert(udata->hdr);
-HDassert(udata->nelmts > 0);
-HDassert(image_len);
-
-/* Set up fake data block for computing size on disk */
-/* (Note: extracted from H5EA__dblock_alloc) */
-HDmemset(&dblock, 0, sizeof(dblock));
-
-/* need to set:
- *
- * dblock.hdr
- * dblock.npages
- * dblock.nelmts
- *
- * before we invoke either H5EA_DBLOCK_PREFIX_SIZE() or
- * H5EA_DBLOCK_SIZE().
- */
-dblock.hdr = udata->hdr;
-dblock.nelmts = udata->nelmts;
-
-if (udata->nelmts > udata->hdr->dblk_page_nelmts) {
- /* Set the # of pages in the direct block */
- dblock.npages = udata->nelmts / udata->hdr->dblk_page_nelmts;
- HDassert(udata->nelmts == (dblock.npages * udata->hdr->dblk_page_nelmts));
-} /* end if */
-
-/* Set the image length size */
-if (!dblock.npages)
- *image_len = H5EA_DBLOCK_SIZE(&dblock);
-else
- *image_len = H5EA_DBLOCK_PREFIX_SIZE(&dblock);
+ /* Local variables */
+ H5EA_dblock_cache_ud_t *udata = (H5EA_dblock_cache_ud_t *)_udata; /* User data */
+ H5EA_dblock_t dblock; /* Fake data block for computing size */
+
+ /* Check arguments */
+ HDassert(udata);
+ HDassert(udata->hdr);
+ HDassert(udata->nelmts > 0);
+ HDassert(image_len);
+
+ /* Set up fake data block for computing size on disk */
+ /* (Note: extracted from H5EA__dblock_alloc) */
+ HDmemset(&dblock, 0, sizeof(dblock));
+
+ /* need to set:
+ *
+ * dblock.hdr
+ * dblock.npages
+ * dblock.nelmts
+ *
+ * before we invoke either H5EA_DBLOCK_PREFIX_SIZE() or
+ * H5EA_DBLOCK_SIZE().
+ */
+ dblock.hdr = udata->hdr;
+ dblock.nelmts = udata->nelmts;
+
+ if (udata->nelmts > udata->hdr->dblk_page_nelmts) {
+ /* Set the # of pages in the direct block */
+ dblock.npages = udata->nelmts / udata->hdr->dblk_page_nelmts;
+ HDassert(udata->nelmts == (dblock.npages * udata->hdr->dblk_page_nelmts));
+ } /* end if */
+
+ /* Set the image length size */
+ if (!dblock.npages)
+ *image_len = H5EA_DBLOCK_SIZE(&dblock);
+ else
+ *image_len = H5EA_DBLOCK_PREFIX_SIZE(&dblock);
END_FUNC(STATIC) /* end H5EA__cache_dblock_get_initial_load_size() */
@@ -1451,19 +1452,19 @@ END_FUNC(STATIC) /* end H5EA__cache_dblock_get_initial_load_size() */
BEGIN_FUNC(STATIC, NOERR, htri_t, TRUE, -,
H5EA__cache_dblock_verify_chksum(const void *_image, size_t len, void H5_ATTR_UNUSED *_udata))
-/* Local variables */
-const uint8_t *image = (const uint8_t *)_image; /* Pointer into raw data buffer */
-uint32_t stored_chksum; /* Stored metadata checksum value */
-uint32_t computed_chksum; /* Computed metadata checksum value */
+ /* Local variables */
+ const uint8_t *image = (const uint8_t *)_image; /* Pointer into raw data buffer */
+ uint32_t stored_chksum; /* Stored metadata checksum value */
+ uint32_t computed_chksum; /* Computed metadata checksum value */
-/* Check arguments */
-HDassert(image);
+ /* Check arguments */
+ HDassert(image);
-/* Get stored and computed checksums */
-H5F_get_checksums(image, len, &stored_chksum, &computed_chksum);
+ /* Get stored and computed checksums */
+ H5F_get_checksums(image, len, &stored_chksum, &computed_chksum);
-if (stored_chksum != computed_chksum)
- ret_value = FALSE;
+ if (stored_chksum != computed_chksum)
+ ret_value = FALSE;
END_FUNC(STATIC) /* end H5EA__cache_sblock_verify_chksum() */
@@ -1484,87 +1485,87 @@ BEGIN_FUNC(STATIC, ERR, void *, NULL, NULL,
H5EA__cache_dblock_deserialize(const void *_image, size_t H5_ATTR_NDEBUG_UNUSED len, void *_udata,
hbool_t H5_ATTR_UNUSED *dirty))
-/* Local variables */
-H5EA_dblock_t * dblock = NULL; /* Data block info */
-H5EA_dblock_cache_ud_t *udata = (H5EA_dblock_cache_ud_t *)_udata; /* User data */
-const uint8_t * image = (const uint8_t *)_image; /* Pointer into raw data buffer */
-uint32_t stored_chksum; /* Stored metadata checksum value */
-haddr_t arr_addr; /* Address of array header in the file */
+ /* Local variables */
+ H5EA_dblock_t * dblock = NULL; /* Data block info */
+ H5EA_dblock_cache_ud_t *udata = (H5EA_dblock_cache_ud_t *)_udata; /* User data */
+ const uint8_t * image = (const uint8_t *)_image; /* Pointer into raw data buffer */
+ uint32_t stored_chksum; /* Stored metadata checksum value */
+ haddr_t arr_addr; /* Address of array header in the file */
-/* Check arguments */
-HDassert(udata);
-HDassert(udata->hdr);
-HDassert(udata->parent);
-HDassert(udata->nelmts > 0);
-HDassert(H5F_addr_defined(udata->dblk_addr));
+ /* Check arguments */
+ HDassert(udata);
+ HDassert(udata->hdr);
+ HDassert(udata->parent);
+ HDassert(udata->nelmts > 0);
+ HDassert(H5F_addr_defined(udata->dblk_addr));
-/* Allocate the extensible array data block */
-if (NULL == (dblock = H5EA__dblock_alloc(udata->hdr, udata->parent, udata->nelmts)))
- H5E_THROW(H5E_CANTALLOC, "memory allocation failed for extensible array data block")
+ /* Allocate the extensible array data block */
+ if (NULL == (dblock = H5EA__dblock_alloc(udata->hdr, udata->parent, udata->nelmts)))
+ H5E_THROW(H5E_CANTALLOC, "memory allocation failed for extensible array data block")
-HDassert(((!dblock->npages) && (len == H5EA_DBLOCK_SIZE(dblock))) ||
- (len == H5EA_DBLOCK_PREFIX_SIZE(dblock)));
+ HDassert(((!dblock->npages) && (len == H5EA_DBLOCK_SIZE(dblock))) ||
+ (len == H5EA_DBLOCK_PREFIX_SIZE(dblock)));
-/* Set the extensible array data block's information */
-dblock->addr = udata->dblk_addr;
+ /* Set the extensible array data block's information */
+ dblock->addr = udata->dblk_addr;
-/* Magic number */
-if (HDmemcmp(image, H5EA_DBLOCK_MAGIC, (size_t)H5_SIZEOF_MAGIC))
- H5E_THROW(H5E_BADVALUE, "wrong extensible array data block signature")
-image += H5_SIZEOF_MAGIC;
+ /* Magic number */
+ if (HDmemcmp(image, H5EA_DBLOCK_MAGIC, (size_t)H5_SIZEOF_MAGIC))
+ H5E_THROW(H5E_BADVALUE, "wrong extensible array data block signature")
+ image += H5_SIZEOF_MAGIC;
-/* Version */
-if (*image++ != H5EA_DBLOCK_VERSION)
- H5E_THROW(H5E_VERSION, "wrong extensible array data block version")
+ /* Version */
+ if (*image++ != H5EA_DBLOCK_VERSION)
+ H5E_THROW(H5E_VERSION, "wrong extensible array data block version")
-/* Extensible array type */
-if (*image++ != (uint8_t)udata->hdr->cparam.cls->id)
- H5E_THROW(H5E_BADTYPE, "incorrect extensible array class")
+ /* Extensible array type */
+ if (*image++ != (uint8_t)udata->hdr->cparam.cls->id)
+ H5E_THROW(H5E_BADTYPE, "incorrect extensible array class")
-/* Address of header for array that owns this block (just for file integrity checks) */
-H5F_addr_decode(udata->hdr->f, &image, &arr_addr);
-if (H5F_addr_ne(arr_addr, udata->hdr->addr))
- H5E_THROW(H5E_BADVALUE, "wrong extensible array header address")
+ /* Address of header for array that owns this block (just for file integrity checks) */
+ H5F_addr_decode(udata->hdr->f, &image, &arr_addr);
+ if (H5F_addr_ne(arr_addr, udata->hdr->addr))
+ H5E_THROW(H5E_BADVALUE, "wrong extensible array header address")
-/* Offset of block within the array's address space */
-UINT64DECODE_VAR(image, dblock->block_off, udata->hdr->arr_off_size);
+ /* Offset of block within the array's address space */
+ UINT64DECODE_VAR(image, dblock->block_off, udata->hdr->arr_off_size);
-/* Internal information */
+ /* Internal information */
-/* Only decode elements if the data block is not paged */
-if (!dblock->npages) {
- /* Decode elements in data block */
- /* Convert from raw elements on disk into native elements in memory */
- if ((udata->hdr->cparam.cls->decode)(image, dblock->elmts, udata->nelmts, udata->hdr->cb_ctx) < 0)
- H5E_THROW(H5E_CANTDECODE, "can't decode extensible array data elements")
- image += (udata->nelmts * udata->hdr->cparam.raw_elmt_size);
-} /* end if */
+ /* Only decode elements if the data block is not paged */
+ if (!dblock->npages) {
+ /* Decode elements in data block */
+ /* Convert from raw elements on disk into native elements in memory */
+ if ((udata->hdr->cparam.cls->decode)(image, dblock->elmts, udata->nelmts, udata->hdr->cb_ctx) < 0)
+ H5E_THROW(H5E_CANTDECODE, "can't decode extensible array data elements")
+ image += (udata->nelmts * udata->hdr->cparam.raw_elmt_size);
+ } /* end if */
-/* Sanity check */
-/* (allow for checksum not decoded yet) */
-HDassert((size_t)(image - (const uint8_t *)_image) == (len - H5EA_SIZEOF_CHKSUM));
+ /* Sanity check */
+ /* (allow for checksum not decoded yet) */
+ HDassert((size_t)(image - (const uint8_t *)_image) == (len - H5EA_SIZEOF_CHKSUM));
-/* Set the data block's size */
-/* (Note: This is not the same as the image length, for paged data blocks) */
-dblock->size = H5EA_DBLOCK_SIZE(dblock);
+ /* Set the data block's size */
+ /* (Note: This is not the same as the image length, for paged data blocks) */
+ dblock->size = H5EA_DBLOCK_SIZE(dblock);
-/* checksum verification already done in verify_chksum cb */
+ /* checksum verification already done in verify_chksum cb */
-/* Metadata checksum */
-UINT32DECODE(image, stored_chksum);
+ /* Metadata checksum */
+ UINT32DECODE(image, stored_chksum);
-/* Sanity check */
-HDassert((size_t)(image - (const uint8_t *)_image) == len);
+ /* Sanity check */
+ HDassert((size_t)(image - (const uint8_t *)_image) == len);
-/* Set return value */
-ret_value = dblock;
+ /* Set return value */
+ ret_value = dblock;
-CATCH
+ CATCH
-/* Release resources */
-if (!ret_value)
- if (dblock && H5EA__dblock_dest(dblock) < 0)
- H5E_THROW(H5E_CANTFREE, "unable to destroy extensible array data block")
+ /* Release resources */
+ if (!ret_value)
+ if (dblock && H5EA__dblock_dest(dblock) < 0)
+ H5E_THROW(H5E_CANTFREE, "unable to destroy extensible array data block")
END_FUNC(STATIC) /* end H5EA__cache_dblock_deserialize() */
@@ -1583,18 +1584,18 @@ END_FUNC(STATIC) /* end H5EA__cache_dblock_deserialize() */
BEGIN_FUNC(STATIC, NOERR, herr_t, SUCCEED, -,
H5EA__cache_dblock_image_len(const void *_thing, size_t *image_len))
-/* Local variables */
-const H5EA_dblock_t *dblock = (const H5EA_dblock_t *)_thing; /* Pointer to the object */
+ /* Local variables */
+ const H5EA_dblock_t *dblock = (const H5EA_dblock_t *)_thing; /* Pointer to the object */
-/* Check arguments */
-HDassert(dblock);
-HDassert(image_len);
+ /* Check arguments */
+ HDassert(dblock);
+ HDassert(image_len);
-/* Set the image length size */
-if (!dblock->npages)
- *image_len = dblock->size;
-else
- *image_len = (size_t)H5EA_DBLOCK_PREFIX_SIZE(dblock);
+ /* Set the image length size */
+ if (!dblock->npages)
+ *image_len = dblock->size;
+ else
+ *image_len = (size_t)H5EA_DBLOCK_PREFIX_SIZE(dblock);
END_FUNC(STATIC) /* end H5EA__cache_dblock_image_len() */
@@ -1614,56 +1615,56 @@ BEGIN_FUNC(STATIC, ERR, herr_t, SUCCEED, FAIL,
H5EA__cache_dblock_serialize(const H5F_t *f, void *_image, size_t H5_ATTR_UNUSED len,
void *_thing))
-/* Local variables */
-H5EA_dblock_t *dblock = (H5EA_dblock_t *)_thing; /* Pointer to the object to serialize */
-uint8_t * image = (uint8_t *)_image; /* Pointer into raw data buffer */
-uint32_t metadata_chksum; /* Computed metadata checksum value */
+ /* Local variables */
+ H5EA_dblock_t *dblock = (H5EA_dblock_t *)_thing; /* Pointer to the object to serialize */
+ uint8_t * image = (uint8_t *)_image; /* Pointer into raw data buffer */
+ uint32_t metadata_chksum; /* Computed metadata checksum value */
-/* check arguments */
-HDassert(f);
-HDassert(image);
-HDassert(dblock);
-HDassert(dblock->hdr);
+ /* check arguments */
+ HDassert(f);
+ HDassert(image);
+ HDassert(dblock);
+ HDassert(dblock->hdr);
-/* Magic number */
-H5MM_memcpy(image, H5EA_DBLOCK_MAGIC, (size_t)H5_SIZEOF_MAGIC);
-image += H5_SIZEOF_MAGIC;
+ /* Magic number */
+ H5MM_memcpy(image, H5EA_DBLOCK_MAGIC, (size_t)H5_SIZEOF_MAGIC);
+ image += H5_SIZEOF_MAGIC;
-/* Version # */
-*image++ = H5EA_DBLOCK_VERSION;
+ /* Version # */
+ *image++ = H5EA_DBLOCK_VERSION;
-/* Extensible array type */
-HDassert(dblock->hdr->cparam.cls->id <= 255);
-*image++ = (uint8_t)dblock->hdr->cparam.cls->id;
+ /* Extensible array type */
+ HDassert(dblock->hdr->cparam.cls->id <= 255);
+ *image++ = (uint8_t)dblock->hdr->cparam.cls->id;
-/* Address of array header for array which owns this block */
-H5F_addr_encode(f, &image, dblock->hdr->addr);
+ /* Address of array header for array which owns this block */
+ H5F_addr_encode(f, &image, dblock->hdr->addr);
-/* Offset of block in array */
-UINT64ENCODE_VAR(image, dblock->block_off, dblock->hdr->arr_off_size);
+ /* Offset of block in array */
+ UINT64ENCODE_VAR(image, dblock->block_off, dblock->hdr->arr_off_size);
-/* Internal information */
+ /* Internal information */
-/* Only encode elements if the data block is not paged */
-if (!dblock->npages) {
- /* Encode elements in data block */
+ /* Only encode elements if the data block is not paged */
+ if (!dblock->npages) {
+ /* Encode elements in data block */
- /* Convert from native elements in memory into raw elements on disk */
- if ((dblock->hdr->cparam.cls->encode)(image, dblock->elmts, dblock->nelmts, dblock->hdr->cb_ctx) < 0)
- H5E_THROW(H5E_CANTENCODE, "can't encode extensible array data elements")
- image += (dblock->nelmts * dblock->hdr->cparam.raw_elmt_size);
-} /* end if */
+ /* Convert from native elements in memory into raw elements on disk */
+ if ((dblock->hdr->cparam.cls->encode)(image, dblock->elmts, dblock->nelmts, dblock->hdr->cb_ctx) < 0)
+ H5E_THROW(H5E_CANTENCODE, "can't encode extensible array data elements")
+ image += (dblock->nelmts * dblock->hdr->cparam.raw_elmt_size);
+ } /* end if */
-/* Compute metadata checksum */
-metadata_chksum = H5_checksum_metadata(_image, (size_t)(image - (uint8_t *)_image), 0);
+ /* Compute metadata checksum */
+ metadata_chksum = H5_checksum_metadata(_image, (size_t)(image - (uint8_t *)_image), 0);
-/* Metadata checksum */
-UINT32ENCODE(image, metadata_chksum);
+ /* Metadata checksum */
+ UINT32ENCODE(image, metadata_chksum);
-/* Sanity check */
-HDassert((size_t)(image - (uint8_t *)_image) == len);
+ /* Sanity check */
+ HDassert((size_t)(image - (uint8_t *)_image) == len);
-CATCH
+ CATCH
END_FUNC(STATIC) /* end H5EA__cache_dblock_serialize() */
@@ -1682,79 +1683,79 @@ END_FUNC(STATIC) /* end H5EA__cache_dblock_serialize() */
BEGIN_FUNC(STATIC, ERR, herr_t, SUCCEED, FAIL,
H5EA__cache_dblock_notify(H5AC_notify_action_t action, void *_thing))
-/* Local variables */
-H5EA_dblock_t *dblock = (H5EA_dblock_t *)_thing; /* Pointer to the object */
-
-/* Check arguments */
-HDassert(dblock);
-
-/* Determine which action to take */
-switch (action) {
- case H5AC_NOTIFY_ACTION_AFTER_INSERT:
- case H5AC_NOTIFY_ACTION_AFTER_LOAD:
- /* Create flush dependency on parent */
- if (H5EA__create_flush_depend((H5AC_info_t *)dblock->parent, (H5AC_info_t *)dblock) < 0)
- H5E_THROW(H5E_CANTDEPEND,
- "unable to create flush dependency between data block and parent, address = %llu",
- (unsigned long long)dblock->addr)
- break;
-
- case H5AC_NOTIFY_ACTION_AFTER_FLUSH:
- /* Destroy flush dependency on extensible array header, if set */
- if (dblock->has_hdr_depend) {
- if (H5EA__destroy_flush_depend((H5AC_info_t *)dblock->hdr, (H5AC_info_t *)dblock) < 0)
- H5E_THROW(
- H5E_CANTUNDEPEND,
- "unable to destroy flush dependency between direct block and header, address = %llu",
- (unsigned long long)dblock->addr)
- dblock->has_hdr_depend = FALSE;
- } /* end if */
- break;
-
- case H5AC_NOTIFY_ACTION_BEFORE_EVICT:
- /* Destroy flush dependency on parent */
- if (H5EA__destroy_flush_depend((H5AC_info_t *)dblock->parent, (H5AC_info_t *)dblock) < 0)
- H5E_THROW(H5E_CANTUNDEPEND,
- "unable to destroy flush dependency between data block and parent, address = %llu",
- (unsigned long long)dblock->addr)
-
- /* Destroy flush dependency on extensible array header, if set */
- if (dblock->has_hdr_depend) {
- if (H5EA__destroy_flush_depend((H5AC_info_t *)dblock->hdr, (H5AC_info_t *)dblock) < 0)
+ /* Local variables */
+ H5EA_dblock_t *dblock = (H5EA_dblock_t *)_thing; /* Pointer to the object */
+
+ /* Check arguments */
+ HDassert(dblock);
+
+ /* Determine which action to take */
+ switch (action) {
+ case H5AC_NOTIFY_ACTION_AFTER_INSERT:
+ case H5AC_NOTIFY_ACTION_AFTER_LOAD:
+ /* Create flush dependency on parent */
+ if (H5EA__create_flush_depend((H5AC_info_t *)dblock->parent, (H5AC_info_t *)dblock) < 0)
+ H5E_THROW(H5E_CANTDEPEND,
+ "unable to create flush dependency between data block and parent, address = %llu",
+ (unsigned long long)dblock->addr)
+ break;
+
+ case H5AC_NOTIFY_ACTION_AFTER_FLUSH:
+ /* Destroy flush dependency on extensible array header, if set */
+ if (dblock->has_hdr_depend) {
+ if (H5EA__destroy_flush_depend((H5AC_info_t *)dblock->hdr, (H5AC_info_t *)dblock) < 0)
+ H5E_THROW(
+ H5E_CANTUNDEPEND,
+ "unable to destroy flush dependency between direct block and header, address = %llu",
+ (unsigned long long)dblock->addr)
+ dblock->has_hdr_depend = FALSE;
+ } /* end if */
+ break;
+
+ case H5AC_NOTIFY_ACTION_BEFORE_EVICT:
+ /* Destroy flush dependency on parent */
+ if (H5EA__destroy_flush_depend((H5AC_info_t *)dblock->parent, (H5AC_info_t *)dblock) < 0)
H5E_THROW(H5E_CANTUNDEPEND,
- "unable to destroy flush dependency between data block and header, address = %llu",
+ "unable to destroy flush dependency between data block and parent, address = %llu",
(unsigned long long)dblock->addr)
- dblock->has_hdr_depend = FALSE;
- } /* end if */
- /* Detach from 'top' proxy for extensible array */
- if (dblock->top_proxy) {
- if (H5AC_proxy_entry_remove_child(dblock->top_proxy, dblock) < 0)
- H5E_THROW(
- H5E_CANTUNDEPEND,
- "unable to destroy flush dependency between data block and extensible array 'top' proxy")
- dblock->top_proxy = NULL;
- } /* end if */
- break;
-
- case H5AC_NOTIFY_ACTION_ENTRY_DIRTIED:
- case H5AC_NOTIFY_ACTION_ENTRY_CLEANED:
- case H5AC_NOTIFY_ACTION_CHILD_DIRTIED:
- case H5AC_NOTIFY_ACTION_CHILD_CLEANED:
- case H5AC_NOTIFY_ACTION_CHILD_UNSERIALIZED:
- case H5AC_NOTIFY_ACTION_CHILD_SERIALIZED:
- /* do nothing */
- break;
-
- default:
+ /* Destroy flush dependency on extensible array header, if set */
+ if (dblock->has_hdr_depend) {
+ if (H5EA__destroy_flush_depend((H5AC_info_t *)dblock->hdr, (H5AC_info_t *)dblock) < 0)
+ H5E_THROW(
+ H5E_CANTUNDEPEND,
+ "unable to destroy flush dependency between data block and header, address = %llu",
+ (unsigned long long)dblock->addr)
+ dblock->has_hdr_depend = FALSE;
+ } /* end if */
+
+ /* Detach from 'top' proxy for extensible array */
+ if (dblock->top_proxy) {
+ if (H5AC_proxy_entry_remove_child(dblock->top_proxy, dblock) < 0)
+ H5E_THROW(H5E_CANTUNDEPEND, "unable to destroy flush dependency between data block and "
+ "extensible array 'top' proxy")
+ dblock->top_proxy = NULL;
+ } /* end if */
+ break;
+
+ case H5AC_NOTIFY_ACTION_ENTRY_DIRTIED:
+ case H5AC_NOTIFY_ACTION_ENTRY_CLEANED:
+ case H5AC_NOTIFY_ACTION_CHILD_DIRTIED:
+ case H5AC_NOTIFY_ACTION_CHILD_CLEANED:
+ case H5AC_NOTIFY_ACTION_CHILD_UNSERIALIZED:
+ case H5AC_NOTIFY_ACTION_CHILD_SERIALIZED:
+ /* do nothing */
+ break;
+
+ default:
#ifdef NDEBUG
- H5E_THROW(H5E_BADVALUE, "unknown action from metadata cache")
+ H5E_THROW(H5E_BADVALUE, "unknown action from metadata cache")
#else /* NDEBUG */
- HDassert(0 && "Unknown action?!?");
+ HDassert(0 && "Unknown action?!?");
#endif /* NDEBUG */
-} /* end switch */
+ } /* end switch */
-CATCH
+ CATCH
END_FUNC(STATIC) /* end H5EA__cache_dblock_notify() */
@@ -1773,14 +1774,14 @@ END_FUNC(STATIC) /* end H5EA__cache_dblock_notify() */
*/
BEGIN_FUNC(STATIC, ERR, herr_t, SUCCEED, FAIL, H5EA__cache_dblock_free_icr(void *thing))
-/* Check arguments */
-HDassert(thing);
+ /* Check arguments */
+ HDassert(thing);
-/* Release the extensible array data block */
-if (H5EA__dblock_dest((H5EA_dblock_t *)thing) < 0)
- H5E_THROW(H5E_CANTFREE, "can't free extensible array data block")
+ /* Release the extensible array data block */
+ if (H5EA__dblock_dest((H5EA_dblock_t *)thing) < 0)
+ H5E_THROW(H5E_CANTFREE, "can't free extensible array data block")
-CATCH
+ CATCH
END_FUNC(STATIC) /* end H5EA__cache_dblock_free_icr() */
@@ -1816,16 +1817,16 @@ END_FUNC(STATIC) /* end H5EA__cache_dblock_free_icr() */
BEGIN_FUNC(STATIC, NOERR, herr_t, SUCCEED, -,
H5EA__cache_dblock_fsf_size(const void *_thing, hsize_t *fsf_size))
-/* Local variables */
-const H5EA_dblock_t *dblock = (const H5EA_dblock_t *)_thing; /* Pointer to the object */
+ /* Local variables */
+ const H5EA_dblock_t *dblock = (const H5EA_dblock_t *)_thing; /* Pointer to the object */
-/* Check arguments */
-HDassert(dblock);
-HDassert(dblock->cache_info.magic == H5C__H5C_CACHE_ENTRY_T_MAGIC);
-HDassert(dblock->cache_info.type == H5AC_EARRAY_DBLOCK);
-HDassert(fsf_size);
+ /* Check arguments */
+ HDassert(dblock);
+ HDassert(dblock->cache_info.magic == H5C__H5C_CACHE_ENTRY_T_MAGIC);
+ HDassert(dblock->cache_info.type == H5AC_EARRAY_DBLOCK);
+ HDassert(fsf_size);
-*fsf_size = dblock->size;
+ *fsf_size = dblock->size;
END_FUNC(STATIC) /* end H5EA__cache_dblock_fsf_size() */
@@ -1844,16 +1845,16 @@ END_FUNC(STATIC) /* end H5EA__cache_dblock_fsf_size() */
BEGIN_FUNC(STATIC, NOERR, herr_t, SUCCEED, -,
H5EA__cache_dblk_page_get_initial_load_size(void *_udata, size_t *image_len))
-/* Local variables */
-H5EA_dblk_page_cache_ud_t *udata = (H5EA_dblk_page_cache_ud_t *)_udata; /* User data */
+ /* Local variables */
+ H5EA_dblk_page_cache_ud_t *udata = (H5EA_dblk_page_cache_ud_t *)_udata; /* User data */
-/* Check arguments */
-HDassert(udata);
-HDassert(udata->hdr);
-HDassert(image_len);
+ /* Check arguments */
+ HDassert(udata);
+ HDassert(udata->hdr);
+ HDassert(image_len);
-/* Set the image length size */
-*image_len = (size_t)H5EA_DBLK_PAGE_SIZE(udata->hdr);
+ /* Set the image length size */
+ *image_len = (size_t)H5EA_DBLK_PAGE_SIZE(udata->hdr);
END_FUNC(STATIC) /* end H5EA__cache_dblk_page_get_initial_load_size() */
@@ -1873,19 +1874,19 @@ END_FUNC(STATIC) /* end H5EA__cache_dblk_page_get_initial_load_size() */
BEGIN_FUNC(STATIC, NOERR, htri_t, TRUE, -,
H5EA__cache_dblk_page_verify_chksum(const void *_image, size_t len, void H5_ATTR_UNUSED *_udata))
-/* Local variables */
-const uint8_t *image = (const uint8_t *)_image; /* Pointer into raw data buffer */
-uint32_t stored_chksum; /* Stored metadata checksum value */
-uint32_t computed_chksum; /* Computed metadata checksum value */
+ /* Local variables */
+ const uint8_t *image = (const uint8_t *)_image; /* Pointer into raw data buffer */
+ uint32_t stored_chksum; /* Stored metadata checksum value */
+ uint32_t computed_chksum; /* Computed metadata checksum value */
-/* Check arguments */
-HDassert(image);
+ /* Check arguments */
+ HDassert(image);
-/* Get stored and computed checksums */
-H5F_get_checksums(image, len, &stored_chksum, &computed_chksum);
+ /* Get stored and computed checksums */
+ H5F_get_checksums(image, len, &stored_chksum, &computed_chksum);
-if (stored_chksum != computed_chksum)
- ret_value = FALSE;
+ if (stored_chksum != computed_chksum)
+ ret_value = FALSE;
END_FUNC(STATIC) /* end H5EA__cache_dblk_page_verify_chksum() */
@@ -1906,59 +1907,59 @@ BEGIN_FUNC(STATIC, ERR, void *, NULL, NULL,
H5EA__cache_dblk_page_deserialize(const void *_image, size_t len, void *_udata,
hbool_t H5_ATTR_UNUSED *dirty))
-/* Local variables */
-H5EA_dblk_page_t * dblk_page = NULL; /* Data block page info */
-H5EA_dblk_page_cache_ud_t *udata =
- (H5EA_dblk_page_cache_ud_t *)_udata; /* User data for loading data block page */
-const uint8_t *image = (const uint8_t *)_image; /* Pointer into raw data buffer */
-uint32_t stored_chksum; /* Stored metadata checksum value */
+ /* Local variables */
+ H5EA_dblk_page_t * dblk_page = NULL; /* Data block page info */
+ H5EA_dblk_page_cache_ud_t *udata =
+ (H5EA_dblk_page_cache_ud_t *)_udata; /* User data for loading data block page */
+ const uint8_t *image = (const uint8_t *)_image; /* Pointer into raw data buffer */
+ uint32_t stored_chksum; /* Stored metadata checksum value */
-/* Sanity check */
-HDassert(udata);
-HDassert(udata->hdr);
-HDassert(udata->parent);
-HDassert(H5F_addr_defined(udata->dblk_page_addr));
+ /* Sanity check */
+ HDassert(udata);
+ HDassert(udata->hdr);
+ HDassert(udata->parent);
+ HDassert(H5F_addr_defined(udata->dblk_page_addr));
-/* Allocate the extensible array data block page */
-if (NULL == (dblk_page = H5EA__dblk_page_alloc(udata->hdr, udata->parent)))
- H5E_THROW(H5E_CANTALLOC, "memory allocation failed for extensible array data block page")
+ /* Allocate the extensible array data block page */
+ if (NULL == (dblk_page = H5EA__dblk_page_alloc(udata->hdr, udata->parent)))
+ H5E_THROW(H5E_CANTALLOC, "memory allocation failed for extensible array data block page")
-/* Set the extensible array data block page's information */
-dblk_page->addr = udata->dblk_page_addr;
+ /* Set the extensible array data block page's information */
+ dblk_page->addr = udata->dblk_page_addr;
-/* Internal information */
+ /* Internal information */
-/* Decode elements in data block page */
-/* Convert from raw elements on disk into native elements in memory */
-if ((udata->hdr->cparam.cls->decode)(image, dblk_page->elmts, udata->hdr->dblk_page_nelmts,
- udata->hdr->cb_ctx) < 0)
- H5E_THROW(H5E_CANTDECODE, "can't decode extensible array data elements")
-image += (udata->hdr->dblk_page_nelmts * udata->hdr->cparam.raw_elmt_size);
+ /* Decode elements in data block page */
+ /* Convert from raw elements on disk into native elements in memory */
+ if ((udata->hdr->cparam.cls->decode)(image, dblk_page->elmts, udata->hdr->dblk_page_nelmts,
+ udata->hdr->cb_ctx) < 0)
+ H5E_THROW(H5E_CANTDECODE, "can't decode extensible array data elements")
+ image += (udata->hdr->dblk_page_nelmts * udata->hdr->cparam.raw_elmt_size);
-/* Sanity check */
-/* (allow for checksum not decoded yet) */
-HDassert((size_t)(image - (const uint8_t *)_image) == (len - H5EA_SIZEOF_CHKSUM));
+ /* Sanity check */
+ /* (allow for checksum not decoded yet) */
+ HDassert((size_t)(image - (const uint8_t *)_image) == (len - H5EA_SIZEOF_CHKSUM));
-/* Set the data block page's size */
-dblk_page->size = len;
+ /* Set the data block page's size */
+ dblk_page->size = len;
-/* checksum verification already done in verify_chksum cb */
+ /* checksum verification already done in verify_chksum cb */
-/* Metadata checksum */
-UINT32DECODE(image, stored_chksum);
+ /* Metadata checksum */
+ UINT32DECODE(image, stored_chksum);
-/* Sanity check */
-HDassert((size_t)(image - (const uint8_t *)_image) == dblk_page->size);
+ /* Sanity check */
+ HDassert((size_t)(image - (const uint8_t *)_image) == dblk_page->size);
-/* Set return value */
-ret_value = dblk_page;
+ /* Set return value */
+ ret_value = dblk_page;
-CATCH
+ CATCH
-/* Release resources */
-if (!ret_value)
- if (dblk_page && H5EA__dblk_page_dest(dblk_page) < 0)
- H5E_THROW(H5E_CANTFREE, "unable to destroy extensible array data block page")
+ /* Release resources */
+ if (!ret_value)
+ if (dblk_page && H5EA__dblk_page_dest(dblk_page) < 0)
+ H5E_THROW(H5E_CANTFREE, "unable to destroy extensible array data block page")
END_FUNC(STATIC) /* end H5EA__cache_dblk_page_deserialize() */
@@ -1977,15 +1978,15 @@ END_FUNC(STATIC) /* end H5EA__cache_dblk_page_deserialize() */
BEGIN_FUNC(STATIC, NOERR, herr_t, SUCCEED, -,
H5EA__cache_dblk_page_image_len(const void *_thing, size_t *image_len))
-/* Local variables */
-const H5EA_dblk_page_t *dblk_page = (const H5EA_dblk_page_t *)_thing; /* Pointer to the object */
+ /* Local variables */
+ const H5EA_dblk_page_t *dblk_page = (const H5EA_dblk_page_t *)_thing; /* Pointer to the object */
-/* Check arguments */
-HDassert(dblk_page);
-HDassert(image_len);
+ /* Check arguments */
+ HDassert(dblk_page);
+ HDassert(image_len);
-/* Set the image length size */
-*image_len = dblk_page->size;
+ /* Set the image length size */
+ *image_len = dblk_page->size;
END_FUNC(STATIC) /* end H5EA__cache_dblk_page_image_len() */
@@ -2005,37 +2006,37 @@ BEGIN_FUNC(STATIC, ERR, herr_t, SUCCEED, FAIL,
H5EA__cache_dblk_page_serialize(const H5F_t H5_ATTR_NDEBUG_UNUSED *f, void *_image,
size_t H5_ATTR_UNUSED len, void *_thing))
-/* Local variables */
-H5EA_dblk_page_t *dblk_page = (H5EA_dblk_page_t *)_thing; /* Pointer to the object to serialize */
-uint8_t * image = (uint8_t *)_image; /* Pointer into raw data buffer */
-uint32_t metadata_chksum; /* Computed metadata checksum value */
+ /* Local variables */
+ H5EA_dblk_page_t *dblk_page = (H5EA_dblk_page_t *)_thing; /* Pointer to the object to serialize */
+ uint8_t * image = (uint8_t *)_image; /* Pointer into raw data buffer */
+ uint32_t metadata_chksum; /* Computed metadata checksum value */
-/* Check arguments */
-HDassert(f);
-HDassert(image);
-HDassert(dblk_page);
-HDassert(dblk_page->hdr);
+ /* Check arguments */
+ HDassert(f);
+ HDassert(image);
+ HDassert(dblk_page);
+ HDassert(dblk_page->hdr);
-/* Internal information */
+ /* Internal information */
-/* Encode elements in data block page */
+ /* Encode elements in data block page */
-/* Convert from native elements in memory into raw elements on disk */
-if ((dblk_page->hdr->cparam.cls->encode)(image, dblk_page->elmts, dblk_page->hdr->dblk_page_nelmts,
- dblk_page->hdr->cb_ctx) < 0)
- H5E_THROW(H5E_CANTENCODE, "can't encode extensible array data elements")
-image += (dblk_page->hdr->dblk_page_nelmts * dblk_page->hdr->cparam.raw_elmt_size);
+ /* Convert from native elements in memory into raw elements on disk */
+ if ((dblk_page->hdr->cparam.cls->encode)(image, dblk_page->elmts, dblk_page->hdr->dblk_page_nelmts,
+ dblk_page->hdr->cb_ctx) < 0)
+ H5E_THROW(H5E_CANTENCODE, "can't encode extensible array data elements")
+ image += (dblk_page->hdr->dblk_page_nelmts * dblk_page->hdr->cparam.raw_elmt_size);
-/* Compute metadata checksum */
-metadata_chksum = H5_checksum_metadata(_image, (size_t)(image - (uint8_t *)_image), 0);
+ /* Compute metadata checksum */
+ metadata_chksum = H5_checksum_metadata(_image, (size_t)(image - (uint8_t *)_image), 0);
-/* Metadata checksum */
-UINT32ENCODE(image, metadata_chksum);
+ /* Metadata checksum */
+ UINT32ENCODE(image, metadata_chksum);
-/* Sanity check */
-HDassert((size_t)(image - (uint8_t *)_image) == len);
+ /* Sanity check */
+ HDassert((size_t)(image - (uint8_t *)_image) == len);
-CATCH
+ CATCH
END_FUNC(STATIC) /* end H5EA__cache_dblk_page_serialize() */
@@ -2054,79 +2055,82 @@ END_FUNC(STATIC) /* end H5EA__cache_dblk_page_serialize() */
BEGIN_FUNC(STATIC, ERR, herr_t, SUCCEED, FAIL,
H5EA__cache_dblk_page_notify(H5AC_notify_action_t action, void *_thing))
-/* Local variables */
-H5EA_dblk_page_t *dblk_page = (H5EA_dblk_page_t *)_thing; /* Pointer to the object */
-
-/* Sanity check */
-HDassert(dblk_page);
-
-/* Determine which action to take */
-switch (action) {
- case H5AC_NOTIFY_ACTION_AFTER_INSERT:
- case H5AC_NOTIFY_ACTION_AFTER_LOAD:
- /* Create flush dependency on parent */
- if (H5EA__create_flush_depend((H5AC_info_t *)dblk_page->parent, (H5AC_info_t *)dblk_page) < 0)
- H5E_THROW(H5E_CANTDEPEND,
- "unable to create flush dependency between data block page and parent, address = %llu",
- (unsigned long long)dblk_page->addr)
- break;
-
- case H5AC_NOTIFY_ACTION_AFTER_FLUSH:
- /* Destroy flush dependency on extensible array header, if set */
- if (dblk_page->has_hdr_depend) {
- if (H5EA__destroy_flush_depend((H5AC_info_t *)dblk_page->hdr, (H5AC_info_t *)dblk_page) < 0)
+ /* Local variables */
+ H5EA_dblk_page_t *dblk_page = (H5EA_dblk_page_t *)_thing; /* Pointer to the object */
+
+ /* Sanity check */
+ HDassert(dblk_page);
+
+ /* Determine which action to take */
+ switch (action) {
+ case H5AC_NOTIFY_ACTION_AFTER_INSERT:
+ case H5AC_NOTIFY_ACTION_AFTER_LOAD:
+ /* Create flush dependency on parent */
+ if (H5EA__create_flush_depend((H5AC_info_t *)dblk_page->parent, (H5AC_info_t *)dblk_page) < 0)
H5E_THROW(
- H5E_CANTUNDEPEND,
- "unable to destroy flush dependency between data block page and header, address = %llu",
+ H5E_CANTDEPEND,
+ "unable to create flush dependency between data block page and parent, address = %llu",
(unsigned long long)dblk_page->addr)
- dblk_page->has_hdr_depend = FALSE;
- } /* end if */
- break;
-
- case H5AC_NOTIFY_ACTION_BEFORE_EVICT:
- /* Destroy flush dependency on parent */
- if (H5EA__destroy_flush_depend((H5AC_info_t *)dblk_page->parent, (H5AC_info_t *)dblk_page) < 0)
- H5E_THROW(H5E_CANTUNDEPEND,
- "unable to destroy flush dependency between data block page and parent, address = %llu",
- (unsigned long long)dblk_page->addr)
-
- /* Destroy flush dependency on extensible array header, if set */
- if (dblk_page->has_hdr_depend) {
- if (H5EA__destroy_flush_depend((H5AC_info_t *)dblk_page->hdr, (H5AC_info_t *)dblk_page) < 0)
+ break;
+
+ case H5AC_NOTIFY_ACTION_AFTER_FLUSH:
+ /* Destroy flush dependency on extensible array header, if set */
+ if (dblk_page->has_hdr_depend) {
+ if (H5EA__destroy_flush_depend((H5AC_info_t *)dblk_page->hdr, (H5AC_info_t *)dblk_page) < 0)
+ H5E_THROW(H5E_CANTUNDEPEND,
+ "unable to destroy flush dependency between data block page and header, "
+ "address = %llu",
+ (unsigned long long)dblk_page->addr)
+ dblk_page->has_hdr_depend = FALSE;
+ } /* end if */
+ break;
+
+ case H5AC_NOTIFY_ACTION_BEFORE_EVICT:
+ /* Destroy flush dependency on parent */
+ if (H5EA__destroy_flush_depend((H5AC_info_t *)dblk_page->parent, (H5AC_info_t *)dblk_page) < 0)
H5E_THROW(
H5E_CANTUNDEPEND,
- "unable to destroy flush dependency between data block page and header, address = %llu",
+ "unable to destroy flush dependency between data block page and parent, address = %llu",
(unsigned long long)dblk_page->addr)
- dblk_page->has_hdr_depend = FALSE;
- } /* end if */
-
- /* Detach from 'top' proxy for extensible array */
- if (dblk_page->top_proxy) {
- if (H5AC_proxy_entry_remove_child(dblk_page->top_proxy, dblk_page) < 0)
- H5E_THROW(H5E_CANTUNDEPEND, "unable to destroy flush dependency between data block page and "
- "extensible array 'top' proxy")
- dblk_page->top_proxy = NULL;
- } /* end if */
- break;
-
- case H5AC_NOTIFY_ACTION_ENTRY_DIRTIED:
- case H5AC_NOTIFY_ACTION_ENTRY_CLEANED:
- case H5AC_NOTIFY_ACTION_CHILD_DIRTIED:
- case H5AC_NOTIFY_ACTION_CHILD_CLEANED:
- case H5AC_NOTIFY_ACTION_CHILD_UNSERIALIZED:
- case H5AC_NOTIFY_ACTION_CHILD_SERIALIZED:
- /* do nothing */
- break;
-
- default:
+
+ /* Destroy flush dependency on extensible array header, if set */
+ if (dblk_page->has_hdr_depend) {
+ if (H5EA__destroy_flush_depend((H5AC_info_t *)dblk_page->hdr, (H5AC_info_t *)dblk_page) < 0)
+ H5E_THROW(H5E_CANTUNDEPEND,
+ "unable to destroy flush dependency between data block page and header, "
+ "address = %llu",
+ (unsigned long long)dblk_page->addr)
+ dblk_page->has_hdr_depend = FALSE;
+ } /* end if */
+
+ /* Detach from 'top' proxy for extensible array */
+ if (dblk_page->top_proxy) {
+ if (H5AC_proxy_entry_remove_child(dblk_page->top_proxy, dblk_page) < 0)
+ H5E_THROW(H5E_CANTUNDEPEND,
+ "unable to destroy flush dependency between data block page and "
+ "extensible array 'top' proxy")
+ dblk_page->top_proxy = NULL;
+ } /* end if */
+ break;
+
+ case H5AC_NOTIFY_ACTION_ENTRY_DIRTIED:
+ case H5AC_NOTIFY_ACTION_ENTRY_CLEANED:
+ case H5AC_NOTIFY_ACTION_CHILD_DIRTIED:
+ case H5AC_NOTIFY_ACTION_CHILD_CLEANED:
+ case H5AC_NOTIFY_ACTION_CHILD_UNSERIALIZED:
+ case H5AC_NOTIFY_ACTION_CHILD_SERIALIZED:
+ /* do nothing */
+ break;
+
+ default:
#ifdef NDEBUG
- H5E_THROW(H5E_BADVALUE, "unknown action from metadata cache")
+ H5E_THROW(H5E_BADVALUE, "unknown action from metadata cache")
#else /* NDEBUG */
- HDassert(0 && "Unknown action?!?");
+ HDassert(0 && "Unknown action?!?");
#endif /* NDEBUG */
-} /* end switch */
+ } /* end switch */
-CATCH
+ CATCH
END_FUNC(STATIC) /* end H5EA__cache_dblk_page_notify() */
@@ -2145,13 +2149,13 @@ END_FUNC(STATIC) /* end H5EA__cache_dblk_page_notify() */
*/
BEGIN_FUNC(STATIC, ERR, herr_t, SUCCEED, FAIL, H5EA__cache_dblk_page_free_icr(void *thing))
-/* Check arguments */
-HDassert(thing);
+ /* Check arguments */
+ HDassert(thing);
-/* Release the extensible array data block page */
-if (H5EA__dblk_page_dest((H5EA_dblk_page_t *)thing) < 0)
- H5E_THROW(H5E_CANTFREE, "can't free extensible array data block page")
+ /* Release the extensible array data block page */
+ if (H5EA__dblk_page_dest((H5EA_dblk_page_t *)thing) < 0)
+ H5E_THROW(H5E_CANTFREE, "can't free extensible array data block page")
-CATCH
+ CATCH
END_FUNC(STATIC) /* end H5EA__cache_dblk_page_free_icr() */
diff --git a/src/H5EAdbg.c b/src/H5EAdbg.c
index a482eb0..595983f 100644
--- a/src/H5EAdbg.c
+++ b/src/H5EAdbg.c
@@ -83,64 +83,65 @@ BEGIN_FUNC(PKG, ERR, herr_t, SUCCEED, FAIL,
H5EA__hdr_debug(H5F_t *f, haddr_t addr, FILE *stream, int indent, int fwidth,
const H5EA_class_t *cls, haddr_t obj_addr))
-/* Local variables */
-H5EA_hdr_t *hdr = NULL; /* Shared extensible array header */
-void * dbg_ctx = NULL; /* Extensible array debugging context */
-
-/* Check arguments */
-HDassert(f);
-HDassert(H5F_addr_defined(addr));
-HDassert(H5F_addr_defined(obj_addr));
-HDassert(stream);
-HDassert(indent >= 0);
-HDassert(fwidth >= 0);
-HDassert(cls);
-
-/* Check for debugging context callback available */
-if (cls->crt_dbg_ctx)
- /* Create debugging context */
- if (NULL == (dbg_ctx = cls->crt_dbg_ctx(f, obj_addr)))
- H5E_THROW(H5E_CANTGET, "unable to create fixed array debugging context")
-
-/* Load the extensible array header */
-if (NULL == (hdr = H5EA__hdr_protect(f, addr, dbg_ctx, H5AC__READ_ONLY_FLAG)))
- H5E_THROW(H5E_CANTPROTECT, "unable to load extensible array header")
-
-/* Print opening message */
-HDfprintf(stream, "%*sExtensible Array Header...\n", indent, "");
-
-/* Print the values */
-HDfprintf(stream, "%*s%-*s %s\n", indent, "", fwidth, "Array class ID:", hdr->cparam.cls->name);
-HDfprintf(stream, "%*s%-*s %Zu\n", indent, "", fwidth, "Header size:", hdr->size);
-HDfprintf(stream, "%*s%-*s %u\n", indent, "", fwidth,
- "Raw Element Size:", (unsigned)hdr->cparam.raw_elmt_size);
-HDfprintf(stream, "%*s%-*s %Zu\n", indent, "", fwidth,
- "Native Element Size (on this platform):", hdr->cparam.cls->nat_elmt_size);
-HDfprintf(stream, "%*s%-*s %u\n", indent, "", fwidth,
- "Log2(Max. # of elements in array):", (unsigned)hdr->cparam.max_nelmts_bits);
-HDfprintf(stream, "%*s%-*s %u\n", indent, "", fwidth,
- "# of elements in index block:", (unsigned)hdr->cparam.idx_blk_elmts);
-HDfprintf(stream, "%*s%-*s %u\n", indent, "", fwidth,
- "Min. # of elements per data block:", (unsigned)hdr->cparam.data_blk_min_elmts);
-HDfprintf(stream, "%*s%-*s %u\n", indent, "", fwidth,
- "Min. # of data block pointers for a super block:", (unsigned)hdr->cparam.sup_blk_min_data_ptrs);
-HDfprintf(stream, "%*s%-*s %u\n", indent, "", fwidth,
- "Log2(Max. # of elements in data block page):", (unsigned)hdr->cparam.max_dblk_page_nelmts_bits);
-HDfprintf(stream, "%*s%-*s %Hu\n", indent, "", fwidth,
- "Highest element index stored (+1):", hdr->stats.stored.max_idx_set);
-HDfprintf(stream, "%*s%-*s %Hu\n", indent, "", fwidth,
- "Number of super blocks created:", hdr->stats.stored.nsuper_blks);
-HDfprintf(stream, "%*s%-*s %Hu\n", indent, "", fwidth,
- "Number of data blocks created:", hdr->stats.stored.ndata_blks);
-HDfprintf(stream, "%*s%-*s %Hu\n", indent, "", fwidth,
- "Number of elements 'realized':", hdr->stats.stored.nelmts);
-HDfprintf(stream, "%*s%-*s %a\n", indent, "", fwidth, "Index Block Address:", hdr->idx_blk_addr);
-
-CATCH
-if (dbg_ctx && cls->dst_dbg_ctx(dbg_ctx) < 0)
- H5E_THROW(H5E_CANTRELEASE, "unable to release extensible array debugging context")
-if (hdr && H5EA__hdr_unprotect(hdr, H5AC__NO_FLAGS_SET) < 0)
- H5E_THROW(H5E_CANTUNPROTECT, "unable to release extensible array header")
+ /* Local variables */
+ H5EA_hdr_t *hdr = NULL; /* Shared extensible array header */
+ void * dbg_ctx = NULL; /* Extensible array debugging context */
+
+ /* Check arguments */
+ HDassert(f);
+ HDassert(H5F_addr_defined(addr));
+ HDassert(H5F_addr_defined(obj_addr));
+ HDassert(stream);
+ HDassert(indent >= 0);
+ HDassert(fwidth >= 0);
+ HDassert(cls);
+
+ /* Check for debugging context callback available */
+ if (cls->crt_dbg_ctx)
+ /* Create debugging context */
+ if (NULL == (dbg_ctx = cls->crt_dbg_ctx(f, obj_addr)))
+ H5E_THROW(H5E_CANTGET, "unable to create fixed array debugging context")
+
+ /* Load the extensible array header */
+ if (NULL == (hdr = H5EA__hdr_protect(f, addr, dbg_ctx, H5AC__READ_ONLY_FLAG)))
+ H5E_THROW(H5E_CANTPROTECT, "unable to load extensible array header")
+
+ /* Print opening message */
+ HDfprintf(stream, "%*sExtensible Array Header...\n", indent, "");
+
+ /* Print the values */
+ HDfprintf(stream, "%*s%-*s %s\n", indent, "", fwidth, "Array class ID:", hdr->cparam.cls->name);
+ HDfprintf(stream, "%*s%-*s %zu\n", indent, "", fwidth, "Header size:", hdr->size);
+ HDfprintf(stream, "%*s%-*s %u\n", indent, "", fwidth,
+ "Raw Element Size:", (unsigned)hdr->cparam.raw_elmt_size);
+ HDfprintf(stream, "%*s%-*s %zu\n", indent, "", fwidth,
+ "Native Element Size (on this platform):", hdr->cparam.cls->nat_elmt_size);
+ HDfprintf(stream, "%*s%-*s %u\n", indent, "", fwidth,
+ "Log2(Max. # of elements in array):", (unsigned)hdr->cparam.max_nelmts_bits);
+ HDfprintf(stream, "%*s%-*s %u\n", indent, "", fwidth,
+ "# of elements in index block:", (unsigned)hdr->cparam.idx_blk_elmts);
+ HDfprintf(stream, "%*s%-*s %u\n", indent, "", fwidth,
+ "Min. # of elements per data block:", (unsigned)hdr->cparam.data_blk_min_elmts);
+ HDfprintf(stream, "%*s%-*s %u\n", indent, "", fwidth, "Min. # of data block pointers for a super block:",
+ (unsigned)hdr->cparam.sup_blk_min_data_ptrs);
+ HDfprintf(stream, "%*s%-*s %u\n", indent, "", fwidth, "Log2(Max. # of elements in data block page):",
+ (unsigned)hdr->cparam.max_dblk_page_nelmts_bits);
+ HDfprintf(stream, "%*s%-*s %" PRIuHSIZE "\n", indent, "", fwidth,
+ "Highest element index stored (+1):", hdr->stats.stored.max_idx_set);
+ HDfprintf(stream, "%*s%-*s %" PRIuHSIZE "\n", indent, "", fwidth,
+ "Number of super blocks created:", hdr->stats.stored.nsuper_blks);
+ HDfprintf(stream, "%*s%-*s %" PRIuHSIZE "\n", indent, "", fwidth,
+ "Number of data blocks created:", hdr->stats.stored.ndata_blks);
+ HDfprintf(stream, "%*s%-*s %" PRIuHSIZE "\n", indent, "", fwidth,
+ "Number of elements 'realized':", hdr->stats.stored.nelmts);
+ HDfprintf(stream, "%*s%-*s %" PRIuHADDR "\n", indent, "", fwidth,
+ "Index Block Address:", hdr->idx_blk_addr);
+
+ CATCH
+ if (dbg_ctx && cls->dst_dbg_ctx(dbg_ctx) < 0)
+ H5E_THROW(H5E_CANTRELEASE, "unable to release extensible array debugging context")
+ if (hdr && H5EA__hdr_unprotect(hdr, H5AC__NO_FLAGS_SET) < 0)
+ H5E_THROW(H5E_CANTUNPROTECT, "unable to release extensible array header")
END_FUNC(PKG) /* end H5EA__hdr_debug() */
@@ -160,101 +161,102 @@ BEGIN_FUNC(PKG, ERR, herr_t, SUCCEED, FAIL,
H5EA__iblock_debug(H5F_t *f, haddr_t H5_ATTR_UNUSED addr, FILE *stream, int indent, int fwidth,
const H5EA_class_t *cls, haddr_t hdr_addr, haddr_t obj_addr))
-/* Local variables */
-H5EA_hdr_t * hdr = NULL; /* Shared extensible array header */
-H5EA_iblock_t *iblock = NULL; /* Extensible array index block */
-void * dbg_ctx = NULL; /* Extensible array context */
-
-/* Check arguments */
-HDassert(f);
-HDassert(H5F_addr_defined(addr));
-HDassert(stream);
-HDassert(indent >= 0);
-HDassert(fwidth >= 0);
-HDassert(cls);
-HDassert(H5F_addr_defined(hdr_addr));
-HDassert(H5F_addr_defined(obj_addr));
-
-/* Check for debugging context callback available */
-if (cls->crt_dbg_ctx)
- /* Create debugging context */
- if (NULL == (dbg_ctx = cls->crt_dbg_ctx(f, obj_addr)))
- H5E_THROW(H5E_CANTGET, "unable to create extensible array debugging context")
-
-/* Load the extensible array header */
-if (NULL == (hdr = H5EA__hdr_protect(f, hdr_addr, dbg_ctx, H5AC__READ_ONLY_FLAG)))
- H5E_THROW(H5E_CANTPROTECT, "unable to load extensible array header")
-
-/* Sanity check */
-HDassert(H5F_addr_eq(hdr->idx_blk_addr, addr));
-
-/* Protect index block */
-if (NULL == (iblock = H5EA__iblock_protect(hdr, H5AC__READ_ONLY_FLAG)))
- H5E_THROW(H5E_CANTPROTECT, "unable to protect extensible array index block, address = %llu",
- (unsigned long long)hdr->idx_blk_addr)
-
-/* Print opening message */
-HDfprintf(stream, "%*sExtensible Array Index Block...\n", indent, "");
-
-/* Print the values */
-HDfprintf(stream, "%*s%-*s %s\n", indent, "", fwidth, "Array class ID:", hdr->cparam.cls->name);
-HDfprintf(stream, "%*s%-*s %Zu\n", indent, "", fwidth, "Index Block size:", iblock->size);
-HDfprintf(stream, "%*s%-*s %Zu\n", indent, "", fwidth,
- "# of data block addresses in index block:", iblock->ndblk_addrs);
-HDfprintf(stream, "%*s%-*s %Zu\n", indent, "", fwidth,
- "# of super block addresses in index block:", iblock->nsblk_addrs);
-
-/* Check if there are any elements in index block */
-if (hdr->cparam.idx_blk_elmts > 0) {
- unsigned u; /* Local index variable */
-
- /* Print the elements in the index block */
- HDfprintf(stream, "%*sElements in Index Block:\n", indent, "");
- for (u = 0; u < hdr->cparam.idx_blk_elmts; u++) {
- /* Call the class's 'debug' callback */
- if ((hdr->cparam.cls->debug)(stream, (indent + 3), MAX(0, (fwidth - 3)), (hsize_t)u,
- ((uint8_t *)iblock->elmts) + (hdr->cparam.cls->nat_elmt_size * u)) < 0)
- H5E_THROW(H5E_CANTGET, "can't get element for debugging")
- } /* end for */
-} /* end if */
-
-/* Check if there are any data block addresses in index block */
-if (iblock->ndblk_addrs > 0) {
- char temp_str[128]; /* Temporary string, for formatting */
- unsigned u; /* Local index variable */
-
- /* Print the data block addresses in the index block */
- HDfprintf(stream, "%*sData Block Addresses in Index Block:\n", indent, "");
- for (u = 0; u < iblock->ndblk_addrs; u++) {
- /* Print address */
- HDsprintf(temp_str, "Address #%u:", u);
- HDfprintf(stream, "%*s%-*s %a\n", (indent + 3), "", MAX(0, (fwidth - 3)), temp_str,
- iblock->dblk_addrs[u]);
- } /* end for */
-} /* end if */
-
-/* Check if there are any super block addresses in index block */
-if (iblock->nsblk_addrs > 0) {
- char temp_str[128]; /* Temporary string, for formatting */
- unsigned u; /* Local index variable */
-
- /* Print the super block addresses in the index block */
- HDfprintf(stream, "%*sSuper Block Addresses in Index Block:\n", indent, "");
- for (u = 0; u < iblock->nsblk_addrs; u++) {
- /* Print address */
- HDsprintf(temp_str, "Address #%u:", u);
- HDfprintf(stream, "%*s%-*s %a\n", (indent + 3), "", MAX(0, (fwidth - 3)), temp_str,
- iblock->sblk_addrs[u]);
- } /* end for */
-} /* end if */
-
-CATCH
-if (dbg_ctx && cls->dst_dbg_ctx(dbg_ctx) < 0)
- H5E_THROW(H5E_CANTRELEASE, "unable to release extensible array debugging context")
-if (iblock && H5EA__iblock_unprotect(iblock, H5AC__NO_FLAGS_SET) < 0)
- H5E_THROW(H5E_CANTUNPROTECT, "unable to release extensible array index block")
-if (hdr && H5EA__hdr_unprotect(hdr, H5AC__NO_FLAGS_SET) < 0)
- H5E_THROW(H5E_CANTUNPROTECT, "unable to release extensible array header")
+ /* Local variables */
+ H5EA_hdr_t * hdr = NULL; /* Shared extensible array header */
+ H5EA_iblock_t *iblock = NULL; /* Extensible array index block */
+ void * dbg_ctx = NULL; /* Extensible array context */
+
+ /* Check arguments */
+ HDassert(f);
+ HDassert(H5F_addr_defined(addr));
+ HDassert(stream);
+ HDassert(indent >= 0);
+ HDassert(fwidth >= 0);
+ HDassert(cls);
+ HDassert(H5F_addr_defined(hdr_addr));
+ HDassert(H5F_addr_defined(obj_addr));
+
+ /* Check for debugging context callback available */
+ if (cls->crt_dbg_ctx)
+ /* Create debugging context */
+ if (NULL == (dbg_ctx = cls->crt_dbg_ctx(f, obj_addr)))
+ H5E_THROW(H5E_CANTGET, "unable to create extensible array debugging context")
+
+ /* Load the extensible array header */
+ if (NULL == (hdr = H5EA__hdr_protect(f, hdr_addr, dbg_ctx, H5AC__READ_ONLY_FLAG)))
+ H5E_THROW(H5E_CANTPROTECT, "unable to load extensible array header")
+
+ /* Sanity check */
+ HDassert(H5F_addr_eq(hdr->idx_blk_addr, addr));
+
+ /* Protect index block */
+ if (NULL == (iblock = H5EA__iblock_protect(hdr, H5AC__READ_ONLY_FLAG)))
+ H5E_THROW(H5E_CANTPROTECT, "unable to protect extensible array index block, address = %llu",
+ (unsigned long long)hdr->idx_blk_addr)
+
+ /* Print opening message */
+ HDfprintf(stream, "%*sExtensible Array Index Block...\n", indent, "");
+
+ /* Print the values */
+ HDfprintf(stream, "%*s%-*s %s\n", indent, "", fwidth, "Array class ID:", hdr->cparam.cls->name);
+ HDfprintf(stream, "%*s%-*s %zu\n", indent, "", fwidth, "Index Block size:", iblock->size);
+ HDfprintf(stream, "%*s%-*s %zu\n", indent, "", fwidth,
+ "# of data block addresses in index block:", iblock->ndblk_addrs);
+ HDfprintf(stream, "%*s%-*s %zu\n", indent, "", fwidth,
+ "# of super block addresses in index block:", iblock->nsblk_addrs);
+
+ /* Check if there are any elements in index block */
+ if (hdr->cparam.idx_blk_elmts > 0) {
+ unsigned u; /* Local index variable */
+
+ /* Print the elements in the index block */
+ HDfprintf(stream, "%*sElements in Index Block:\n", indent, "");
+ for (u = 0; u < hdr->cparam.idx_blk_elmts; u++) {
+ /* Call the class's 'debug' callback */
+ if ((hdr->cparam.cls->debug)(stream, (indent + 3), MAX(0, (fwidth - 3)), (hsize_t)u,
+ ((uint8_t *)iblock->elmts) + (hdr->cparam.cls->nat_elmt_size * u)) <
+ 0)
+ H5E_THROW(H5E_CANTGET, "can't get element for debugging")
+ } /* end for */
+ } /* end if */
+
+ /* Check if there are any data block addresses in index block */
+ if (iblock->ndblk_addrs > 0) {
+ char temp_str[128]; /* Temporary string, for formatting */
+ unsigned u; /* Local index variable */
+
+ /* Print the data block addresses in the index block */
+ HDfprintf(stream, "%*sData Block Addresses in Index Block:\n", indent, "");
+ for (u = 0; u < iblock->ndblk_addrs; u++) {
+ /* Print address */
+ HDsprintf(temp_str, "Address #%u:", u);
+ HDfprintf(stream, "%*s%-*s %" PRIuHADDR "\n", (indent + 3), "", MAX(0, (fwidth - 3)), temp_str,
+ iblock->dblk_addrs[u]);
+ } /* end for */
+ } /* end if */
+
+ /* Check if there are any super block addresses in index block */
+ if (iblock->nsblk_addrs > 0) {
+ char temp_str[128]; /* Temporary string, for formatting */
+ unsigned u; /* Local index variable */
+
+ /* Print the super block addresses in the index block */
+ HDfprintf(stream, "%*sSuper Block Addresses in Index Block:\n", indent, "");
+ for (u = 0; u < iblock->nsblk_addrs; u++) {
+ /* Print address */
+ HDsprintf(temp_str, "Address #%u:", u);
+ HDfprintf(stream, "%*s%-*s %" PRIuHADDR "\n", (indent + 3), "", MAX(0, (fwidth - 3)), temp_str,
+ iblock->sblk_addrs[u]);
+ } /* end for */
+ } /* end if */
+
+ CATCH
+ if (dbg_ctx && cls->dst_dbg_ctx(dbg_ctx) < 0)
+ H5E_THROW(H5E_CANTRELEASE, "unable to release extensible array debugging context")
+ if (iblock && H5EA__iblock_unprotect(iblock, H5AC__NO_FLAGS_SET) < 0)
+ H5E_THROW(H5E_CANTUNPROTECT, "unable to release extensible array index block")
+ if (hdr && H5EA__hdr_unprotect(hdr, H5AC__NO_FLAGS_SET) < 0)
+ H5E_THROW(H5E_CANTUNPROTECT, "unable to release extensible array header")
END_FUNC(PKG) /* end H5EA__iblock_debug() */
@@ -274,70 +276,71 @@ BEGIN_FUNC(PKG, ERR, herr_t, SUCCEED, FAIL,
H5EA__sblock_debug(H5F_t *f, haddr_t addr, FILE *stream, int indent, int fwidth,
const H5EA_class_t *cls, haddr_t hdr_addr, unsigned sblk_idx, haddr_t obj_addr))
-/* Local variables */
-H5EA_hdr_t * hdr = NULL; /* Shared extensible array header */
-H5EA_sblock_t *sblock = NULL; /* Extensible array super block */
-void * dbg_ctx = NULL; /* Extensible array context */
-
-/* Check arguments */
-HDassert(f);
-HDassert(H5F_addr_defined(addr));
-HDassert(stream);
-HDassert(indent >= 0);
-HDassert(fwidth >= 0);
-HDassert(cls);
-HDassert(H5F_addr_defined(hdr_addr));
-HDassert(H5F_addr_defined(obj_addr));
-
-/* Check for debugging context callback available */
-if (cls->crt_dbg_ctx)
- /* Create debugging context */
- if (NULL == (dbg_ctx = cls->crt_dbg_ctx(f, obj_addr)))
- H5E_THROW(H5E_CANTGET, "unable to create extensible array debugging context")
-
-/* Load the extensible array header */
-if (NULL == (hdr = H5EA__hdr_protect(f, hdr_addr, dbg_ctx, H5AC__READ_ONLY_FLAG)))
- H5E_THROW(H5E_CANTPROTECT, "unable to load extensible array header")
-
-/* Protect super block */
-/* (Note: setting parent of super block to 'hdr' for this operation should be OK -QAK) */
-if (NULL == (sblock = H5EA__sblock_protect(hdr, (H5EA_iblock_t *)hdr, addr, sblk_idx, H5AC__READ_ONLY_FLAG)))
- H5E_THROW(H5E_CANTPROTECT, "unable to protect extensible array super block, address = %llu",
- (unsigned long long)addr)
-
-/* Print opening message */
-HDfprintf(stream, "%*sExtensible Array Super Block...\n", indent, "");
-
-/* Print the values */
-HDfprintf(stream, "%*s%-*s %s\n", indent, "", fwidth, "Array class ID:", hdr->cparam.cls->name);
-HDfprintf(stream, "%*s%-*s %Zu\n", indent, "", fwidth, "Super Block size:", sblock->size);
-HDfprintf(stream, "%*s%-*s %Zu\n", indent, "", fwidth,
- "# of data block addresses in super block:", sblock->ndblks);
-HDfprintf(stream, "%*s%-*s %Zu\n", indent, "", fwidth,
- "# of elements in data blocks from this super block:", sblock->dblk_nelmts);
-
-/* Check if there are any data block addresses in super block */
-if (sblock->ndblks > 0) {
- char temp_str[128]; /* Temporary string, for formatting */
- unsigned u; /* Local index variable */
-
- /* Print the data block addresses in the super block */
- HDfprintf(stream, "%*sData Block Addresses in Super Block:\n", indent, "");
- for (u = 0; u < sblock->ndblks; u++) {
- /* Print address */
- HDsprintf(temp_str, "Address #%u:", u);
- HDfprintf(stream, "%*s%-*s %a\n", (indent + 3), "", MAX(0, (fwidth - 3)), temp_str,
- sblock->dblk_addrs[u]);
- } /* end for */
-} /* end if */
-
-CATCH
-if (dbg_ctx && cls->dst_dbg_ctx(dbg_ctx) < 0)
- H5E_THROW(H5E_CANTRELEASE, "unable to release extensible array debugging context")
-if (sblock && H5EA__sblock_unprotect(sblock, H5AC__NO_FLAGS_SET) < 0)
- H5E_THROW(H5E_CANTUNPROTECT, "unable to release extensible array super block")
-if (hdr && H5EA__hdr_unprotect(hdr, H5AC__NO_FLAGS_SET) < 0)
- H5E_THROW(H5E_CANTUNPROTECT, "unable to release extensible array header")
+ /* Local variables */
+ H5EA_hdr_t * hdr = NULL; /* Shared extensible array header */
+ H5EA_sblock_t *sblock = NULL; /* Extensible array super block */
+ void * dbg_ctx = NULL; /* Extensible array context */
+
+ /* Check arguments */
+ HDassert(f);
+ HDassert(H5F_addr_defined(addr));
+ HDassert(stream);
+ HDassert(indent >= 0);
+ HDassert(fwidth >= 0);
+ HDassert(cls);
+ HDassert(H5F_addr_defined(hdr_addr));
+ HDassert(H5F_addr_defined(obj_addr));
+
+ /* Check for debugging context callback available */
+ if (cls->crt_dbg_ctx)
+ /* Create debugging context */
+ if (NULL == (dbg_ctx = cls->crt_dbg_ctx(f, obj_addr)))
+ H5E_THROW(H5E_CANTGET, "unable to create extensible array debugging context")
+
+ /* Load the extensible array header */
+ if (NULL == (hdr = H5EA__hdr_protect(f, hdr_addr, dbg_ctx, H5AC__READ_ONLY_FLAG)))
+ H5E_THROW(H5E_CANTPROTECT, "unable to load extensible array header")
+
+ /* Protect super block */
+ /* (Note: setting parent of super block to 'hdr' for this operation should be OK -QAK) */
+ if (NULL ==
+ (sblock = H5EA__sblock_protect(hdr, (H5EA_iblock_t *)hdr, addr, sblk_idx, H5AC__READ_ONLY_FLAG)))
+ H5E_THROW(H5E_CANTPROTECT, "unable to protect extensible array super block, address = %llu",
+ (unsigned long long)addr)
+
+ /* Print opening message */
+ HDfprintf(stream, "%*sExtensible Array Super Block...\n", indent, "");
+
+ /* Print the values */
+ HDfprintf(stream, "%*s%-*s %s\n", indent, "", fwidth, "Array class ID:", hdr->cparam.cls->name);
+ HDfprintf(stream, "%*s%-*s %zu\n", indent, "", fwidth, "Super Block size:", sblock->size);
+ HDfprintf(stream, "%*s%-*s %zu\n", indent, "", fwidth,
+ "# of data block addresses in super block:", sblock->ndblks);
+ HDfprintf(stream, "%*s%-*s %zu\n", indent, "", fwidth,
+ "# of elements in data blocks from this super block:", sblock->dblk_nelmts);
+
+ /* Check if there are any data block addresses in super block */
+ if (sblock->ndblks > 0) {
+ char temp_str[128]; /* Temporary string, for formatting */
+ unsigned u; /* Local index variable */
+
+ /* Print the data block addresses in the super block */
+ HDfprintf(stream, "%*sData Block Addresses in Super Block:\n", indent, "");
+ for (u = 0; u < sblock->ndblks; u++) {
+ /* Print address */
+ HDsprintf(temp_str, "Address #%u:", u);
+ HDfprintf(stream, "%*s%-*s %" PRIuHADDR "\n", (indent + 3), "", MAX(0, (fwidth - 3)), temp_str,
+ sblock->dblk_addrs[u]);
+ } /* end for */
+ } /* end if */
+
+ CATCH
+ if (dbg_ctx && cls->dst_dbg_ctx(dbg_ctx) < 0)
+ H5E_THROW(H5E_CANTRELEASE, "unable to release extensible array debugging context")
+ if (sblock && H5EA__sblock_unprotect(sblock, H5AC__NO_FLAGS_SET) < 0)
+ H5E_THROW(H5E_CANTUNPROTECT, "unable to release extensible array super block")
+ if (hdr && H5EA__hdr_unprotect(hdr, H5AC__NO_FLAGS_SET) < 0)
+ H5E_THROW(H5E_CANTUNPROTECT, "unable to release extensible array header")
END_FUNC(PKG) /* end H5EA__sblock_debug() */
@@ -358,61 +361,61 @@ BEGIN_FUNC(PKG, ERR, herr_t, SUCCEED, FAIL,
const H5EA_class_t *cls, haddr_t hdr_addr, size_t dblk_nelmts,
haddr_t obj_addr))
-/* Local variables */
-H5EA_hdr_t * hdr = NULL; /* Shared extensible array header */
-H5EA_dblock_t *dblock = NULL; /* Extensible array data block */
-void * dbg_ctx = NULL; /* Extensible array context */
-size_t u; /* Local index variable */
-
-/* Check arguments */
-HDassert(f);
-HDassert(H5F_addr_defined(addr));
-HDassert(stream);
-HDassert(indent >= 0);
-HDassert(fwidth >= 0);
-HDassert(cls);
-HDassert(H5F_addr_defined(hdr_addr));
-HDassert(H5F_addr_defined(obj_addr));
-HDassert(dblk_nelmts > 0);
-
-/* Check for debugging context callback available */
-if (cls->crt_dbg_ctx)
- /* Create debugging context */
- if (NULL == (dbg_ctx = cls->crt_dbg_ctx(f, obj_addr)))
- H5E_THROW(H5E_CANTGET, "unable to create extensible array debugging context")
-
-/* Load the extensible array header */
-if (NULL == (hdr = H5EA__hdr_protect(f, hdr_addr, dbg_ctx, H5AC__READ_ONLY_FLAG)))
- H5E_THROW(H5E_CANTPROTECT, "unable to load extensible array header")
-
-/* Protect data block */
-/* (Note: setting parent of data block to 'hdr' for this operation should be OK -QAK) */
-if (NULL == (dblock = H5EA__dblock_protect(hdr, hdr, addr, dblk_nelmts, H5AC__READ_ONLY_FLAG)))
- H5E_THROW(H5E_CANTPROTECT, "unable to protect extensible array data block, address = %llu",
- (unsigned long long)addr)
-
-/* Print opening message */
-HDfprintf(stream, "%*sExtensible Array data Block...\n", indent, "");
-
-/* Print the values */
-HDfprintf(stream, "%*s%-*s %s\n", indent, "", fwidth, "Array class ID:", hdr->cparam.cls->name);
-HDfprintf(stream, "%*s%-*s %Zu\n", indent, "", fwidth, "Data Block size:", dblock->size);
-
-/* Print the elements in the index block */
-HDfprintf(stream, "%*sElements:\n", indent, "");
-for (u = 0; u < dblk_nelmts; u++) {
- /* Call the class's 'debug' callback */
- if ((hdr->cparam.cls->debug)(stream, (indent + 3), MAX(0, (fwidth - 3)), (hsize_t)u,
- ((uint8_t *)dblock->elmts) + (hdr->cparam.cls->nat_elmt_size * u)) < 0)
- H5E_THROW(H5E_CANTGET, "can't get element for debugging")
-} /* end for */
-
-CATCH
-if (dbg_ctx && cls->dst_dbg_ctx(dbg_ctx) < 0)
- H5E_THROW(H5E_CANTRELEASE, "unable to release extensible array debugging context")
-if (dblock && H5EA__dblock_unprotect(dblock, H5AC__NO_FLAGS_SET) < 0)
- H5E_THROW(H5E_CANTUNPROTECT, "unable to release extensible array data block")
-if (hdr && H5EA__hdr_unprotect(hdr, H5AC__NO_FLAGS_SET) < 0)
- H5E_THROW(H5E_CANTUNPROTECT, "unable to release extensible array header")
+ /* Local variables */
+ H5EA_hdr_t * hdr = NULL; /* Shared extensible array header */
+ H5EA_dblock_t *dblock = NULL; /* Extensible array data block */
+ void * dbg_ctx = NULL; /* Extensible array context */
+ size_t u; /* Local index variable */
+
+ /* Check arguments */
+ HDassert(f);
+ HDassert(H5F_addr_defined(addr));
+ HDassert(stream);
+ HDassert(indent >= 0);
+ HDassert(fwidth >= 0);
+ HDassert(cls);
+ HDassert(H5F_addr_defined(hdr_addr));
+ HDassert(H5F_addr_defined(obj_addr));
+ HDassert(dblk_nelmts > 0);
+
+ /* Check for debugging context callback available */
+ if (cls->crt_dbg_ctx)
+ /* Create debugging context */
+ if (NULL == (dbg_ctx = cls->crt_dbg_ctx(f, obj_addr)))
+ H5E_THROW(H5E_CANTGET, "unable to create extensible array debugging context")
+
+ /* Load the extensible array header */
+ if (NULL == (hdr = H5EA__hdr_protect(f, hdr_addr, dbg_ctx, H5AC__READ_ONLY_FLAG)))
+ H5E_THROW(H5E_CANTPROTECT, "unable to load extensible array header")
+
+ /* Protect data block */
+ /* (Note: setting parent of data block to 'hdr' for this operation should be OK -QAK) */
+ if (NULL == (dblock = H5EA__dblock_protect(hdr, hdr, addr, dblk_nelmts, H5AC__READ_ONLY_FLAG)))
+ H5E_THROW(H5E_CANTPROTECT, "unable to protect extensible array data block, address = %" PRIuHADDR,
+ addr)
+
+ /* Print opening message */
+ HDfprintf(stream, "%*sExtensible Array data Block...\n", indent, "");
+
+ /* Print the values */
+ HDfprintf(stream, "%*s%-*s %s\n", indent, "", fwidth, "Array class ID:", hdr->cparam.cls->name);
+ HDfprintf(stream, "%*s%-*s %zu\n", indent, "", fwidth, "Data Block size:", dblock->size);
+
+ /* Print the elements in the index block */
+ HDfprintf(stream, "%*sElements:\n", indent, "");
+ for (u = 0; u < dblk_nelmts; u++) {
+ /* Call the class's 'debug' callback */
+ if ((hdr->cparam.cls->debug)(stream, (indent + 3), MAX(0, (fwidth - 3)), (hsize_t)u,
+ ((uint8_t *)dblock->elmts) + (hdr->cparam.cls->nat_elmt_size * u)) < 0)
+ H5E_THROW(H5E_CANTGET, "can't get element for debugging")
+ } /* end for */
+
+ CATCH
+ if (dbg_ctx && cls->dst_dbg_ctx(dbg_ctx) < 0)
+ H5E_THROW(H5E_CANTRELEASE, "unable to release extensible array debugging context")
+ if (dblock && H5EA__dblock_unprotect(dblock, H5AC__NO_FLAGS_SET) < 0)
+ H5E_THROW(H5E_CANTUNPROTECT, "unable to release extensible array data block")
+ if (hdr && H5EA__hdr_unprotect(hdr, H5AC__NO_FLAGS_SET) < 0)
+ H5E_THROW(H5E_CANTUNPROTECT, "unable to release extensible array header")
END_FUNC(PKG) /* end H5EA__dblock_debug() */
diff --git a/src/H5EAdblkpage.c b/src/H5EAdblkpage.c
index 43b59d6..f8ea0ed 100644
--- a/src/H5EAdblkpage.c
+++ b/src/H5EAdblkpage.c
@@ -87,35 +87,35 @@ H5FL_DEFINE_STATIC(H5EA_dblk_page_t);
BEGIN_FUNC(PKG, ERR, H5EA_dblk_page_t *, NULL, NULL,
H5EA__dblk_page_alloc(H5EA_hdr_t *hdr, H5EA_sblock_t *parent))
-/* Local variables */
-H5EA_dblk_page_t *dblk_page = NULL; /* Extensible array data block page */
+ /* Local variables */
+ H5EA_dblk_page_t *dblk_page = NULL; /* Extensible array data block page */
-/* Check arguments */
-HDassert(hdr);
+ /* Check arguments */
+ HDassert(hdr);
-/* Allocate memory for the data block */
-if (NULL == (dblk_page = H5FL_CALLOC(H5EA_dblk_page_t)))
- H5E_THROW(H5E_CANTALLOC, "memory allocation failed for extensible array data block page")
+ /* Allocate memory for the data block */
+ if (NULL == (dblk_page = H5FL_CALLOC(H5EA_dblk_page_t)))
+ H5E_THROW(H5E_CANTALLOC, "memory allocation failed for extensible array data block page")
-/* Share common array information */
-if (H5EA__hdr_incr(hdr) < 0)
- H5E_THROW(H5E_CANTINC, "can't increment reference count on shared array header")
-dblk_page->hdr = hdr;
+ /* Share common array information */
+ if (H5EA__hdr_incr(hdr) < 0)
+ H5E_THROW(H5E_CANTINC, "can't increment reference count on shared array header")
+ dblk_page->hdr = hdr;
-/* Set non-zero internal fields */
-dblk_page->parent = parent;
+ /* Set non-zero internal fields */
+ dblk_page->parent = parent;
-/* Allocate buffer for elements in data block page */
-if (NULL == (dblk_page->elmts = H5EA__hdr_alloc_elmts(hdr, hdr->dblk_page_nelmts)))
- H5E_THROW(H5E_CANTALLOC, "memory allocation failed for data block page element buffer")
+ /* Allocate buffer for elements in data block page */
+ if (NULL == (dblk_page->elmts = H5EA__hdr_alloc_elmts(hdr, hdr->dblk_page_nelmts)))
+ H5E_THROW(H5E_CANTALLOC, "memory allocation failed for data block page element buffer")
-/* Set the return value */
-ret_value = dblk_page;
+ /* Set the return value */
+ ret_value = dblk_page;
-CATCH
-if (!ret_value)
- if (dblk_page && H5EA__dblk_page_dest(dblk_page) < 0)
- H5E_THROW(H5E_CANTFREE, "unable to destroy extensible array data block page")
+ CATCH
+ if (!ret_value)
+ if (dblk_page && H5EA__dblk_page_dest(dblk_page) < 0)
+ H5E_THROW(H5E_CANTFREE, "unable to destroy extensible array data block page")
END_FUNC(PKG) /* end H5EA__dblk_page_alloc() */
@@ -134,50 +134,50 @@ END_FUNC(PKG) /* end H5EA__dblk_page_alloc() */
BEGIN_FUNC(PKG, ERR, herr_t, SUCCEED, FAIL,
H5EA__dblk_page_create(H5EA_hdr_t *hdr, H5EA_sblock_t *parent, haddr_t addr))
-/* Local variables */
-H5EA_dblk_page_t *dblk_page = NULL; /* Extensible array data block page */
-hbool_t inserted = FALSE; /* Whether the header was inserted into cache */
-
-/* Sanity check */
-HDassert(hdr);
-
-/* Allocate the data block page */
-if (NULL == (dblk_page = H5EA__dblk_page_alloc(hdr, parent)))
- H5E_THROW(H5E_CANTALLOC, "memory allocation failed for extensible array data block page")
-
-/* Set info about data block page on disk */
-dblk_page->addr = addr;
-dblk_page->size = H5EA_DBLK_PAGE_SIZE(hdr);
-
-/* Clear any elements in data block page to fill value */
-if ((hdr->cparam.cls->fill)(dblk_page->elmts, (size_t)hdr->dblk_page_nelmts) < 0)
- H5E_THROW(H5E_CANTSET, "can't set extensible array data block page elements to class's fill value")
-
-/* Cache the new extensible array data block page */
-if (H5AC_insert_entry(hdr->f, H5AC_EARRAY_DBLK_PAGE, dblk_page->addr, dblk_page, H5AC__NO_FLAGS_SET) < 0)
- H5E_THROW(H5E_CANTINSERT, "can't add extensible array data block page to cache")
-inserted = TRUE;
-
-/* Add data block page as child of 'top' proxy */
-if (hdr->top_proxy) {
- if (H5AC_proxy_entry_add_child(hdr->top_proxy, hdr->f, dblk_page) < 0)
- H5E_THROW(H5E_CANTSET, "unable to add extensible array entry as child of array proxy")
- dblk_page->top_proxy = hdr->top_proxy;
-} /* end if */
-
-CATCH
-if (ret_value < 0)
- if (dblk_page) {
- /* Remove from cache, if inserted */
- if (inserted)
- if (H5AC_remove_entry(dblk_page) < 0)
- H5E_THROW(H5E_CANTREMOVE, "unable to remove extensible array data block page from cache")
-
- /* Destroy data block page */
- if (H5EA__dblk_page_dest(dblk_page) < 0)
- H5E_THROW(H5E_CANTFREE, "unable to destroy extensible array data block page")
+ /* Local variables */
+ H5EA_dblk_page_t *dblk_page = NULL; /* Extensible array data block page */
+ hbool_t inserted = FALSE; /* Whether the header was inserted into cache */
+
+ /* Sanity check */
+ HDassert(hdr);
+
+ /* Allocate the data block page */
+ if (NULL == (dblk_page = H5EA__dblk_page_alloc(hdr, parent)))
+ H5E_THROW(H5E_CANTALLOC, "memory allocation failed for extensible array data block page")
+
+ /* Set info about data block page on disk */
+ dblk_page->addr = addr;
+ dblk_page->size = H5EA_DBLK_PAGE_SIZE(hdr);
+
+ /* Clear any elements in data block page to fill value */
+ if ((hdr->cparam.cls->fill)(dblk_page->elmts, (size_t)hdr->dblk_page_nelmts) < 0)
+ H5E_THROW(H5E_CANTSET, "can't set extensible array data block page elements to class's fill value")
+
+ /* Cache the new extensible array data block page */
+ if (H5AC_insert_entry(hdr->f, H5AC_EARRAY_DBLK_PAGE, dblk_page->addr, dblk_page, H5AC__NO_FLAGS_SET) < 0)
+ H5E_THROW(H5E_CANTINSERT, "can't add extensible array data block page to cache")
+ inserted = TRUE;
+
+ /* Add data block page as child of 'top' proxy */
+ if (hdr->top_proxy) {
+ if (H5AC_proxy_entry_add_child(hdr->top_proxy, hdr->f, dblk_page) < 0)
+ H5E_THROW(H5E_CANTSET, "unable to add extensible array entry as child of array proxy")
+ dblk_page->top_proxy = hdr->top_proxy;
} /* end if */
+ CATCH
+ if (ret_value < 0)
+ if (dblk_page) {
+ /* Remove from cache, if inserted */
+ if (inserted)
+ if (H5AC_remove_entry(dblk_page) < 0)
+ H5E_THROW(H5E_CANTREMOVE, "unable to remove extensible array data block page from cache")
+
+ /* Destroy data block page */
+ if (H5EA__dblk_page_dest(dblk_page) < 0)
+ H5E_THROW(H5E_CANTFREE, "unable to destroy extensible array data block page")
+ } /* end if */
+
END_FUNC(PKG) /* end H5EA__dblk_page_create() */
/*-------------------------------------------------------------------------
@@ -197,48 +197,49 @@ BEGIN_FUNC(PKG, ERR, H5EA_dblk_page_t *, NULL, NULL,
H5EA__dblk_page_protect(H5EA_hdr_t *hdr, H5EA_sblock_t *parent, haddr_t dblk_page_addr,
unsigned flags))
-/* Local variables */
-H5EA_dblk_page_t * dblk_page = NULL; /* Extensible array data block page */
-H5EA_dblk_page_cache_ud_t udata; /* Information needed for loading data block page */
-
-/* Sanity check */
-HDassert(hdr);
-HDassert(H5F_addr_defined(dblk_page_addr));
-
-/* only the H5AC__READ_ONLY_FLAG may be set */
-HDassert((flags & (unsigned)(~H5AC__READ_ONLY_FLAG)) == 0);
-
-/* Set up user data */
-udata.hdr = hdr;
-udata.parent = parent;
-udata.dblk_page_addr = dblk_page_addr;
-
-/* Protect the data block page */
-if (NULL == (dblk_page = (H5EA_dblk_page_t *)H5AC_protect(hdr->f, H5AC_EARRAY_DBLK_PAGE, dblk_page_addr,
- &udata, flags)))
- H5E_THROW(H5E_CANTPROTECT, "unable to protect extensible array data block page, address = %llu",
- (unsigned long long)dblk_page_addr)
+ /* Local variables */
+ H5EA_dblk_page_t * dblk_page = NULL; /* Extensible array data block page */
+ H5EA_dblk_page_cache_ud_t udata; /* Information needed for loading data block page */
+
+ /* Sanity check */
+ HDassert(hdr);
+ HDassert(H5F_addr_defined(dblk_page_addr));
+
+ /* only the H5AC__READ_ONLY_FLAG may be set */
+ HDassert((flags & (unsigned)(~H5AC__READ_ONLY_FLAG)) == 0);
+
+ /* Set up user data */
+ udata.hdr = hdr;
+ udata.parent = parent;
+ udata.dblk_page_addr = dblk_page_addr;
+
+ /* Protect the data block page */
+ if (NULL == (dblk_page = (H5EA_dblk_page_t *)H5AC_protect(hdr->f, H5AC_EARRAY_DBLK_PAGE, dblk_page_addr,
+ &udata, flags)))
+ H5E_THROW(H5E_CANTPROTECT, "unable to protect extensible array data block page, address = %llu",
+ (unsigned long long)dblk_page_addr)
+
+ /* Create top proxy, if it doesn't exist */
+ if (hdr->top_proxy && NULL == dblk_page->top_proxy) {
+ /* Add data block page as child of 'top' proxy */
+ if (H5AC_proxy_entry_add_child(hdr->top_proxy, hdr->f, dblk_page) < 0)
+ H5E_THROW(H5E_CANTSET, "unable to add extensible array entry as child of array proxy")
+ dblk_page->top_proxy = hdr->top_proxy;
+ } /* end if */
-/* Create top proxy, if it doesn't exist */
-if (hdr->top_proxy && NULL == dblk_page->top_proxy) {
- /* Add data block page as child of 'top' proxy */
- if (H5AC_proxy_entry_add_child(hdr->top_proxy, hdr->f, dblk_page) < 0)
- H5E_THROW(H5E_CANTSET, "unable to add extensible array entry as child of array proxy")
- dblk_page->top_proxy = hdr->top_proxy;
-} /* end if */
-
-/* Set return value */
-ret_value = dblk_page;
-
-CATCH
-/* Clean up on error */
-if (!ret_value) {
- /* Release the data block page, if it was protected */
- if (dblk_page &&
- H5AC_unprotect(hdr->f, H5AC_EARRAY_DBLK_PAGE, dblk_page->addr, dblk_page, H5AC__NO_FLAGS_SET) < 0)
- H5E_THROW(H5E_CANTUNPROTECT, "unable to unprotect extensible array data block page, address = %llu",
- (unsigned long long)dblk_page->addr)
-} /* end if */
+ /* Set return value */
+ ret_value = dblk_page;
+
+ CATCH
+ /* Clean up on error */
+ if (!ret_value) {
+ /* Release the data block page, if it was protected */
+ if (dblk_page &&
+ H5AC_unprotect(hdr->f, H5AC_EARRAY_DBLK_PAGE, dblk_page->addr, dblk_page, H5AC__NO_FLAGS_SET) < 0)
+ H5E_THROW(H5E_CANTUNPROTECT,
+ "unable to unprotect extensible array data block page, address = %llu",
+ (unsigned long long)dblk_page->addr)
+ } /* end if */
END_FUNC(PKG) /* end H5EA__dblk_page_protect() */
@@ -258,17 +259,17 @@ END_FUNC(PKG) /* end H5EA__dblk_page_protect() */
BEGIN_FUNC(PKG, ERR, herr_t, SUCCEED, FAIL,
H5EA__dblk_page_unprotect(H5EA_dblk_page_t *dblk_page, unsigned cache_flags))
-/* Local variables */
+ /* Local variables */
-/* Sanity check */
-HDassert(dblk_page);
+ /* Sanity check */
+ HDassert(dblk_page);
-/* Unprotect the data block page */
-if (H5AC_unprotect(dblk_page->hdr->f, H5AC_EARRAY_DBLK_PAGE, dblk_page->addr, dblk_page, cache_flags) < 0)
- H5E_THROW(H5E_CANTUNPROTECT, "unable to unprotect extensible array data block page, address = %llu",
- (unsigned long long)dblk_page->addr)
+ /* Unprotect the data block page */
+ if (H5AC_unprotect(dblk_page->hdr->f, H5AC_EARRAY_DBLK_PAGE, dblk_page->addr, dblk_page, cache_flags) < 0)
+ H5E_THROW(H5E_CANTUNPROTECT, "unable to unprotect extensible array data block page, address = %llu",
+ (unsigned long long)dblk_page->addr)
-CATCH
+ CATCH
END_FUNC(PKG) /* end H5EA__dblk_page_unprotect() */
@@ -286,32 +287,32 @@ END_FUNC(PKG) /* end H5EA__dblk_page_unprotect() */
*/
BEGIN_FUNC(PKG, ERR, herr_t, SUCCEED, FAIL, H5EA__dblk_page_dest(H5EA_dblk_page_t *dblk_page))
-/* Sanity check */
-HDassert(dblk_page);
-HDassert(!dblk_page->has_hdr_depend);
-
-/* Check if header field has been initialized */
-if (dblk_page->hdr) {
- /* Check if buffer for data block page elements has been initialized */
- if (dblk_page->elmts) {
- /* Free buffer for data block page elements */
- if (H5EA__hdr_free_elmts(dblk_page->hdr, dblk_page->hdr->dblk_page_nelmts, dblk_page->elmts) < 0)
- H5E_THROW(H5E_CANTFREE, "unable to free extensible array data block element buffer")
- dblk_page->elmts = NULL;
+ /* Sanity check */
+ HDassert(dblk_page);
+ HDassert(!dblk_page->has_hdr_depend);
+
+ /* Check if header field has been initialized */
+ if (dblk_page->hdr) {
+ /* Check if buffer for data block page elements has been initialized */
+ if (dblk_page->elmts) {
+ /* Free buffer for data block page elements */
+ if (H5EA__hdr_free_elmts(dblk_page->hdr, dblk_page->hdr->dblk_page_nelmts, dblk_page->elmts) < 0)
+ H5E_THROW(H5E_CANTFREE, "unable to free extensible array data block element buffer")
+ dblk_page->elmts = NULL;
+ } /* end if */
+
+ /* Decrement reference count on shared info */
+ if (H5EA__hdr_decr(dblk_page->hdr) < 0)
+ H5E_THROW(H5E_CANTDEC, "can't decrement reference count on shared array header")
+ dblk_page->hdr = NULL;
} /* end if */
- /* Decrement reference count on shared info */
- if (H5EA__hdr_decr(dblk_page->hdr) < 0)
- H5E_THROW(H5E_CANTDEC, "can't decrement reference count on shared array header")
- dblk_page->hdr = NULL;
-} /* end if */
-
-/* Sanity check */
-HDassert(NULL == dblk_page->top_proxy);
+ /* Sanity check */
+ HDassert(NULL == dblk_page->top_proxy);
-/* Free the data block page itself */
-dblk_page = H5FL_FREE(H5EA_dblk_page_t, dblk_page);
+ /* Free the data block page itself */
+ dblk_page = H5FL_FREE(H5EA_dblk_page_t, dblk_page);
-CATCH
+ CATCH
END_FUNC(PKG) /* end H5EA__dblk_page_dest() */
diff --git a/src/H5EAdblock.c b/src/H5EAdblock.c
index 2897aba..ddc4036 100644
--- a/src/H5EAdblock.c
+++ b/src/H5EAdblock.c
@@ -88,46 +88,46 @@ 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))
-/* Local variables */
-H5EA_dblock_t *dblock = NULL; /* Extensible array data block */
-
-/* Check arguments */
-HDassert(hdr);
-HDassert(parent);
-HDassert(nelmts > 0);
-
-/* 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")
-
-/* Share common array information */
-if (H5EA__hdr_incr(hdr) < 0)
- H5E_THROW(H5E_CANTINC, "can't increment reference count on shared array header")
-dblock->hdr = hdr;
-
-/* Set non-zero internal fields */
-dblock->parent = parent;
-dblock->nelmts = nelmts;
-
-/* Check if the data block is not going to be paged */
-if (nelmts > hdr->dblk_page_nelmts) {
- /* Set the # of pages in the direct block */
- dblock->npages = nelmts / hdr->dblk_page_nelmts;
- HDassert(nelmts == (dblock->npages * hdr->dblk_page_nelmts));
-} /* end if */
-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")
-} /* end else */
-
-/* Set the return value */
-ret_value = dblock;
-
-CATCH
-if (!ret_value)
- if (dblock && H5EA__dblock_dest(dblock) < 0)
- H5E_THROW(H5E_CANTFREE, "unable to destroy extensible array data block")
+ /* Local variables */
+ H5EA_dblock_t *dblock = NULL; /* Extensible array data block */
+
+ /* Check arguments */
+ HDassert(hdr);
+ HDassert(parent);
+ HDassert(nelmts > 0);
+
+ /* 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")
+
+ /* Share common array information */
+ if (H5EA__hdr_incr(hdr) < 0)
+ H5E_THROW(H5E_CANTINC, "can't increment reference count on shared array header")
+ dblock->hdr = hdr;
+
+ /* Set non-zero internal fields */
+ dblock->parent = parent;
+ dblock->nelmts = nelmts;
+
+ /* Check if the data block is not going to be paged */
+ if (nelmts > hdr->dblk_page_nelmts) {
+ /* Set the # of pages in the direct block */
+ dblock->npages = nelmts / hdr->dblk_page_nelmts;
+ HDassert(nelmts == (dblock->npages * hdr->dblk_page_nelmts));
+ } /* end if */
+ 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")
+ } /* end else */
+
+ /* Set the return value */
+ ret_value = dblock;
+
+ CATCH
+ if (!ret_value)
+ if (dblock && H5EA__dblock_dest(dblock) < 0)
+ H5E_THROW(H5E_CANTFREE, "unable to destroy extensible array data block")
END_FUNC(PKG) /* end H5EA__dblock_alloc() */
@@ -147,80 +147,80 @@ 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))
-/* 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 */
-
-/* Sanity check */
-HDassert(hdr);
-HDassert(stats_changed);
-HDassert(nelmts > 0);
-
-/* 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")
-
-/* Set size of data block on disk */
-dblock->size = H5EA_DBLOCK_SIZE(dblock);
-
-/* Set offset of block in array's address space */
-dblock->block_off = dblk_off;
-
-/* 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")
-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")
-
-/* 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")
-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")
- dblock->top_proxy = hdr->top_proxy;
-} /* end if */
-
-/* Update extensible array data block statistics */
-hdr->stats.stored.ndata_blks++;
-hdr->stats.stored.data_blk_size += dblock->size;
-
-/* Increment count of elements "realized" */
-hdr->stats.stored.nelmts += nelmts;
-
-/* Mark the statistics as changed */
-*stats_changed = TRUE;
-
-/* Set address of data block to return */
-ret_value = dblock_addr;
-
-CATCH
-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")
-
- /* 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")
-
- /* Destroy data block */
- if (H5EA__dblock_dest(dblock) < 0)
- H5E_THROW(H5E_CANTFREE, "unable to destroy extensible array data block")
+ /* 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 */
+
+ /* Sanity check */
+ HDassert(hdr);
+ HDassert(stats_changed);
+ HDassert(nelmts > 0);
+
+ /* 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")
+
+ /* Set size of data block on disk */
+ dblock->size = H5EA_DBLOCK_SIZE(dblock);
+
+ /* Set offset of block in array's address space */
+ dblock->block_off = dblk_off;
+
+ /* 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")
+ 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")
+
+ /* 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")
+ 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")
+ dblock->top_proxy = hdr->top_proxy;
} /* end if */
+ /* Update extensible array data block statistics */
+ hdr->stats.stored.ndata_blks++;
+ hdr->stats.stored.data_blk_size += dblock->size;
+
+ /* Increment count of elements "realized" */
+ hdr->stats.stored.nelmts += nelmts;
+
+ /* Mark the statistics as changed */
+ *stats_changed = TRUE;
+
+ /* Set address of data block to return */
+ ret_value = dblock_addr;
+
+ CATCH
+ 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")
+
+ /* 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")
+
+ /* Destroy data block */
+ if (H5EA__dblock_dest(dblock) < 0)
+ H5E_THROW(H5E_CANTFREE, "unable to destroy extensible array data block")
+ } /* end if */
+
END_FUNC(PKG) /* end H5EA__dblock_create() */
/*-------------------------------------------------------------------------
@@ -238,22 +238,22 @@ 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))
-/* Local variables */
-unsigned sblk_idx; /* Which superblock does this index fall in? */
+ /* Local variables */
+ unsigned sblk_idx; /* Which superblock does this index fall in? */
-/* Sanity check */
-HDassert(hdr);
-HDassert(idx >= hdr->cparam.idx_blk_elmts);
+ /* Sanity check */
+ HDassert(hdr);
+ HDassert(idx >= hdr->cparam.idx_blk_elmts);
-/* Adjust index for elements in index block */
-idx -= hdr->cparam.idx_blk_elmts;
+ /* Adjust index for elements in index block */
+ idx -= hdr->cparam.idx_blk_elmts;
-/* Determine the superblock information for the index */
-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));
+ /* Determine the superblock information for the index */
+ 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;
+ /* Set return value */
+ ret_value = sblk_idx;
END_FUNC(PKG) /* end H5EA__dblock_sblk_idx() */
@@ -273,49 +273,51 @@ 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 * dblock; /* Extensible array data block */
-H5EA_dblock_cache_ud_t udata; /* Information needed for loading data block */
-
-/* Sanity check */
-HDassert(hdr);
-HDassert(H5F_addr_defined(dblk_addr));
-HDassert(dblk_nelmts);
-
-/* only the H5AC__READ_ONLY_FLAG may be set */
-HDassert((flags & (unsigned)(~H5AC__READ_ONLY_FLAG)) == 0);
-
-/* Set up user data */
-udata.hdr = hdr;
-udata.parent = parent;
-udata.nelmts = dblk_nelmts;
-udata.dblk_addr = dblk_addr;
-
-/* 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)
-
-/* 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")
- dblock->top_proxy = hdr->top_proxy;
-} /* end if */
+ /* Local variables */
+ H5EA_dblock_t * dblock; /* Extensible array data block */
+ H5EA_dblock_cache_ud_t udata; /* Information needed for loading data block */
+
+ /* Sanity check */
+ HDassert(hdr);
+ HDassert(H5F_addr_defined(dblk_addr));
+ HDassert(dblk_nelmts);
+
+ /* only the H5AC__READ_ONLY_FLAG may be set */
+ HDassert((flags & (unsigned)(~H5AC__READ_ONLY_FLAG)) == 0);
+
+ /* Set up user data */
+ udata.hdr = hdr;
+ udata.parent = parent;
+ udata.nelmts = dblk_nelmts;
+ udata.dblk_addr = dblk_addr;
+
+ /* 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)
+
+ /* 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")
+ dblock->top_proxy = hdr->top_proxy;
+ } /* end if */
-/* Set return value */
-ret_value = dblock;
+ /* Set return value */
+ ret_value = dblock;
-CATCH
+ CATCH
-/* 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 */
+ /* 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 */
END_FUNC(PKG) /* end H5EA__dblock_protect() */
@@ -334,17 +336,17 @@ 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))
-/* Local variables */
+ /* Local variables */
-/* Sanity check */
-HDassert(dblock);
+ /* 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)
+ /* 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)
-CATCH
+ CATCH
END_FUNC(PKG) /* end H5EA__dblock_unprotect() */
@@ -363,48 +365,48 @@ 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))
-/* Local variables */
-H5EA_dblock_t *dblock = NULL; /* Pointer to data block */
-
-/* Sanity check */
-HDassert(hdr);
-HDassert(parent);
-HDassert(H5F_addr_defined(dblk_addr));
-HDassert(dblk_nelmts > 0);
-
-/* 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)
-
-/* Check if this is a paged data block */
-if (dblk_nelmts > hdr->dblk_page_nelmts) {
- size_t npages = dblk_nelmts / hdr->dblk_page_nelmts; /* Number of pages in data block */
- haddr_t dblk_page_addr; /* Address of each data block page */
- size_t dblk_page_size; /* Size of each data block page */
- size_t u; /* Local index variable */
-
- /* Set up initial state */
- dblk_page_addr = dblk_addr + H5EA_DBLOCK_PREFIX_SIZE(dblock);
- dblk_page_size = (hdr->dblk_page_nelmts * hdr->cparam.raw_elmt_size) + H5EA_SIZEOF_CHKSUM;
-
- /* Iterate over pages in data block */
- for (u = 0; u < npages; u++) {
- /* 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")
-
- /* Advance to next page address */
- dblk_page_addr += dblk_page_size;
- } /* end for */
-} /* end if */
-
-CATCH
-/* 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")
+ /* Local variables */
+ H5EA_dblock_t *dblock = NULL; /* Pointer to data block */
+
+ /* Sanity check */
+ HDassert(hdr);
+ HDassert(parent);
+ HDassert(H5F_addr_defined(dblk_addr));
+ HDassert(dblk_nelmts > 0);
+
+ /* 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)
+
+ /* Check if this is a paged data block */
+ if (dblk_nelmts > hdr->dblk_page_nelmts) {
+ size_t npages = dblk_nelmts / hdr->dblk_page_nelmts; /* Number of pages in data block */
+ haddr_t dblk_page_addr; /* Address of each data block page */
+ size_t dblk_page_size; /* Size of each data block page */
+ size_t u; /* Local index variable */
+
+ /* Set up initial state */
+ dblk_page_addr = dblk_addr + H5EA_DBLOCK_PREFIX_SIZE(dblock);
+ dblk_page_size = (hdr->dblk_page_nelmts * hdr->cparam.raw_elmt_size) + H5EA_SIZEOF_CHKSUM;
+
+ /* Iterate over pages in data block */
+ for (u = 0; u < npages; u++) {
+ /* 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")
+
+ /* Advance to next page address */
+ dblk_page_addr += dblk_page_size;
+ } /* end for */
+ } /* end if */
+
+ CATCH
+ /* 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")
END_FUNC(PKG) /* end H5EA__dblock_delete() */
@@ -422,34 +424,34 @@ END_FUNC(PKG) /* end H5EA__dblock_delete() */
*/
BEGIN_FUNC(PKG, ERR, herr_t, SUCCEED, FAIL, H5EA__dblock_dest(H5EA_dblock_t *dblock))
-/* Sanity check */
-HDassert(dblock);
-HDassert(!dblock->has_hdr_depend);
-
-/* Check if shared header field has been initialized */
-if (dblock->hdr) {
- /* Check if we've got elements in the data block */
- if (dblock->elmts && !dblock->npages) {
- /* 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")
- dblock->elmts = NULL;
- dblock->nelmts = 0;
+ /* Sanity check */
+ HDassert(dblock);
+ HDassert(!dblock->has_hdr_depend);
+
+ /* Check if shared header field has been initialized */
+ if (dblock->hdr) {
+ /* Check if we've got elements in the data block */
+ if (dblock->elmts && !dblock->npages) {
+ /* 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")
+ 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")
+ dblock->hdr = NULL;
} /* 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")
- dblock->hdr = NULL;
-} /* end if */
-
-/* Sanity check */
-HDassert(NULL == dblock->top_proxy);
+ /* Sanity check */
+ HDassert(NULL == dblock->top_proxy);
-/* Free the data block itself */
-dblock = H5FL_FREE(H5EA_dblock_t, dblock);
+ /* Free the data block itself */
+ dblock = H5FL_FREE(H5EA_dblock_t, dblock);
-CATCH
+ CATCH
END_FUNC(PKG) /* end H5EA__dblock_dest() */
diff --git a/src/H5EAhdr.c b/src/H5EAhdr.c
index 1a7839f..236811f 100644
--- a/src/H5EAhdr.c
+++ b/src/H5EAhdr.c
@@ -104,32 +104,32 @@ H5FL_SEQ_DEFINE_STATIC(H5EA_sblk_info_t);
*/
BEGIN_FUNC(PKG, ERR, H5EA_hdr_t *, NULL, NULL, H5EA__hdr_alloc(H5F_t *f))
-/* Local variables */
-H5EA_hdr_t *hdr = NULL; /* Shared extensible array header */
+ /* Local variables */
+ H5EA_hdr_t *hdr = NULL; /* Shared extensible array header */
-/* Check arguments */
-HDassert(f);
+ /* Check arguments */
+ HDassert(f);
-/* Allocate space for the shared information */
-if (NULL == (hdr = H5FL_CALLOC(H5EA_hdr_t)))
- H5E_THROW(H5E_CANTALLOC, "memory allocation failed for extensible array shared header")
+ /* Allocate space for the shared information */
+ if (NULL == (hdr = H5FL_CALLOC(H5EA_hdr_t)))
+ H5E_THROW(H5E_CANTALLOC, "memory allocation failed for extensible array shared header")
-/* Set non-zero internal fields */
-hdr->addr = HADDR_UNDEF;
+ /* Set non-zero internal fields */
+ hdr->addr = HADDR_UNDEF;
-/* Set the internal parameters for the array */
-hdr->f = f;
-hdr->swmr_write = (H5F_INTENT(f) & H5F_ACC_SWMR_WRITE) > 0;
-hdr->sizeof_addr = H5F_SIZEOF_ADDR(f);
-hdr->sizeof_size = H5F_SIZEOF_SIZE(f);
+ /* Set the internal parameters for the array */
+ hdr->f = f;
+ hdr->swmr_write = (H5F_INTENT(f) & H5F_ACC_SWMR_WRITE) > 0;
+ hdr->sizeof_addr = H5F_SIZEOF_ADDR(f);
+ hdr->sizeof_size = H5F_SIZEOF_SIZE(f);
-/* Set the return value */
-ret_value = hdr;
+ /* Set the return value */
+ ret_value = hdr;
-CATCH
-if (!ret_value)
- if (hdr && H5EA__hdr_dest(hdr) < 0)
- H5E_THROW(H5E_CANTFREE, "unable to destroy extensible array header")
+ CATCH
+ if (!ret_value)
+ if (hdr && H5EA__hdr_dest(hdr) < 0)
+ H5E_THROW(H5E_CANTFREE, "unable to destroy extensible array header")
END_FUNC(PKG) /* end H5EA__hdr_alloc() */
@@ -170,50 +170,50 @@ END_FUNC(PKG) /* end H5EA__hdr_alloc() */
*/
BEGIN_FUNC(PKG, ERR, herr_t, SUCCEED, FAIL, H5EA__hdr_init(H5EA_hdr_t *hdr, void *ctx_udata))
-/* Local variables */
-hsize_t start_idx; /* First element index for each super block */
-hsize_t start_dblk; /* First data block index for each super block */
-size_t u; /* Local index variable */
-
-/* Sanity check */
-HDassert(hdr);
-HDassert(hdr->cparam.max_nelmts_bits);
-HDassert(hdr->cparam.data_blk_min_elmts);
-HDassert(hdr->cparam.sup_blk_min_data_ptrs);
-
-/* Compute general information */
-hdr->nsblks = 1 + (hdr->cparam.max_nelmts_bits - H5VM_log2_of2(hdr->cparam.data_blk_min_elmts));
-hdr->dblk_page_nelmts = (size_t)1 << hdr->cparam.max_dblk_page_nelmts_bits;
-hdr->arr_off_size = (unsigned char)H5EA_SIZEOF_OFFSET_BITS(hdr->cparam.max_nelmts_bits);
-
-/* Allocate information for each super block */
-if (NULL == (hdr->sblk_info = H5FL_SEQ_MALLOC(H5EA_sblk_info_t, hdr->nsblks)))
- H5E_THROW(H5E_CANTALLOC, "memory allocation failed for super block info array")
-
-/* Compute information about each super block */
-start_idx = 0;
-start_dblk = 0;
-for (u = 0; u < hdr->nsblks; u++) {
- hdr->sblk_info[u].ndblks = (size_t)H5_EXP2(u / 2);
- hdr->sblk_info[u].dblk_nelmts = H5EA_SBLK_DBLK_NELMTS(u, hdr->cparam.data_blk_min_elmts);
- hdr->sblk_info[u].start_idx = start_idx;
- hdr->sblk_info[u].start_dblk = start_dblk;
-
- /* Advance starting indices for next super block */
- start_idx += (hsize_t)hdr->sblk_info[u].ndblks * (hsize_t)hdr->sblk_info[u].dblk_nelmts;
- start_dblk += (hsize_t)hdr->sblk_info[u].ndblks;
-} /* end for */
-
-/* Set size of header on disk (locally and in statistics) */
-hdr->stats.computed.hdr_size = hdr->size = H5EA_HEADER_SIZE_HDR(hdr);
-
-/* Create the callback context, if there's one */
-if (hdr->cparam.cls->crt_context) {
- if (NULL == (hdr->cb_ctx = (*hdr->cparam.cls->crt_context)(ctx_udata)))
- H5E_THROW(H5E_CANTCREATE, "unable to create extensible array client callback context")
-} /* end if */
-
-CATCH
+ /* Local variables */
+ hsize_t start_idx; /* First element index for each super block */
+ hsize_t start_dblk; /* First data block index for each super block */
+ size_t u; /* Local index variable */
+
+ /* Sanity check */
+ HDassert(hdr);
+ HDassert(hdr->cparam.max_nelmts_bits);
+ HDassert(hdr->cparam.data_blk_min_elmts);
+ HDassert(hdr->cparam.sup_blk_min_data_ptrs);
+
+ /* Compute general information */
+ hdr->nsblks = 1 + (hdr->cparam.max_nelmts_bits - H5VM_log2_of2(hdr->cparam.data_blk_min_elmts));
+ hdr->dblk_page_nelmts = (size_t)1 << hdr->cparam.max_dblk_page_nelmts_bits;
+ hdr->arr_off_size = (unsigned char)H5EA_SIZEOF_OFFSET_BITS(hdr->cparam.max_nelmts_bits);
+
+ /* Allocate information for each super block */
+ if (NULL == (hdr->sblk_info = H5FL_SEQ_MALLOC(H5EA_sblk_info_t, hdr->nsblks)))
+ H5E_THROW(H5E_CANTALLOC, "memory allocation failed for super block info array")
+
+ /* Compute information about each super block */
+ start_idx = 0;
+ start_dblk = 0;
+ for (u = 0; u < hdr->nsblks; u++) {
+ hdr->sblk_info[u].ndblks = (size_t)H5_EXP2(u / 2);
+ hdr->sblk_info[u].dblk_nelmts = H5EA_SBLK_DBLK_NELMTS(u, hdr->cparam.data_blk_min_elmts);
+ hdr->sblk_info[u].start_idx = start_idx;
+ hdr->sblk_info[u].start_dblk = start_dblk;
+
+ /* Advance starting indices for next super block */
+ start_idx += (hsize_t)hdr->sblk_info[u].ndblks * (hsize_t)hdr->sblk_info[u].dblk_nelmts;
+ start_dblk += (hsize_t)hdr->sblk_info[u].ndblks;
+ } /* end for */
+
+ /* Set size of header on disk (locally and in statistics) */
+ hdr->stats.computed.hdr_size = hdr->size = H5EA_HEADER_SIZE_HDR(hdr);
+
+ /* Create the callback context, if there's one */
+ if (hdr->cparam.cls->crt_context) {
+ if (NULL == (hdr->cb_ctx = (*hdr->cparam.cls->crt_context)(ctx_udata)))
+ H5E_THROW(H5E_CANTCREATE, "unable to create extensible array client callback context")
+ } /* end if */
+
+ CATCH
END_FUNC(PKG) /* end H5EA__hdr_init() */
@@ -231,54 +231,55 @@ END_FUNC(PKG) /* end H5EA__hdr_init() */
*/
BEGIN_FUNC(PKG, ERR, void *, NULL, NULL, H5EA__hdr_alloc_elmts(H5EA_hdr_t *hdr, size_t nelmts))
-/* Local variables */
-void * elmts = NULL; /* Element buffer allocated */
-unsigned idx; /* Index of element buffer factory in header */
+ /* Local variables */
+ void * elmts = NULL; /* Element buffer allocated */
+ unsigned idx; /* Index of element buffer factory in header */
-/* Check arguments */
-HDassert(hdr);
-HDassert(nelmts > 0);
+ /* Check arguments */
+ HDassert(hdr);
+ HDassert(nelmts > 0);
-/* Compute the index of the element buffer factory */
-H5_CHECK_OVERFLOW(nelmts, /*From:*/ size_t, /*To:*/ uint32_t);
-idx = H5VM_log2_of2((uint32_t)nelmts) - H5VM_log2_of2((uint32_t)hdr->cparam.data_blk_min_elmts);
+ /* Compute the index of the element buffer factory */
+ H5_CHECK_OVERFLOW(nelmts, /*From:*/ size_t, /*To:*/ uint32_t);
+ idx = H5VM_log2_of2((uint32_t)nelmts) - H5VM_log2_of2((uint32_t)hdr->cparam.data_blk_min_elmts);
-/* Check for needing to increase size of array of factories */
-if (idx >= hdr->elmt_fac.nalloc) {
- H5FL_fac_head_t **new_fac; /* New array of element factories */
- size_t new_nalloc =
- MAX3(1, (idx + 1), (2 * hdr->elmt_fac.nalloc)); /* New number of factories allocated */
+ /* Check for needing to increase size of array of factories */
+ if (idx >= hdr->elmt_fac.nalloc) {
+ H5FL_fac_head_t **new_fac; /* New array of element factories */
+ size_t new_nalloc =
+ MAX3(1, (idx + 1), (2 * hdr->elmt_fac.nalloc)); /* New number of factories allocated */
- /* Re-allocate array of element factories */
- if (NULL == (new_fac = H5FL_SEQ_REALLOC(H5FL_fac_head_ptr_t, hdr->elmt_fac.fac, new_nalloc)))
- H5E_THROW(H5E_CANTALLOC, "memory allocation failed for data block data element buffer factory array")
+ /* Re-allocate array of element factories */
+ if (NULL == (new_fac = H5FL_SEQ_REALLOC(H5FL_fac_head_ptr_t, hdr->elmt_fac.fac, new_nalloc)))
+ H5E_THROW(H5E_CANTALLOC,
+ "memory allocation failed for data block data element buffer factory array")
- /* Zero out new elements allocated */
- HDmemset(new_fac + hdr->elmt_fac.nalloc, 0,
- (new_nalloc - hdr->elmt_fac.nalloc) * sizeof(H5FL_fac_head_ptr_t));
+ /* Zero out new elements allocated */
+ HDmemset(new_fac + hdr->elmt_fac.nalloc, 0,
+ (new_nalloc - hdr->elmt_fac.nalloc) * sizeof(H5FL_fac_head_ptr_t));
- /* Update information about element factories in header */
- hdr->elmt_fac.nalloc = new_nalloc;
- hdr->elmt_fac.fac = new_fac;
-} /* end if */
+ /* Update information about element factories in header */
+ hdr->elmt_fac.nalloc = new_nalloc;
+ hdr->elmt_fac.fac = new_fac;
+ } /* end if */
-/* Check for un-initialized factory at index */
-if (NULL == hdr->elmt_fac.fac[idx]) {
- if (NULL == (hdr->elmt_fac.fac[idx] = H5FL_fac_init(nelmts * (size_t)hdr->cparam.cls->nat_elmt_size)))
- H5E_THROW(H5E_CANTINIT, "can't create data block data element buffer factory")
-} /* end if */
+ /* Check for un-initialized factory at index */
+ if (NULL == hdr->elmt_fac.fac[idx]) {
+ if (NULL == (hdr->elmt_fac.fac[idx] = H5FL_fac_init(nelmts * (size_t)hdr->cparam.cls->nat_elmt_size)))
+ H5E_THROW(H5E_CANTINIT, "can't create data block data element buffer factory")
+ } /* end if */
-/* Allocate buffer for elements in index block */
-if (NULL == (elmts = H5FL_FAC_MALLOC(hdr->elmt_fac.fac[idx])))
- H5E_THROW(H5E_CANTALLOC, "memory allocation failed for data block data element buffer")
+ /* Allocate buffer for elements in index block */
+ if (NULL == (elmts = H5FL_FAC_MALLOC(hdr->elmt_fac.fac[idx])))
+ H5E_THROW(H5E_CANTALLOC, "memory allocation failed for data block data element buffer")
-/* Set the return value */
-ret_value = elmts;
+ /* Set the return value */
+ ret_value = elmts;
-CATCH
-if (!ret_value)
- if (elmts)
- elmts = H5FL_FAC_FREE(hdr->elmt_fac.fac[idx], elmts);
+ CATCH
+ if (!ret_value)
+ if (elmts)
+ elmts = H5FL_FAC_FREE(hdr->elmt_fac.fac[idx], elmts);
END_FUNC(PKG) /* end H5EA__hdr_alloc_elmts() */
@@ -296,22 +297,22 @@ END_FUNC(PKG) /* end H5EA__hdr_alloc_elmts() */
*/
BEGIN_FUNC(PKG, NOERR, herr_t, SUCCEED, -, H5EA__hdr_free_elmts(H5EA_hdr_t *hdr, size_t nelmts, void *elmts))
-/* Local variables */
-unsigned idx; /* Index of element buffer factory in header */
+ /* Local variables */
+ unsigned idx; /* Index of element buffer factory in header */
-/* Check arguments */
-HDassert(hdr);
-HDassert(nelmts > 0);
-HDassert(elmts);
+ /* Check arguments */
+ HDassert(hdr);
+ HDassert(nelmts > 0);
+ HDassert(elmts);
-/* Compute the index of the element buffer factory */
-H5_CHECK_OVERFLOW(nelmts, /*From:*/ size_t, /*To:*/ uint32_t);
-idx = H5VM_log2_of2((uint32_t)nelmts) - H5VM_log2_of2((uint32_t)hdr->cparam.data_blk_min_elmts);
+ /* Compute the index of the element buffer factory */
+ H5_CHECK_OVERFLOW(nelmts, /*From:*/ size_t, /*To:*/ uint32_t);
+ idx = H5VM_log2_of2((uint32_t)nelmts) - H5VM_log2_of2((uint32_t)hdr->cparam.data_blk_min_elmts);
-/* Free buffer for elements in index block */
-HDassert(idx < hdr->elmt_fac.nalloc);
-HDassert(hdr->elmt_fac.fac[idx]);
-elmts = H5FL_FAC_FREE(hdr->elmt_fac.fac[idx], elmts);
+ /* Free buffer for elements in index block */
+ HDassert(idx < hdr->elmt_fac.nalloc);
+ HDassert(hdr->elmt_fac.fac[idx]);
+ elmts = H5FL_FAC_FREE(hdr->elmt_fac.fac[idx], elmts);
END_FUNC(PKG) /* end H5EA__hdr_free_elmts() */
@@ -330,104 +331,105 @@ END_FUNC(PKG) /* end H5EA__hdr_free_elmts() */
BEGIN_FUNC(PKG, ERR, haddr_t, HADDR_UNDEF, HADDR_UNDEF,
H5EA__hdr_create(H5F_t *f, const H5EA_create_t *cparam, void *ctx_udata))
-/* Local variables */
-H5EA_hdr_t *hdr = NULL; /* Extensible array header */
-hbool_t inserted = FALSE; /* Whether the header was inserted into cache */
+ /* Local variables */
+ H5EA_hdr_t *hdr = NULL; /* Extensible array header */
+ hbool_t inserted = FALSE; /* Whether the header was inserted into cache */
-/* Check arguments */
-HDassert(f);
-HDassert(cparam);
+ /* Check arguments */
+ HDassert(f);
+ HDassert(cparam);
#ifndef NDEBUG
-{
- unsigned sblk_idx; /* Super block index for first "actual" super block */
- size_t dblk_nelmts; /* Number of data block elements */
- size_t dblk_page_nelmts; /* Number of elements in a data block page */
-
- /* Check for valid parameters */
- if (cparam->raw_elmt_size == 0)
- H5E_THROW(H5E_BADVALUE, "element size must be greater than zero")
- if (cparam->max_nelmts_bits == 0)
- H5E_THROW(H5E_BADVALUE, "max. # of elements bits must be greater than zero")
- if (cparam->max_nelmts_bits > H5EA_MAX_NELMTS_IDX_MAX)
- H5E_THROW(H5E_BADVALUE, "max. # of elements bits must be <= %u", (unsigned)H5EA_MAX_NELMTS_IDX_MAX)
- if (cparam->sup_blk_min_data_ptrs < 2)
- H5E_THROW(H5E_BADVALUE, "min # of data block pointers in super block must be >= two")
- if (!POWER_OF_TWO(cparam->sup_blk_min_data_ptrs))
- H5E_THROW(H5E_BADVALUE, "min # of data block pointers in super block must be power of two")
- if (!POWER_OF_TWO(cparam->data_blk_min_elmts))
- H5E_THROW(H5E_BADVALUE, "min # of elements per data block must be power of two")
- dblk_page_nelmts = (size_t)1 << cparam->max_dblk_page_nelmts_bits;
- if (dblk_page_nelmts < cparam->idx_blk_elmts)
- H5E_THROW(H5E_BADVALUE,
- "# of elements per data block page must be greater than # of elements in index block")
-
- /* Compute the number of elements in data blocks for first actual super block */
- sblk_idx = H5EA_SBLK_FIRST_IDX(cparam->sup_blk_min_data_ptrs);
- dblk_nelmts = H5EA_SBLK_DBLK_NELMTS(sblk_idx, cparam->data_blk_min_elmts);
- if (dblk_page_nelmts < dblk_nelmts)
- H5E_THROW(H5E_BADVALUE, "max. # of elements per data block page bits must be > # of elements in "
- "first data block from super block")
-
- if (cparam->max_dblk_page_nelmts_bits > cparam->max_nelmts_bits)
- H5E_THROW(H5E_BADVALUE,
- "max. # of elements per data block page bits must be <= max. # of elements bits")
-}
+ {
+ unsigned sblk_idx; /* Super block index for first "actual" super block */
+ size_t dblk_nelmts; /* Number of data block elements */
+ size_t dblk_page_nelmts; /* Number of elements in a data block page */
+
+ /* Check for valid parameters */
+ if (cparam->raw_elmt_size == 0)
+ H5E_THROW(H5E_BADVALUE, "element size must be greater than zero")
+ if (cparam->max_nelmts_bits == 0)
+ H5E_THROW(H5E_BADVALUE, "max. # of elements bits must be greater than zero")
+ if (cparam->max_nelmts_bits > H5EA_MAX_NELMTS_IDX_MAX)
+ H5E_THROW(H5E_BADVALUE, "max. # of elements bits must be <= %u",
+ (unsigned)H5EA_MAX_NELMTS_IDX_MAX)
+ if (cparam->sup_blk_min_data_ptrs < 2)
+ H5E_THROW(H5E_BADVALUE, "min # of data block pointers in super block must be >= two")
+ if (!POWER_OF_TWO(cparam->sup_blk_min_data_ptrs))
+ H5E_THROW(H5E_BADVALUE, "min # of data block pointers in super block must be power of two")
+ if (!POWER_OF_TWO(cparam->data_blk_min_elmts))
+ H5E_THROW(H5E_BADVALUE, "min # of elements per data block must be power of two")
+ dblk_page_nelmts = (size_t)1 << cparam->max_dblk_page_nelmts_bits;
+ if (dblk_page_nelmts < cparam->idx_blk_elmts)
+ H5E_THROW(H5E_BADVALUE,
+ "# of elements per data block page must be greater than # of elements in index block")
+
+ /* Compute the number of elements in data blocks for first actual super block */
+ sblk_idx = H5EA_SBLK_FIRST_IDX(cparam->sup_blk_min_data_ptrs);
+ dblk_nelmts = H5EA_SBLK_DBLK_NELMTS(sblk_idx, cparam->data_blk_min_elmts);
+ if (dblk_page_nelmts < dblk_nelmts)
+ H5E_THROW(H5E_BADVALUE, "max. # of elements per data block page bits must be > # of elements in "
+ "first data block from super block")
+
+ if (cparam->max_dblk_page_nelmts_bits > cparam->max_nelmts_bits)
+ H5E_THROW(H5E_BADVALUE,
+ "max. # of elements per data block page bits must be <= max. # of elements bits")
+ }
#endif /* NDEBUG */
-/* Allocate space for the shared information */
-if (NULL == (hdr = H5EA__hdr_alloc(f)))
- H5E_THROW(H5E_CANTALLOC, "memory allocation failed for extensible array shared header")
-
-/* Set the internal parameters for the array */
-hdr->idx_blk_addr = HADDR_UNDEF;
-
-/* Set the creation parameters for the array */
-H5MM_memcpy(&hdr->cparam, cparam, sizeof(hdr->cparam));
-
-/* Finish initializing extensible array header */
-if (H5EA__hdr_init(hdr, ctx_udata) < 0)
- H5E_THROW(H5E_CANTINIT, "initialization failed for extensible array header")
-
-/* Allocate space for the header on disk */
-if (HADDR_UNDEF == (hdr->addr = H5MF_alloc(f, H5FD_MEM_EARRAY_HDR, (hsize_t)hdr->size)))
- H5E_THROW(H5E_CANTALLOC, "file allocation failed for extensible array header")
-
-/* Create 'top' proxy for extensible array entries */
-if (hdr->swmr_write)
- if (NULL == (hdr->top_proxy = H5AC_proxy_entry_create()))
- H5E_THROW(H5E_CANTCREATE, "can't create extensible array entry proxy")
-
-/* Cache the new extensible array header */
-if (H5AC_insert_entry(f, H5AC_EARRAY_HDR, hdr->addr, hdr, H5AC__NO_FLAGS_SET) < 0)
- H5E_THROW(H5E_CANTINSERT, "can't add extensible array header to cache")
-inserted = TRUE;
-
-/* Add header as child of 'top' proxy */
-if (hdr->top_proxy)
- if (H5AC_proxy_entry_add_child(hdr->top_proxy, f, hdr) < 0)
- H5E_THROW(H5E_CANTSET, "unable to add extensible array entry as child of array proxy")
-
-/* Set address of array header to return */
-ret_value = hdr->addr;
-
-CATCH
-if (!H5F_addr_defined(ret_value))
- if (hdr) {
- /* Remove from cache, if inserted */
- if (inserted)
- if (H5AC_remove_entry(hdr) < 0)
- H5E_THROW(H5E_CANTREMOVE, "unable to remove extensible array header from cache")
-
- /* Release header's disk space */
- if (H5F_addr_defined(hdr->addr) &&
- H5MF_xfree(f, H5FD_MEM_EARRAY_HDR, hdr->addr, (hsize_t)hdr->size) < 0)
- H5E_THROW(H5E_CANTFREE, "unable to free extensible array header")
-
- /* Destroy header */
- if (H5EA__hdr_dest(hdr) < 0)
- H5E_THROW(H5E_CANTFREE, "unable to destroy extensible array header")
- } /* end if */
+ /* Allocate space for the shared information */
+ if (NULL == (hdr = H5EA__hdr_alloc(f)))
+ H5E_THROW(H5E_CANTALLOC, "memory allocation failed for extensible array shared header")
+
+ /* Set the internal parameters for the array */
+ hdr->idx_blk_addr = HADDR_UNDEF;
+
+ /* Set the creation parameters for the array */
+ H5MM_memcpy(&hdr->cparam, cparam, sizeof(hdr->cparam));
+
+ /* Finish initializing extensible array header */
+ if (H5EA__hdr_init(hdr, ctx_udata) < 0)
+ H5E_THROW(H5E_CANTINIT, "initialization failed for extensible array header")
+
+ /* Allocate space for the header on disk */
+ if (HADDR_UNDEF == (hdr->addr = H5MF_alloc(f, H5FD_MEM_EARRAY_HDR, (hsize_t)hdr->size)))
+ H5E_THROW(H5E_CANTALLOC, "file allocation failed for extensible array header")
+
+ /* Create 'top' proxy for extensible array entries */
+ if (hdr->swmr_write)
+ if (NULL == (hdr->top_proxy = H5AC_proxy_entry_create()))
+ H5E_THROW(H5E_CANTCREATE, "can't create extensible array entry proxy")
+
+ /* Cache the new extensible array header */
+ if (H5AC_insert_entry(f, H5AC_EARRAY_HDR, hdr->addr, hdr, H5AC__NO_FLAGS_SET) < 0)
+ H5E_THROW(H5E_CANTINSERT, "can't add extensible array header to cache")
+ inserted = TRUE;
+
+ /* Add header as child of 'top' proxy */
+ if (hdr->top_proxy)
+ if (H5AC_proxy_entry_add_child(hdr->top_proxy, f, hdr) < 0)
+ H5E_THROW(H5E_CANTSET, "unable to add extensible array entry as child of array proxy")
+
+ /* Set address of array header to return */
+ ret_value = hdr->addr;
+
+ CATCH
+ if (!H5F_addr_defined(ret_value))
+ if (hdr) {
+ /* Remove from cache, if inserted */
+ if (inserted)
+ if (H5AC_remove_entry(hdr) < 0)
+ H5E_THROW(H5E_CANTREMOVE, "unable to remove extensible array header from cache")
+
+ /* Release header's disk space */
+ if (H5F_addr_defined(hdr->addr) &&
+ H5MF_xfree(f, H5FD_MEM_EARRAY_HDR, hdr->addr, (hsize_t)hdr->size) < 0)
+ H5E_THROW(H5E_CANTFREE, "unable to free extensible array header")
+
+ /* Destroy header */
+ if (H5EA__hdr_dest(hdr) < 0)
+ H5E_THROW(H5E_CANTFREE, "unable to destroy extensible array header")
+ } /* end if */
END_FUNC(PKG) /* end H5EA__hdr_create() */
@@ -445,18 +447,18 @@ END_FUNC(PKG) /* end H5EA__hdr_create() */
*/
BEGIN_FUNC(PKG, ERR, herr_t, SUCCEED, FAIL, H5EA__hdr_incr(H5EA_hdr_t *hdr))
-/* Sanity check */
-HDassert(hdr);
+ /* Sanity check */
+ HDassert(hdr);
-/* Mark header as un-evictable when something is depending on it */
-if (hdr->rc == 0)
- if (H5AC_pin_protected_entry(hdr) < 0)
- H5E_THROW(H5E_CANTPIN, "unable to pin extensible array header")
+ /* Mark header as un-evictable when something is depending on it */
+ if (hdr->rc == 0)
+ if (H5AC_pin_protected_entry(hdr) < 0)
+ H5E_THROW(H5E_CANTPIN, "unable to pin extensible array header")
-/* Increment reference count on shared header */
-hdr->rc++;
+ /* Increment reference count on shared header */
+ hdr->rc++;
-CATCH
+ CATCH
END_FUNC(PKG) /* end H5EA__hdr_incr() */
@@ -474,21 +476,21 @@ END_FUNC(PKG) /* end H5EA__hdr_incr() */
*/
BEGIN_FUNC(PKG, ERR, herr_t, SUCCEED, FAIL, H5EA__hdr_decr(H5EA_hdr_t *hdr))
-/* Sanity check */
-HDassert(hdr);
-HDassert(hdr->rc);
+ /* Sanity check */
+ HDassert(hdr);
+ HDassert(hdr->rc);
-/* Decrement reference count on shared header */
-hdr->rc--;
+ /* Decrement reference count on shared header */
+ hdr->rc--;
-/* Mark header as evictable again when nothing depend on it */
-if (hdr->rc == 0) {
- HDassert(hdr->file_rc == 0);
- if (H5AC_unpin_entry(hdr) < 0)
- H5E_THROW(H5E_CANTUNPIN, "unable to unpin extensible array header")
-} /* end if */
+ /* Mark header as evictable again when nothing depend on it */
+ if (hdr->rc == 0) {
+ HDassert(hdr->file_rc == 0);
+ if (H5AC_unpin_entry(hdr) < 0)
+ H5E_THROW(H5E_CANTUNPIN, "unable to unpin extensible array header")
+ } /* end if */
-CATCH
+ CATCH
END_FUNC(PKG) /* end H5EA__hdr_decr() */
@@ -506,11 +508,11 @@ END_FUNC(PKG) /* end H5EA__hdr_decr() */
*/
BEGIN_FUNC(PKG, NOERR, herr_t, SUCCEED, -, H5EA__hdr_fuse_incr(H5EA_hdr_t *hdr))
-/* Sanity check */
-HDassert(hdr);
+ /* Sanity check */
+ HDassert(hdr);
-/* Increment file reference count on shared header */
-hdr->file_rc++;
+ /* Increment file reference count on shared header */
+ hdr->file_rc++;
END_FUNC(PKG) /* end H5EA__hdr_fuse_incr() */
@@ -528,15 +530,15 @@ END_FUNC(PKG) /* end H5EA__hdr_fuse_incr() */
*/
BEGIN_FUNC(PKG, NOERR, size_t, 0, -, H5EA__hdr_fuse_decr(H5EA_hdr_t *hdr))
-/* Sanity check */
-HDassert(hdr);
-HDassert(hdr->file_rc);
+ /* Sanity check */
+ HDassert(hdr);
+ HDassert(hdr->file_rc);
-/* Decrement file reference count on shared header */
-hdr->file_rc--;
+ /* Decrement file reference count on shared header */
+ hdr->file_rc--;
-/* Set return value */
-ret_value = hdr->file_rc;
+ /* Set return value */
+ ret_value = hdr->file_rc;
END_FUNC(PKG) /* end H5EA__hdr_fuse_decr() */
@@ -554,15 +556,15 @@ END_FUNC(PKG) /* end H5EA__hdr_fuse_decr() */
*/
BEGIN_FUNC(PKG, ERR, herr_t, SUCCEED, FAIL, H5EA__hdr_modified(H5EA_hdr_t *hdr))
-/* Sanity check */
-HDassert(hdr);
-HDassert(hdr->f);
+ /* Sanity check */
+ HDassert(hdr);
+ HDassert(hdr->f);
-/* Mark header as dirty in cache */
-if (H5AC_mark_entry_dirty(hdr) < 0)
- H5E_THROW(H5E_CANTMARKDIRTY, "unable to mark extensible array header as dirty")
+ /* Mark header as dirty in cache */
+ if (H5AC_mark_entry_dirty(hdr) < 0)
+ H5E_THROW(H5E_CANTMARKDIRTY, "unable to mark extensible array header as dirty")
-CATCH
+ CATCH
END_FUNC(PKG) /* end H5EA__hdr_modified() */
@@ -581,43 +583,43 @@ END_FUNC(PKG) /* end H5EA__hdr_modified() */
BEGIN_FUNC(PKG, ERR, H5EA_hdr_t *, NULL, NULL,
H5EA__hdr_protect(H5F_t *f, haddr_t ea_addr, void *ctx_udata, unsigned flags))
-/* Local variables */
-H5EA_hdr_t * hdr; /* Extensible array header */
-H5EA_hdr_cache_ud_t udata; /* User data for cache callbacks */
-
-/* Sanity check */
-HDassert(f);
-HDassert(H5F_addr_defined(ea_addr));
-
-/* only the H5AC__READ_ONLY_FLAG may appear in flags */
-HDassert((flags & (unsigned)(~H5AC__READ_ONLY_FLAG)) == 0);
-
-/* Set up user data for cache callbacks */
-udata.f = f;
-udata.addr = ea_addr;
-udata.ctx_udata = ctx_udata;
-
-/* Protect the header */
-if (NULL == (hdr = (H5EA_hdr_t *)H5AC_protect(f, H5AC_EARRAY_HDR, ea_addr, &udata, flags)))
- H5E_THROW(H5E_CANTPROTECT, "unable to protect extensible array header, address = %llu",
- (unsigned long long)ea_addr)
-hdr->f = f; /* (Must be set again here, in case the header was already in the cache -QAK) */
+ /* Local variables */
+ H5EA_hdr_t * hdr; /* Extensible array header */
+ H5EA_hdr_cache_ud_t udata; /* User data for cache callbacks */
-/* Create top proxy, if it doesn't exist */
-if (hdr->swmr_write && NULL == hdr->top_proxy) {
- /* Create 'top' proxy for extensible array entries */
- if (NULL == (hdr->top_proxy = H5AC_proxy_entry_create()))
- H5E_THROW(H5E_CANTCREATE, "can't create extensible array entry proxy")
-
- /* Add header as child of 'top' proxy */
- if (H5AC_proxy_entry_add_child(hdr->top_proxy, f, hdr) < 0)
- H5E_THROW(H5E_CANTSET, "unable to add extensible array entry as child of array proxy")
-} /* end if */
+ /* Sanity check */
+ HDassert(f);
+ HDassert(H5F_addr_defined(ea_addr));
+
+ /* only the H5AC__READ_ONLY_FLAG may appear in flags */
+ HDassert((flags & (unsigned)(~H5AC__READ_ONLY_FLAG)) == 0);
+
+ /* Set up user data for cache callbacks */
+ udata.f = f;
+ udata.addr = ea_addr;
+ udata.ctx_udata = ctx_udata;
+
+ /* Protect the header */
+ if (NULL == (hdr = (H5EA_hdr_t *)H5AC_protect(f, H5AC_EARRAY_HDR, ea_addr, &udata, flags)))
+ H5E_THROW(H5E_CANTPROTECT, "unable to protect extensible array header, address = %llu",
+ (unsigned long long)ea_addr)
+ hdr->f = f; /* (Must be set again here, in case the header was already in the cache -QAK) */
+
+ /* Create top proxy, if it doesn't exist */
+ if (hdr->swmr_write && NULL == hdr->top_proxy) {
+ /* Create 'top' proxy for extensible array entries */
+ if (NULL == (hdr->top_proxy = H5AC_proxy_entry_create()))
+ H5E_THROW(H5E_CANTCREATE, "can't create extensible array entry proxy")
+
+ /* Add header as child of 'top' proxy */
+ if (H5AC_proxy_entry_add_child(hdr->top_proxy, f, hdr) < 0)
+ H5E_THROW(H5E_CANTSET, "unable to add extensible array entry as child of array proxy")
+ } /* end if */
-/* Set return value */
-ret_value = hdr;
+ /* Set return value */
+ ret_value = hdr;
-CATCH
+ CATCH
END_FUNC(PKG) /* end H5EA__hdr_protect() */
@@ -635,17 +637,17 @@ END_FUNC(PKG) /* end H5EA__hdr_protect() */
*/
BEGIN_FUNC(PKG, ERR, herr_t, SUCCEED, FAIL, H5EA__hdr_unprotect(H5EA_hdr_t *hdr, unsigned cache_flags))
-/* Local variables */
+ /* Local variables */
-/* Sanity check */
-HDassert(hdr);
+ /* Sanity check */
+ HDassert(hdr);
-/* Unprotect the header */
-if (H5AC_unprotect(hdr->f, H5AC_EARRAY_HDR, hdr->addr, hdr, cache_flags) < 0)
- H5E_THROW(H5E_CANTUNPROTECT, "unable to unprotect extensible array hdr, address = %llu",
- (unsigned long long)hdr->addr)
+ /* Unprotect the header */
+ if (H5AC_unprotect(hdr->f, H5AC_EARRAY_HDR, hdr->addr, hdr, cache_flags) < 0)
+ H5E_THROW(H5E_CANTUNPROTECT, "unable to unprotect extensible array hdr, address = %llu",
+ (unsigned long long)hdr->addr)
-CATCH
+ CATCH
END_FUNC(PKG) /* end H5EA__hdr_unprotect() */
@@ -663,42 +665,42 @@ END_FUNC(PKG) /* end H5EA__hdr_unprotect() */
*/
BEGIN_FUNC(PKG, ERR, herr_t, SUCCEED, FAIL, H5EA__hdr_delete(H5EA_hdr_t *hdr))
-/* Local variables */
-unsigned cache_flags = H5AC__NO_FLAGS_SET; /* Flags for unprotecting header */
+ /* Local variables */
+ unsigned cache_flags = H5AC__NO_FLAGS_SET; /* Flags for unprotecting header */
-/* Sanity check */
-HDassert(hdr);
-HDassert(!hdr->file_rc);
+ /* Sanity check */
+ HDassert(hdr);
+ HDassert(!hdr->file_rc);
#ifndef NDEBUG
-{
- unsigned hdr_status = 0; /* Array header's status in the metadata cache */
+ {
+ unsigned hdr_status = 0; /* Array header's status in the metadata cache */
- /* Check the array header's status in the metadata cache */
- if (H5AC_get_entry_status(hdr->f, hdr->addr, &hdr_status) < 0)
- H5E_THROW(H5E_CANTGET, "unable to check metadata cache status for array header")
+ /* Check the array header's status in the metadata cache */
+ if (H5AC_get_entry_status(hdr->f, hdr->addr, &hdr_status) < 0)
+ H5E_THROW(H5E_CANTGET, "unable to check metadata cache status for array header")
- /* Sanity checks on array header */
- HDassert(hdr_status & H5AC_ES__IN_CACHE);
- HDassert(hdr_status & H5AC_ES__IS_PROTECTED);
-} /* end block */
+ /* Sanity checks on array header */
+ HDassert(hdr_status & H5AC_ES__IN_CACHE);
+ HDassert(hdr_status & H5AC_ES__IS_PROTECTED);
+ } /* end block */
#endif /* NDEBUG */
-/* Check for index block */
-if (H5F_addr_defined(hdr->idx_blk_addr)) {
- /* Delete index block */
- if (H5EA__iblock_delete(hdr) < 0)
- H5E_THROW(H5E_CANTDELETE, "unable to delete extensible array index block")
-} /* end if */
+ /* Check for index block */
+ if (H5F_addr_defined(hdr->idx_blk_addr)) {
+ /* Delete index block */
+ if (H5EA__iblock_delete(hdr) < 0)
+ H5E_THROW(H5E_CANTDELETE, "unable to delete extensible array index block")
+ } /* end if */
-/* Set flags to finish deleting header on unprotect */
-cache_flags |= H5AC__DIRTIED_FLAG | H5AC__DELETED_FLAG | H5AC__FREE_FILE_SPACE_FLAG;
+ /* Set flags to finish deleting header on unprotect */
+ cache_flags |= H5AC__DIRTIED_FLAG | H5AC__DELETED_FLAG | H5AC__FREE_FILE_SPACE_FLAG;
-CATCH
+ CATCH
-/* Unprotect the header, deleting it if an error hasn't occurred */
-if (H5EA__hdr_unprotect(hdr, cache_flags) < 0)
- H5E_THROW(H5E_CANTUNPROTECT, "unable to release extensible array header")
+ /* Unprotect the header, deleting it if an error hasn't occurred */
+ if (H5EA__hdr_unprotect(hdr, cache_flags) < 0)
+ H5E_THROW(H5E_CANTUNPROTECT, "unable to release extensible array header")
END_FUNC(PKG) /* end H5EA__hdr_delete() */
@@ -716,52 +718,52 @@ END_FUNC(PKG) /* end H5EA__hdr_delete() */
*/
BEGIN_FUNC(PKG, ERR, herr_t, SUCCEED, FAIL, H5EA__hdr_dest(H5EA_hdr_t *hdr))
-/* Check arguments */
-HDassert(hdr);
-HDassert(hdr->rc == 0);
+ /* Check arguments */
+ HDassert(hdr);
+ HDassert(hdr->rc == 0);
-/* Destroy the callback context */
-if (hdr->cb_ctx) {
- if ((*hdr->cparam.cls->dst_context)(hdr->cb_ctx) < 0)
- H5E_THROW(H5E_CANTRELEASE, "unable to destroy extensible array client callback context")
-} /* end if */
-hdr->cb_ctx = NULL;
-
-/* Check for data block element buffer factory info to free */
-if (hdr->elmt_fac.fac) {
- unsigned u; /* Local index variable */
-
- /* Sanity check */
- HDassert(hdr->elmt_fac.nalloc > 0);
-
- /* Iterate over factories, shutting them down */
- for (u = 0; u < hdr->elmt_fac.nalloc; u++) {
- /* Check if this factory has been initialized */
- if (hdr->elmt_fac.fac[u]) {
- if (H5FL_fac_term(hdr->elmt_fac.fac[u]) < 0)
- H5E_THROW(H5E_CANTRELEASE, "unable to destroy extensible array header factory")
- hdr->elmt_fac.fac[u] = NULL;
- } /* end if */
- } /* end for */
-
- /* Free factory array */
- hdr->elmt_fac.fac = (H5FL_fac_head_t **)H5FL_SEQ_FREE(H5FL_fac_head_ptr_t, hdr->elmt_fac.fac);
-} /* end if */
+ /* Destroy the callback context */
+ if (hdr->cb_ctx) {
+ if ((*hdr->cparam.cls->dst_context)(hdr->cb_ctx) < 0)
+ H5E_THROW(H5E_CANTRELEASE, "unable to destroy extensible array client callback context")
+ } /* end if */
+ hdr->cb_ctx = NULL;
+
+ /* Check for data block element buffer factory info to free */
+ if (hdr->elmt_fac.fac) {
+ unsigned u; /* Local index variable */
+
+ /* Sanity check */
+ HDassert(hdr->elmt_fac.nalloc > 0);
+
+ /* Iterate over factories, shutting them down */
+ for (u = 0; u < hdr->elmt_fac.nalloc; u++) {
+ /* Check if this factory has been initialized */
+ if (hdr->elmt_fac.fac[u]) {
+ if (H5FL_fac_term(hdr->elmt_fac.fac[u]) < 0)
+ H5E_THROW(H5E_CANTRELEASE, "unable to destroy extensible array header factory")
+ hdr->elmt_fac.fac[u] = NULL;
+ } /* end if */
+ } /* end for */
+
+ /* Free factory array */
+ hdr->elmt_fac.fac = (H5FL_fac_head_t **)H5FL_SEQ_FREE(H5FL_fac_head_ptr_t, hdr->elmt_fac.fac);
+ } /* end if */
-/* Free the super block info array */
-if (hdr->sblk_info)
- hdr->sblk_info = (H5EA_sblk_info_t *)H5FL_SEQ_FREE(H5EA_sblk_info_t, hdr->sblk_info);
+ /* Free the super block info array */
+ if (hdr->sblk_info)
+ hdr->sblk_info = (H5EA_sblk_info_t *)H5FL_SEQ_FREE(H5EA_sblk_info_t, hdr->sblk_info);
-/* Destroy the 'top' proxy */
-if (hdr->top_proxy) {
- if (H5AC_proxy_entry_dest(hdr->top_proxy) < 0)
- H5E_THROW(H5E_CANTRELEASE, "unable to destroy extensible array 'top' proxy")
- hdr->top_proxy = NULL;
-} /* end if */
+ /* Destroy the 'top' proxy */
+ if (hdr->top_proxy) {
+ if (H5AC_proxy_entry_dest(hdr->top_proxy) < 0)
+ H5E_THROW(H5E_CANTRELEASE, "unable to destroy extensible array 'top' proxy")
+ hdr->top_proxy = NULL;
+ } /* end if */
-/* Free the shared info itself */
-hdr = H5FL_FREE(H5EA_hdr_t, hdr);
+ /* Free the shared info itself */
+ hdr = H5FL_FREE(H5EA_hdr_t, hdr);
-CATCH
+ CATCH
END_FUNC(PKG) /* end H5EA__hdr_dest() */
diff --git a/src/H5EAiblock.c b/src/H5EAiblock.c
index 1e42716..fcbe65f 100644
--- a/src/H5EAiblock.c
+++ b/src/H5EAiblock.c
@@ -93,52 +93,53 @@ H5FL_SEQ_DEFINE_STATIC(haddr_t);
*/
BEGIN_FUNC(PKG, ERR, H5EA_iblock_t *, NULL, NULL, H5EA__iblock_alloc(H5EA_hdr_t *hdr))
-/* Local variables */
-H5EA_iblock_t *iblock = NULL; /* Extensible array index block */
-
-/* Check arguments */
-HDassert(hdr);
-
-/* Allocate memory for the index block */
-if (NULL == (iblock = H5FL_CALLOC(H5EA_iblock_t)))
- H5E_THROW(H5E_CANTALLOC, "memory allocation failed for extensible array index block")
-
-/* Share common array information */
-if (H5EA__hdr_incr(hdr) < 0)
- H5E_THROW(H5E_CANTINC, "can't increment reference count on shared array header")
-iblock->hdr = hdr;
-
-/* Set non-zero internal fields */
-iblock->addr = HADDR_UNDEF;
-
-/* Compute information */
-iblock->nsblks = H5EA_SBLK_FIRST_IDX(hdr->cparam.sup_blk_min_data_ptrs);
-iblock->ndblk_addrs = 2 * ((size_t)hdr->cparam.sup_blk_min_data_ptrs - 1);
-iblock->nsblk_addrs = hdr->nsblks - iblock->nsblks;
-
-/* Allocate buffer for elements in index block */
-if (hdr->cparam.idx_blk_elmts > 0)
- if (NULL == (iblock->elmts = H5FL_BLK_MALLOC(
- idx_blk_elmt_buf, (size_t)(hdr->cparam.idx_blk_elmts * hdr->cparam.cls->nat_elmt_size))))
- H5E_THROW(H5E_CANTALLOC, "memory allocation failed for index block data element buffer")
-
-/* Allocate buffer for data block addresses in index block */
-if (iblock->ndblk_addrs > 0)
- if (NULL == (iblock->dblk_addrs = H5FL_SEQ_MALLOC(haddr_t, iblock->ndblk_addrs)))
- H5E_THROW(H5E_CANTALLOC, "memory allocation failed for index block data block addresses")
-
-/* Allocate buffer for super block addresses in index block */
-if (iblock->nsblk_addrs > 0)
- if (NULL == (iblock->sblk_addrs = H5FL_SEQ_MALLOC(haddr_t, iblock->nsblk_addrs)))
- H5E_THROW(H5E_CANTALLOC, "memory allocation failed for index block super block addresses")
-
-/* Set the return value */
-ret_value = iblock;
-
-CATCH
-if (!ret_value)
- if (iblock && H5EA__iblock_dest(iblock) < 0)
- H5E_THROW(H5E_CANTFREE, "unable to destroy extensible array index block")
+ /* Local variables */
+ H5EA_iblock_t *iblock = NULL; /* Extensible array index block */
+
+ /* Check arguments */
+ HDassert(hdr);
+
+ /* Allocate memory for the index block */
+ if (NULL == (iblock = H5FL_CALLOC(H5EA_iblock_t)))
+ H5E_THROW(H5E_CANTALLOC, "memory allocation failed for extensible array index block")
+
+ /* Share common array information */
+ if (H5EA__hdr_incr(hdr) < 0)
+ H5E_THROW(H5E_CANTINC, "can't increment reference count on shared array header")
+ iblock->hdr = hdr;
+
+ /* Set non-zero internal fields */
+ iblock->addr = HADDR_UNDEF;
+
+ /* Compute information */
+ iblock->nsblks = H5EA_SBLK_FIRST_IDX(hdr->cparam.sup_blk_min_data_ptrs);
+ iblock->ndblk_addrs = 2 * ((size_t)hdr->cparam.sup_blk_min_data_ptrs - 1);
+ iblock->nsblk_addrs = hdr->nsblks - iblock->nsblks;
+
+ /* Allocate buffer for elements in index block */
+ if (hdr->cparam.idx_blk_elmts > 0)
+ if (NULL ==
+ (iblock->elmts = H5FL_BLK_MALLOC(
+ idx_blk_elmt_buf, (size_t)(hdr->cparam.idx_blk_elmts * hdr->cparam.cls->nat_elmt_size))))
+ H5E_THROW(H5E_CANTALLOC, "memory allocation failed for index block data element buffer")
+
+ /* Allocate buffer for data block addresses in index block */
+ if (iblock->ndblk_addrs > 0)
+ if (NULL == (iblock->dblk_addrs = H5FL_SEQ_MALLOC(haddr_t, iblock->ndblk_addrs)))
+ H5E_THROW(H5E_CANTALLOC, "memory allocation failed for index block data block addresses")
+
+ /* Allocate buffer for super block addresses in index block */
+ if (iblock->nsblk_addrs > 0)
+ if (NULL == (iblock->sblk_addrs = H5FL_SEQ_MALLOC(haddr_t, iblock->nsblk_addrs)))
+ H5E_THROW(H5E_CANTALLOC, "memory allocation failed for index block super block addresses")
+
+ /* Set the return value */
+ ret_value = iblock;
+
+ CATCH
+ if (!ret_value)
+ if (iblock && H5EA__iblock_dest(iblock) < 0)
+ H5E_THROW(H5E_CANTFREE, "unable to destroy extensible array index block")
END_FUNC(PKG) /* end H5EA__iblock_alloc() */
@@ -157,95 +158,95 @@ END_FUNC(PKG) /* end H5EA__iblock_alloc() */
BEGIN_FUNC(PKG, ERR, haddr_t, HADDR_UNDEF, HADDR_UNDEF,
H5EA__iblock_create(H5EA_hdr_t *hdr, hbool_t *stats_changed))
-/* Local variables */
-H5EA_iblock_t *iblock = NULL; /* Extensible array index block */
-haddr_t iblock_addr; /* Extensible array index block address */
-hbool_t inserted = FALSE; /* Whether the header was inserted into cache */
-
-/* Sanity check */
-HDassert(hdr);
-HDassert(stats_changed);
-
-/* Allocate the index block */
-if (NULL == (iblock = H5EA__iblock_alloc(hdr)))
- H5E_THROW(H5E_CANTALLOC, "memory allocation failed for extensible array index block")
-
-/* Set size of index block on disk */
-iblock->size = H5EA_IBLOCK_SIZE(iblock);
-
-/* Allocate space for the index block on disk */
-if (HADDR_UNDEF == (iblock_addr = H5MF_alloc(hdr->f, H5FD_MEM_EARRAY_IBLOCK, (hsize_t)iblock->size)))
- H5E_THROW(H5E_CANTALLOC, "file allocation failed for extensible array index block")
-iblock->addr = iblock_addr;
-
-/* Clear any elements in index block to fill value */
-if (hdr->cparam.idx_blk_elmts > 0) {
- /* Call the class's 'fill' callback */
- if ((hdr->cparam.cls->fill)(iblock->elmts, (size_t)hdr->cparam.idx_blk_elmts) < 0)
- H5E_THROW(H5E_CANTSET, "can't set extensible array index block elements to class's fill value")
-} /* end if */
-
-/* Reset any data block addresses in the index block */
-if (iblock->ndblk_addrs > 0) {
- haddr_t tmp_addr = HADDR_UNDEF; /* Address value to fill data block addresses with */
-
- /* Set all the data block addresses to "undefined" address value */
- H5VM_array_fill(iblock->dblk_addrs, &tmp_addr, sizeof(haddr_t), iblock->ndblk_addrs);
-} /* end if */
-
-/* Reset any super block addresses in the index block */
-if (iblock->nsblk_addrs > 0) {
- haddr_t tmp_addr = HADDR_UNDEF; /* Address value to fill super block addresses with */
-
- /* Set all the super block addresses to "undefined" address value */
- H5VM_array_fill(iblock->sblk_addrs, &tmp_addr, sizeof(haddr_t), iblock->nsblk_addrs);
-} /* end if */
-
-/* Cache the new extensible array index block */
-if (H5AC_insert_entry(hdr->f, H5AC_EARRAY_IBLOCK, iblock_addr, iblock, H5AC__NO_FLAGS_SET) < 0)
- H5E_THROW(H5E_CANTINSERT, "can't add extensible array index block to cache")
-inserted = TRUE;
-
-/* Add index block as child of 'top' proxy */
-if (hdr->top_proxy) {
- if (H5AC_proxy_entry_add_child(hdr->top_proxy, hdr->f, iblock) < 0)
- H5E_THROW(H5E_CANTSET, "unable to add extensible array entry as child of array proxy")
- iblock->top_proxy = hdr->top_proxy;
-} /* end if */
-
-/* Update extensible array index block statistics */
-HDassert(0 == hdr->stats.computed.nindex_blks);
-HDassert(0 == hdr->stats.computed.index_blk_size);
-hdr->stats.computed.nindex_blks = 1;
-hdr->stats.computed.index_blk_size = iblock->size;
-
-/* Increment count of elements "realized" */
-hdr->stats.stored.nelmts += hdr->cparam.idx_blk_elmts;
-
-/* Mark the statistics as changed */
-*stats_changed = TRUE;
-
-/* Set address of index block to return */
-ret_value = iblock_addr;
-
-CATCH
-if (!H5F_addr_defined(ret_value))
- if (iblock) {
- /* Remove from cache, if inserted */
- if (inserted)
- if (H5AC_remove_entry(iblock) < 0)
- H5E_THROW(H5E_CANTREMOVE, "unable to remove extensible array index block from cache")
-
- /* Release index block's disk space */
- if (H5F_addr_defined(iblock->addr) &&
- H5MF_xfree(hdr->f, H5FD_MEM_EARRAY_IBLOCK, iblock->addr, (hsize_t)iblock->size) < 0)
- H5E_THROW(H5E_CANTFREE, "unable to release file space for extensible array index block")
-
- /* Destroy index block */
- if (H5EA__iblock_dest(iblock) < 0)
- H5E_THROW(H5E_CANTFREE, "unable to destroy extensible array index block")
+ /* Local variables */
+ H5EA_iblock_t *iblock = NULL; /* Extensible array index block */
+ haddr_t iblock_addr; /* Extensible array index block address */
+ hbool_t inserted = FALSE; /* Whether the header was inserted into cache */
+
+ /* Sanity check */
+ HDassert(hdr);
+ HDassert(stats_changed);
+
+ /* Allocate the index block */
+ if (NULL == (iblock = H5EA__iblock_alloc(hdr)))
+ H5E_THROW(H5E_CANTALLOC, "memory allocation failed for extensible array index block")
+
+ /* Set size of index block on disk */
+ iblock->size = H5EA_IBLOCK_SIZE(iblock);
+
+ /* Allocate space for the index block on disk */
+ if (HADDR_UNDEF == (iblock_addr = H5MF_alloc(hdr->f, H5FD_MEM_EARRAY_IBLOCK, (hsize_t)iblock->size)))
+ H5E_THROW(H5E_CANTALLOC, "file allocation failed for extensible array index block")
+ iblock->addr = iblock_addr;
+
+ /* Clear any elements in index block to fill value */
+ if (hdr->cparam.idx_blk_elmts > 0) {
+ /* Call the class's 'fill' callback */
+ if ((hdr->cparam.cls->fill)(iblock->elmts, (size_t)hdr->cparam.idx_blk_elmts) < 0)
+ H5E_THROW(H5E_CANTSET, "can't set extensible array index block elements to class's fill value")
+ } /* end if */
+
+ /* Reset any data block addresses in the index block */
+ if (iblock->ndblk_addrs > 0) {
+ haddr_t tmp_addr = HADDR_UNDEF; /* Address value to fill data block addresses with */
+
+ /* Set all the data block addresses to "undefined" address value */
+ H5VM_array_fill(iblock->dblk_addrs, &tmp_addr, sizeof(haddr_t), iblock->ndblk_addrs);
+ } /* end if */
+
+ /* Reset any super block addresses in the index block */
+ if (iblock->nsblk_addrs > 0) {
+ haddr_t tmp_addr = HADDR_UNDEF; /* Address value to fill super block addresses with */
+
+ /* Set all the super block addresses to "undefined" address value */
+ H5VM_array_fill(iblock->sblk_addrs, &tmp_addr, sizeof(haddr_t), iblock->nsblk_addrs);
+ } /* end if */
+
+ /* Cache the new extensible array index block */
+ if (H5AC_insert_entry(hdr->f, H5AC_EARRAY_IBLOCK, iblock_addr, iblock, H5AC__NO_FLAGS_SET) < 0)
+ H5E_THROW(H5E_CANTINSERT, "can't add extensible array index block to cache")
+ inserted = TRUE;
+
+ /* Add index block as child of 'top' proxy */
+ if (hdr->top_proxy) {
+ if (H5AC_proxy_entry_add_child(hdr->top_proxy, hdr->f, iblock) < 0)
+ H5E_THROW(H5E_CANTSET, "unable to add extensible array entry as child of array proxy")
+ iblock->top_proxy = hdr->top_proxy;
} /* end if */
+ /* Update extensible array index block statistics */
+ HDassert(0 == hdr->stats.computed.nindex_blks);
+ HDassert(0 == hdr->stats.computed.index_blk_size);
+ hdr->stats.computed.nindex_blks = 1;
+ hdr->stats.computed.index_blk_size = iblock->size;
+
+ /* Increment count of elements "realized" */
+ hdr->stats.stored.nelmts += hdr->cparam.idx_blk_elmts;
+
+ /* Mark the statistics as changed */
+ *stats_changed = TRUE;
+
+ /* Set address of index block to return */
+ ret_value = iblock_addr;
+
+ CATCH
+ if (!H5F_addr_defined(ret_value))
+ if (iblock) {
+ /* Remove from cache, if inserted */
+ if (inserted)
+ if (H5AC_remove_entry(iblock) < 0)
+ H5E_THROW(H5E_CANTREMOVE, "unable to remove extensible array index block from cache")
+
+ /* Release index block's disk space */
+ if (H5F_addr_defined(iblock->addr) &&
+ H5MF_xfree(hdr->f, H5FD_MEM_EARRAY_IBLOCK, iblock->addr, (hsize_t)iblock->size) < 0)
+ H5E_THROW(H5E_CANTFREE, "unable to release file space for extensible array index block")
+
+ /* Destroy index block */
+ if (H5EA__iblock_dest(iblock) < 0)
+ H5E_THROW(H5E_CANTFREE, "unable to destroy extensible array index block")
+ } /* end if */
+
END_FUNC(PKG) /* end H5EA__iblock_create() */
/*-------------------------------------------------------------------------
@@ -262,40 +263,41 @@ END_FUNC(PKG) /* end H5EA__iblock_create() */
*/
BEGIN_FUNC(PKG, ERR, H5EA_iblock_t *, NULL, NULL, H5EA__iblock_protect(H5EA_hdr_t *hdr, unsigned flags))
-/* Local variables */
-H5EA_iblock_t *iblock = NULL; /* Pointer to index block */
+ /* Local variables */
+ H5EA_iblock_t *iblock = NULL; /* Pointer to index block */
-/* Sanity check */
-HDassert(hdr);
+ /* Sanity check */
+ HDassert(hdr);
-/* only the H5AC__READ_ONLY_FLAG may be set */
-HDassert((flags & (unsigned)(~H5AC__READ_ONLY_FLAG)) == 0);
+ /* only the H5AC__READ_ONLY_FLAG may be set */
+ HDassert((flags & (unsigned)(~H5AC__READ_ONLY_FLAG)) == 0);
-/* Protect the index block */
-if (NULL ==
- (iblock = (H5EA_iblock_t *)H5AC_protect(hdr->f, H5AC_EARRAY_IBLOCK, hdr->idx_blk_addr, hdr, flags)))
- H5E_THROW(H5E_CANTPROTECT, "unable to protect extensible array index block, address = %llu",
- (unsigned long long)hdr->idx_blk_addr)
+ /* Protect the index block */
+ if (NULL ==
+ (iblock = (H5EA_iblock_t *)H5AC_protect(hdr->f, H5AC_EARRAY_IBLOCK, hdr->idx_blk_addr, hdr, flags)))
+ H5E_THROW(H5E_CANTPROTECT, "unable to protect extensible array index block, address = %llu",
+ (unsigned long long)hdr->idx_blk_addr)
-/* Create top proxy, if it doesn't exist */
-if (hdr->top_proxy && NULL == iblock->top_proxy) {
- /* Add index block as child of 'top' proxy */
- if (H5AC_proxy_entry_add_child(hdr->top_proxy, hdr->f, iblock) < 0)
- H5E_THROW(H5E_CANTSET, "unable to add extensible array entry as child of array proxy")
- iblock->top_proxy = hdr->top_proxy;
-} /* end if */
-
-/* Set return value */
-ret_value = iblock;
-
-CATCH
-/* Clean up on error */
-if (!ret_value) {
- /* Release the index block, if it was protected */
- if (iblock && H5AC_unprotect(hdr->f, H5AC_EARRAY_IBLOCK, iblock->addr, iblock, H5AC__NO_FLAGS_SET) < 0)
- H5E_THROW(H5E_CANTUNPROTECT, "unable to unprotect extensible array index block, address = %llu",
- (unsigned long long)iblock->addr)
-} /* end if */
+ /* Create top proxy, if it doesn't exist */
+ if (hdr->top_proxy && NULL == iblock->top_proxy) {
+ /* Add index block as child of 'top' proxy */
+ if (H5AC_proxy_entry_add_child(hdr->top_proxy, hdr->f, iblock) < 0)
+ H5E_THROW(H5E_CANTSET, "unable to add extensible array entry as child of array proxy")
+ iblock->top_proxy = hdr->top_proxy;
+ } /* end if */
+
+ /* Set return value */
+ ret_value = iblock;
+
+ CATCH
+ /* Clean up on error */
+ if (!ret_value) {
+ /* Release the index block, if it was protected */
+ if (iblock &&
+ H5AC_unprotect(hdr->f, H5AC_EARRAY_IBLOCK, iblock->addr, iblock, H5AC__NO_FLAGS_SET) < 0)
+ H5E_THROW(H5E_CANTUNPROTECT, "unable to unprotect extensible array index block, address = %llu",
+ (unsigned long long)iblock->addr)
+ } /* end if */
END_FUNC(PKG) /* end H5EA__iblock_protect() */
@@ -314,17 +316,17 @@ END_FUNC(PKG) /* end H5EA__iblock_protect() */
BEGIN_FUNC(PKG, ERR, herr_t, SUCCEED, FAIL,
H5EA__iblock_unprotect(H5EA_iblock_t *iblock, unsigned cache_flags))
-/* Local variables */
+ /* Local variables */
-/* Sanity check */
-HDassert(iblock);
+ /* Sanity check */
+ HDassert(iblock);
-/* Unprotect the index block */
-if (H5AC_unprotect(iblock->hdr->f, H5AC_EARRAY_IBLOCK, iblock->addr, iblock, cache_flags) < 0)
- H5E_THROW(H5E_CANTUNPROTECT, "unable to unprotect extensible array index block, address = %llu",
- (unsigned long long)iblock->addr)
+ /* Unprotect the index block */
+ if (H5AC_unprotect(iblock->hdr->f, H5AC_EARRAY_IBLOCK, iblock->addr, iblock, cache_flags) < 0)
+ H5E_THROW(H5E_CANTUNPROTECT, "unable to unprotect extensible array index block, address = %llu",
+ (unsigned long long)iblock->addr)
-CATCH
+ CATCH
END_FUNC(PKG) /* end H5EA__iblock_unprotect() */
@@ -342,68 +344,69 @@ END_FUNC(PKG) /* end H5EA__iblock_unprotect() */
*/
BEGIN_FUNC(PKG, ERR, herr_t, SUCCEED, FAIL, H5EA__iblock_delete(H5EA_hdr_t *hdr))
-/* Local variables */
-H5EA_iblock_t *iblock = NULL; /* Pointer to index block */
-
-/* Sanity check */
-HDassert(hdr);
-HDassert(H5F_addr_defined(hdr->idx_blk_addr));
-
-/* Protect index block */
-if (NULL == (iblock = H5EA__iblock_protect(hdr, H5AC__NO_FLAGS_SET)))
- H5E_THROW(H5E_CANTPROTECT, "unable to protect extensible array index block, address = %llu",
- (unsigned long long)hdr->idx_blk_addr)
-
-/* Check for index block having data block pointers */
-if (iblock->ndblk_addrs > 0) {
- unsigned sblk_idx; /* Current super block index */
- unsigned dblk_idx; /* Current data block index w/in super block */
- size_t u; /* Local index variable */
-
- /* Iterate over data blocks */
- sblk_idx = dblk_idx = 0;
- for (u = 0; u < iblock->ndblk_addrs; u++) {
- /* Check for data block existing */
- if (H5F_addr_defined(iblock->dblk_addrs[u])) {
- /* Delete data block */
- if (H5EA__dblock_delete(hdr, iblock, iblock->dblk_addrs[u],
- hdr->sblk_info[sblk_idx].dblk_nelmts) < 0)
- H5E_THROW(H5E_CANTDELETE, "unable to delete extensible array data block")
- iblock->dblk_addrs[u] = HADDR_UNDEF;
- } /* end if */
-
- /* Advance to next data block w/in super block */
- dblk_idx++;
-
- /* Check for moving to next super block */
- if (dblk_idx >= hdr->sblk_info[sblk_idx].ndblks) {
- sblk_idx++;
- dblk_idx = 0;
- } /* end if */
- } /* end for */
-} /* end if */
-
-/* Check for index block having data block pointers (not yet) */
-if (iblock->nsblk_addrs > 0) {
- size_t u; /* Local index variable */
-
- /* Iterate over super blocks */
- for (u = 0; u < iblock->nsblk_addrs; u++) {
- /* Check for data block existing */
- if (H5F_addr_defined(iblock->sblk_addrs[u])) {
- /* Delete super block */
- if (H5EA__sblock_delete(hdr, iblock, iblock->sblk_addrs[u], (unsigned)(u + iblock->nsblks)) < 0)
- H5E_THROW(H5E_CANTDELETE, "unable to delete extensible array super block")
- iblock->sblk_addrs[u] = HADDR_UNDEF;
- } /* end if */
- } /* end for */
-} /* end if */
-
-CATCH
-/* Finished deleting index block in metadata cache */
-if (iblock &&
- H5EA__iblock_unprotect(iblock, H5AC__DIRTIED_FLAG | H5AC__DELETED_FLAG | H5AC__FREE_FILE_SPACE_FLAG) < 0)
- H5E_THROW(H5E_CANTUNPROTECT, "unable to release extensible array index block")
+ /* Local variables */
+ H5EA_iblock_t *iblock = NULL; /* Pointer to index block */
+
+ /* Sanity check */
+ HDassert(hdr);
+ HDassert(H5F_addr_defined(hdr->idx_blk_addr));
+
+ /* Protect index block */
+ if (NULL == (iblock = H5EA__iblock_protect(hdr, H5AC__NO_FLAGS_SET)))
+ H5E_THROW(H5E_CANTPROTECT, "unable to protect extensible array index block, address = %llu",
+ (unsigned long long)hdr->idx_blk_addr)
+
+ /* Check for index block having data block pointers */
+ if (iblock->ndblk_addrs > 0) {
+ unsigned sblk_idx; /* Current super block index */
+ unsigned dblk_idx; /* Current data block index w/in super block */
+ size_t u; /* Local index variable */
+
+ /* Iterate over data blocks */
+ sblk_idx = dblk_idx = 0;
+ for (u = 0; u < iblock->ndblk_addrs; u++) {
+ /* Check for data block existing */
+ if (H5F_addr_defined(iblock->dblk_addrs[u])) {
+ /* Delete data block */
+ if (H5EA__dblock_delete(hdr, iblock, iblock->dblk_addrs[u],
+ hdr->sblk_info[sblk_idx].dblk_nelmts) < 0)
+ H5E_THROW(H5E_CANTDELETE, "unable to delete extensible array data block")
+ iblock->dblk_addrs[u] = HADDR_UNDEF;
+ } /* end if */
+
+ /* Advance to next data block w/in super block */
+ dblk_idx++;
+
+ /* Check for moving to next super block */
+ if (dblk_idx >= hdr->sblk_info[sblk_idx].ndblks) {
+ sblk_idx++;
+ dblk_idx = 0;
+ } /* end if */
+ } /* end for */
+ } /* end if */
+
+ /* Check for index block having data block pointers (not yet) */
+ if (iblock->nsblk_addrs > 0) {
+ size_t u; /* Local index variable */
+
+ /* Iterate over super blocks */
+ for (u = 0; u < iblock->nsblk_addrs; u++) {
+ /* Check for data block existing */
+ if (H5F_addr_defined(iblock->sblk_addrs[u])) {
+ /* Delete super block */
+ if (H5EA__sblock_delete(hdr, iblock, iblock->sblk_addrs[u], (unsigned)(u + iblock->nsblks)) <
+ 0)
+ H5E_THROW(H5E_CANTDELETE, "unable to delete extensible array super block")
+ iblock->sblk_addrs[u] = HADDR_UNDEF;
+ } /* end if */
+ } /* end for */
+ } /* end if */
+
+ CATCH
+ /* Finished deleting index block in metadata cache */
+ if (iblock && H5EA__iblock_unprotect(iblock, H5AC__DIRTIED_FLAG | H5AC__DELETED_FLAG |
+ H5AC__FREE_FILE_SPACE_FLAG) < 0)
+ H5E_THROW(H5E_CANTUNPROTECT, "unable to release extensible array index block")
END_FUNC(PKG) /* end H5EA__iblock_delete() */
@@ -421,46 +424,46 @@ END_FUNC(PKG) /* end H5EA__iblock_delete() */
*/
BEGIN_FUNC(PKG, ERR, herr_t, SUCCEED, FAIL, H5EA__iblock_dest(H5EA_iblock_t *iblock))
-/* Sanity check */
-HDassert(iblock);
+ /* Sanity check */
+ HDassert(iblock);
-/* Check if shared header field has been initialized */
-if (iblock->hdr) {
- /* Check if we've got elements in the index block */
- if (iblock->elmts) {
- /* Free buffer for index block elements */
- HDassert(iblock->hdr->cparam.idx_blk_elmts > 0);
- iblock->elmts = H5FL_BLK_FREE(idx_blk_elmt_buf, iblock->elmts);
- } /* end if */
+ /* Check if shared header field has been initialized */
+ if (iblock->hdr) {
+ /* Check if we've got elements in the index block */
+ if (iblock->elmts) {
+ /* Free buffer for index block elements */
+ HDassert(iblock->hdr->cparam.idx_blk_elmts > 0);
+ iblock->elmts = H5FL_BLK_FREE(idx_blk_elmt_buf, iblock->elmts);
+ } /* end if */
- /* Check if we've got data block addresses in the index block */
- if (iblock->dblk_addrs) {
- /* Free buffer for index block data block addresses */
- HDassert(iblock->ndblk_addrs > 0);
- iblock->dblk_addrs = H5FL_SEQ_FREE(haddr_t, iblock->dblk_addrs);
- iblock->ndblk_addrs = 0;
- } /* end if */
+ /* Check if we've got data block addresses in the index block */
+ if (iblock->dblk_addrs) {
+ /* Free buffer for index block data block addresses */
+ HDassert(iblock->ndblk_addrs > 0);
+ iblock->dblk_addrs = H5FL_SEQ_FREE(haddr_t, iblock->dblk_addrs);
+ iblock->ndblk_addrs = 0;
+ } /* end if */
- /* Check if we've got super block addresses in the index block */
- if (iblock->sblk_addrs) {
- /* Free buffer for index block super block addresses */
- HDassert(iblock->nsblk_addrs > 0);
- iblock->sblk_addrs = H5FL_SEQ_FREE(haddr_t, iblock->sblk_addrs);
- iblock->nsblk_addrs = 0;
- } /* end if */
+ /* Check if we've got super block addresses in the index block */
+ if (iblock->sblk_addrs) {
+ /* Free buffer for index block super block addresses */
+ HDassert(iblock->nsblk_addrs > 0);
+ iblock->sblk_addrs = H5FL_SEQ_FREE(haddr_t, iblock->sblk_addrs);
+ iblock->nsblk_addrs = 0;
+ } /* end if */
- /* Decrement reference count on shared info */
- if (H5EA__hdr_decr(iblock->hdr) < 0)
- H5E_THROW(H5E_CANTDEC, "can't decrement reference count on shared array header")
- iblock->hdr = NULL;
-} /* end if */
+ /* Decrement reference count on shared info */
+ if (H5EA__hdr_decr(iblock->hdr) < 0)
+ H5E_THROW(H5E_CANTDEC, "can't decrement reference count on shared array header")
+ iblock->hdr = NULL;
+ } /* end if */
-/* Sanity check */
-HDassert(NULL == iblock->top_proxy);
+ /* Sanity check */
+ HDassert(NULL == iblock->top_proxy);
-/* Free the index block itself */
-iblock = H5FL_FREE(H5EA_iblock_t, iblock);
+ /* Free the index block itself */
+ iblock = H5FL_FREE(H5EA_iblock_t, iblock);
-CATCH
+ CATCH
END_FUNC(PKG) /* end H5EA__iblock_dest() */
diff --git a/src/H5EAint.c b/src/H5EAint.c
index f1d988b..34b52d0 100644
--- a/src/H5EAint.c
+++ b/src/H5EAint.c
@@ -82,15 +82,15 @@
BEGIN_FUNC(PKG, ERR, herr_t, SUCCEED, FAIL,
H5EA__create_flush_depend(H5AC_info_t *parent_entry, H5AC_info_t *child_entry))
-/* Sanity check */
-HDassert(parent_entry);
-HDassert(child_entry);
+ /* Sanity check */
+ HDassert(parent_entry);
+ HDassert(child_entry);
-/* Create a flush dependency between parent and child entry */
-if (H5AC_create_flush_dependency(parent_entry, child_entry) < 0)
- H5E_THROW(H5E_CANTDEPEND, "unable to create flush dependency")
+ /* Create a flush dependency between parent and child entry */
+ if (H5AC_create_flush_dependency(parent_entry, child_entry) < 0)
+ H5E_THROW(H5E_CANTDEPEND, "unable to create flush dependency")
-CATCH
+ CATCH
END_FUNC(PKG) /* end H5EA__create_flush_depend() */
@@ -109,14 +109,14 @@ END_FUNC(PKG) /* end H5EA__create_flush_depend() */
BEGIN_FUNC(PKG, ERR, herr_t, SUCCEED, FAIL,
H5EA__destroy_flush_depend(H5AC_info_t *parent_entry, H5AC_info_t *child_entry))
-/* Sanity check */
-HDassert(parent_entry);
-HDassert(child_entry);
+ /* Sanity check */
+ HDassert(parent_entry);
+ HDassert(child_entry);
-/* Destroy a flush dependency between parent and child entry */
-if (H5AC_destroy_flush_dependency(parent_entry, child_entry) < 0)
- H5E_THROW(H5E_CANTUNDEPEND, "unable to destroy flush dependency")
+ /* Destroy a flush dependency between parent and child entry */
+ if (H5AC_destroy_flush_dependency(parent_entry, child_entry) < 0)
+ H5E_THROW(H5E_CANTUNDEPEND, "unable to destroy flush dependency")
-CATCH
+ CATCH
END_FUNC(PKG) /* end H5EA__destroy_flush_depend() */
diff --git a/src/H5EAsblock.c b/src/H5EAsblock.c
index f48525f..304947b 100644
--- a/src/H5EAsblock.c
+++ b/src/H5EAsblock.c
@@ -94,66 +94,66 @@ H5FL_BLK_DEFINE(page_init);
BEGIN_FUNC(PKG, ERR, H5EA_sblock_t *, NULL, NULL,
H5EA__sblock_alloc(H5EA_hdr_t *hdr, H5EA_iblock_t *parent, unsigned sblk_idx))
-/* Local variables */
-H5EA_sblock_t *sblock = NULL; /* Extensible array super block */
+ /* Local variables */
+ H5EA_sblock_t *sblock = NULL; /* Extensible array super block */
-/* Check arguments */
-HDassert(hdr);
+ /* Check arguments */
+ HDassert(hdr);
-/* Allocate memory for the index block */
-if (NULL == (sblock = H5FL_CALLOC(H5EA_sblock_t)))
- H5E_THROW(H5E_CANTALLOC, "memory allocation failed for extensible array super block")
+ /* Allocate memory for the index block */
+ if (NULL == (sblock = H5FL_CALLOC(H5EA_sblock_t)))
+ H5E_THROW(H5E_CANTALLOC, "memory allocation failed for extensible array super block")
-/* Share common array information */
-if (H5EA__hdr_incr(hdr) < 0)
- H5E_THROW(H5E_CANTINC, "can't increment reference count on shared array header")
-sblock->hdr = hdr;
+ /* Share common array information */
+ if (H5EA__hdr_incr(hdr) < 0)
+ H5E_THROW(H5E_CANTINC, "can't increment reference count on shared array header")
+ sblock->hdr = hdr;
-/* Set non-zero internal fields */
-sblock->parent = parent;
-sblock->addr = HADDR_UNDEF;
+ /* Set non-zero internal fields */
+ sblock->parent = parent;
+ sblock->addr = HADDR_UNDEF;
-/* Compute/cache information */
-sblock->idx = sblk_idx;
-sblock->ndblks = hdr->sblk_info[sblk_idx].ndblks;
-HDassert(sblock->ndblks);
-sblock->dblk_nelmts = hdr->sblk_info[sblk_idx].dblk_nelmts;
+ /* Compute/cache information */
+ sblock->idx = sblk_idx;
+ sblock->ndblks = hdr->sblk_info[sblk_idx].ndblks;
+ HDassert(sblock->ndblks);
+ sblock->dblk_nelmts = hdr->sblk_info[sblk_idx].dblk_nelmts;
-/* Allocate buffer for data block addresses in super block */
-if (NULL == (sblock->dblk_addrs = H5FL_SEQ_MALLOC(haddr_t, sblock->ndblks)))
- H5E_THROW(H5E_CANTALLOC, "memory allocation failed for super block data block addresses")
+ /* Allocate buffer for data block addresses in super block */
+ if (NULL == (sblock->dblk_addrs = H5FL_SEQ_MALLOC(haddr_t, sblock->ndblks)))
+ H5E_THROW(H5E_CANTALLOC, "memory allocation failed for super block data block addresses")
-/* Check if # of elements in data blocks requires paging */
-if (sblock->dblk_nelmts > hdr->dblk_page_nelmts) {
- /* Compute # of pages in each data block from this super block */
- sblock->dblk_npages = sblock->dblk_nelmts / hdr->dblk_page_nelmts;
+ /* Check if # of elements in data blocks requires paging */
+ if (sblock->dblk_nelmts > hdr->dblk_page_nelmts) {
+ /* Compute # of pages in each data block from this super block */
+ sblock->dblk_npages = sblock->dblk_nelmts / hdr->dblk_page_nelmts;
- /* Sanity check that we have at least 2 pages in data block */
- HDassert(sblock->dblk_npages > 1);
+ /* Sanity check that we have at least 2 pages in data block */
+ HDassert(sblock->dblk_npages > 1);
- /* Sanity check for integer truncation */
- HDassert((sblock->dblk_npages * hdr->dblk_page_nelmts) == sblock->dblk_nelmts);
+ /* Sanity check for integer truncation */
+ HDassert((sblock->dblk_npages * hdr->dblk_page_nelmts) == sblock->dblk_nelmts);
- /* Compute size of buffer for each data block's 'page init' bitmask */
- sblock->dblk_page_init_size = ((sblock->dblk_npages) + 7) / 8;
- HDassert(sblock->dblk_page_init_size > 0);
+ /* Compute size of buffer for each data block's 'page init' bitmask */
+ sblock->dblk_page_init_size = ((sblock->dblk_npages) + 7) / 8;
+ HDassert(sblock->dblk_page_init_size > 0);
- /* Allocate buffer for all 'page init' bitmasks in super block */
- if (NULL ==
- (sblock->page_init = H5FL_BLK_CALLOC(page_init, sblock->ndblks * sblock->dblk_page_init_size)))
- H5E_THROW(H5E_CANTALLOC, "memory allocation failed for super block page init bitmask")
+ /* Allocate buffer for all 'page init' bitmasks in super block */
+ if (NULL ==
+ (sblock->page_init = H5FL_BLK_CALLOC(page_init, sblock->ndblks * sblock->dblk_page_init_size)))
+ H5E_THROW(H5E_CANTALLOC, "memory allocation failed for super block page init bitmask")
- /* Compute data block page size */
- sblock->dblk_page_size = (hdr->dblk_page_nelmts * hdr->cparam.raw_elmt_size) + H5EA_SIZEOF_CHKSUM;
-} /* end if */
+ /* Compute data block page size */
+ sblock->dblk_page_size = (hdr->dblk_page_nelmts * hdr->cparam.raw_elmt_size) + H5EA_SIZEOF_CHKSUM;
+ } /* end if */
-/* Set the return value */
-ret_value = sblock;
+ /* Set the return value */
+ ret_value = sblock;
-CATCH
-if (!ret_value)
- if (sblock && H5EA__sblock_dest(sblock) < 0)
- H5E_THROW(H5E_CANTFREE, "unable to destroy extensible array super block")
+ CATCH
+ if (!ret_value)
+ if (sblock && H5EA__sblock_dest(sblock) < 0)
+ H5E_THROW(H5E_CANTFREE, "unable to destroy extensible array super block")
END_FUNC(PKG) /* end H5EA__sblock_alloc() */
@@ -173,74 +173,74 @@ BEGIN_FUNC(PKG, ERR, haddr_t, HADDR_UNDEF, HADDR_UNDEF,
H5EA__sblock_create(H5EA_hdr_t *hdr, H5EA_iblock_t *parent, hbool_t *stats_changed,
unsigned sblk_idx))
-/* Local variables */
-H5EA_sblock_t *sblock = NULL; /* Extensible array super block */
-haddr_t sblock_addr; /* Extensible array super block address */
-haddr_t tmp_addr = HADDR_UNDEF; /* Address value to fill data block addresses with */
-hbool_t inserted = FALSE; /* Whether the header was inserted into cache */
-
-/* Sanity check */
-HDassert(hdr);
-HDassert(stats_changed);
-
-/* Allocate the super block */
-if (NULL == (sblock = H5EA__sblock_alloc(hdr, parent, sblk_idx)))
- H5E_THROW(H5E_CANTALLOC, "memory allocation failed for extensible array super block")
-
-/* Set size of super block on disk */
-sblock->size = H5EA_SBLOCK_SIZE(sblock);
-
-/* Set offset of block in array's address space */
-sblock->block_off = hdr->sblk_info[sblk_idx].start_idx;
-
-/* Allocate space for the super block on disk */
-if (HADDR_UNDEF == (sblock_addr = H5MF_alloc(hdr->f, H5FD_MEM_EARRAY_SBLOCK, (hsize_t)sblock->size)))
- H5E_THROW(H5E_CANTALLOC, "file allocation failed for extensible array super block")
-sblock->addr = sblock_addr;
-
-/* Reset data block addresses to "undefined" address value */
-H5VM_array_fill(sblock->dblk_addrs, &tmp_addr, sizeof(haddr_t), sblock->ndblks);
-
-/* Cache the new extensible array super block */
-if (H5AC_insert_entry(hdr->f, H5AC_EARRAY_SBLOCK, sblock_addr, sblock, H5AC__NO_FLAGS_SET) < 0)
- H5E_THROW(H5E_CANTINSERT, "can't add extensible array super block to cache")
-inserted = TRUE;
-
-/* Add super block as child of 'top' proxy */
-if (hdr->top_proxy) {
- if (H5AC_proxy_entry_add_child(hdr->top_proxy, hdr->f, sblock) < 0)
- H5E_THROW(H5E_CANTSET, "unable to add extensible array entry as child of array proxy")
- sblock->top_proxy = hdr->top_proxy;
-} /* end if */
-
-/* Update extensible array super block statistics */
-hdr->stats.stored.nsuper_blks++;
-hdr->stats.stored.super_blk_size += sblock->size;
-
-/* Mark the statistics as changed */
-*stats_changed = TRUE;
-
-/* Set address of super block to return */
-ret_value = sblock_addr;
-
-CATCH
-if (!H5F_addr_defined(ret_value))
- if (sblock) {
- /* Remove from cache, if inserted */
- if (inserted)
- if (H5AC_remove_entry(sblock) < 0)
- H5E_THROW(H5E_CANTREMOVE, "unable to remove extensible array super block from cache")
-
- /* Release super block's disk space */
- if (H5F_addr_defined(sblock->addr) &&
- H5MF_xfree(hdr->f, H5FD_MEM_EARRAY_SBLOCK, sblock->addr, (hsize_t)sblock->size) < 0)
- H5E_THROW(H5E_CANTFREE, "unable to release extensible array super block")
-
- /* Destroy super block */
- if (H5EA__sblock_dest(sblock) < 0)
- H5E_THROW(H5E_CANTFREE, "unable to destroy extensible array super block")
+ /* Local variables */
+ H5EA_sblock_t *sblock = NULL; /* Extensible array super block */
+ haddr_t sblock_addr; /* Extensible array super block address */
+ haddr_t tmp_addr = HADDR_UNDEF; /* Address value to fill data block addresses with */
+ hbool_t inserted = FALSE; /* Whether the header was inserted into cache */
+
+ /* Sanity check */
+ HDassert(hdr);
+ HDassert(stats_changed);
+
+ /* Allocate the super block */
+ if (NULL == (sblock = H5EA__sblock_alloc(hdr, parent, sblk_idx)))
+ H5E_THROW(H5E_CANTALLOC, "memory allocation failed for extensible array super block")
+
+ /* Set size of super block on disk */
+ sblock->size = H5EA_SBLOCK_SIZE(sblock);
+
+ /* Set offset of block in array's address space */
+ sblock->block_off = hdr->sblk_info[sblk_idx].start_idx;
+
+ /* Allocate space for the super block on disk */
+ if (HADDR_UNDEF == (sblock_addr = H5MF_alloc(hdr->f, H5FD_MEM_EARRAY_SBLOCK, (hsize_t)sblock->size)))
+ H5E_THROW(H5E_CANTALLOC, "file allocation failed for extensible array super block")
+ sblock->addr = sblock_addr;
+
+ /* Reset data block addresses to "undefined" address value */
+ H5VM_array_fill(sblock->dblk_addrs, &tmp_addr, sizeof(haddr_t), sblock->ndblks);
+
+ /* Cache the new extensible array super block */
+ if (H5AC_insert_entry(hdr->f, H5AC_EARRAY_SBLOCK, sblock_addr, sblock, H5AC__NO_FLAGS_SET) < 0)
+ H5E_THROW(H5E_CANTINSERT, "can't add extensible array super block to cache")
+ inserted = TRUE;
+
+ /* Add super block as child of 'top' proxy */
+ if (hdr->top_proxy) {
+ if (H5AC_proxy_entry_add_child(hdr->top_proxy, hdr->f, sblock) < 0)
+ H5E_THROW(H5E_CANTSET, "unable to add extensible array entry as child of array proxy")
+ sblock->top_proxy = hdr->top_proxy;
} /* end if */
+ /* Update extensible array super block statistics */
+ hdr->stats.stored.nsuper_blks++;
+ hdr->stats.stored.super_blk_size += sblock->size;
+
+ /* Mark the statistics as changed */
+ *stats_changed = TRUE;
+
+ /* Set address of super block to return */
+ ret_value = sblock_addr;
+
+ CATCH
+ if (!H5F_addr_defined(ret_value))
+ if (sblock) {
+ /* Remove from cache, if inserted */
+ if (inserted)
+ if (H5AC_remove_entry(sblock) < 0)
+ H5E_THROW(H5E_CANTREMOVE, "unable to remove extensible array super block from cache")
+
+ /* Release super block's disk space */
+ if (H5F_addr_defined(sblock->addr) &&
+ H5MF_xfree(hdr->f, H5FD_MEM_EARRAY_SBLOCK, sblock->addr, (hsize_t)sblock->size) < 0)
+ H5E_THROW(H5E_CANTFREE, "unable to release extensible array super block")
+
+ /* Destroy super block */
+ if (H5EA__sblock_dest(sblock) < 0)
+ H5E_THROW(H5E_CANTFREE, "unable to destroy extensible array super block")
+ } /* end if */
+
END_FUNC(PKG) /* end H5EA__sblock_create() */
/*-------------------------------------------------------------------------
@@ -259,47 +259,49 @@ BEGIN_FUNC(PKG, ERR, H5EA_sblock_t *, NULL, NULL,
H5EA__sblock_protect(H5EA_hdr_t *hdr, H5EA_iblock_t *parent, haddr_t sblk_addr, unsigned sblk_idx,
unsigned flags))
-/* Local variables */
-H5EA_sblock_t * sblock = NULL; /* Pointer to super block */
-H5EA_sblock_cache_ud_t udata; /* Information needed for loading super block */
+ /* Local variables */
+ H5EA_sblock_t * sblock = NULL; /* Pointer to super block */
+ H5EA_sblock_cache_ud_t udata; /* Information needed for loading super block */
-/* Sanity check */
-HDassert(hdr);
-HDassert(H5F_addr_defined(sblk_addr));
+ /* Sanity check */
+ HDassert(hdr);
+ HDassert(H5F_addr_defined(sblk_addr));
-/* only the H5AC__READ_ONLY_FLAG may be set */
-HDassert((flags & (unsigned)(~H5AC__READ_ONLY_FLAG)) == 0);
+ /* only the H5AC__READ_ONLY_FLAG may be set */
+ HDassert((flags & (unsigned)(~H5AC__READ_ONLY_FLAG)) == 0);
-/* Set up user data */
-udata.hdr = hdr;
-udata.parent = parent;
-udata.sblk_idx = sblk_idx;
-udata.sblk_addr = sblk_addr;
+ /* Set up user data */
+ udata.hdr = hdr;
+ udata.parent = parent;
+ udata.sblk_idx = sblk_idx;
+ udata.sblk_addr = sblk_addr;
-/* Protect the super block */
-if (NULL == (sblock = (H5EA_sblock_t *)H5AC_protect(hdr->f, H5AC_EARRAY_SBLOCK, sblk_addr, &udata, flags)))
- H5E_THROW(H5E_CANTPROTECT, "unable to protect extensible array super block, address = %llu",
- (unsigned long long)sblk_addr)
+ /* Protect the super block */
+ if (NULL ==
+ (sblock = (H5EA_sblock_t *)H5AC_protect(hdr->f, H5AC_EARRAY_SBLOCK, sblk_addr, &udata, flags)))
+ H5E_THROW(H5E_CANTPROTECT, "unable to protect extensible array super block, address = %llu",
+ (unsigned long long)sblk_addr)
+
+ /* Create top proxy, if it doesn't exist */
+ if (hdr->top_proxy && NULL == sblock->top_proxy) {
+ /* Add super block as child of 'top' proxy */
+ if (H5AC_proxy_entry_add_child(hdr->top_proxy, hdr->f, sblock) < 0)
+ H5E_THROW(H5E_CANTSET, "unable to add extensible array entry as child of array proxy")
+ sblock->top_proxy = hdr->top_proxy;
+ } /* end if */
-/* Create top proxy, if it doesn't exist */
-if (hdr->top_proxy && NULL == sblock->top_proxy) {
- /* Add super block as child of 'top' proxy */
- if (H5AC_proxy_entry_add_child(hdr->top_proxy, hdr->f, sblock) < 0)
- H5E_THROW(H5E_CANTSET, "unable to add extensible array entry as child of array proxy")
- sblock->top_proxy = hdr->top_proxy;
-} /* end if */
-
-/* Set return value */
-ret_value = sblock;
-
-CATCH
-/* Clean up on error */
-if (!ret_value) {
- /* Release the super block, if it was protected */
- if (sblock && H5AC_unprotect(hdr->f, H5AC_EARRAY_SBLOCK, sblock->addr, sblock, H5AC__NO_FLAGS_SET) < 0)
- H5E_THROW(H5E_CANTUNPROTECT, "unable to unprotect extensible array super block, address = %llu",
- (unsigned long long)sblock->addr)
-} /* end if */
+ /* Set return value */
+ ret_value = sblock;
+
+ CATCH
+ /* Clean up on error */
+ if (!ret_value) {
+ /* Release the super block, if it was protected */
+ if (sblock &&
+ H5AC_unprotect(hdr->f, H5AC_EARRAY_SBLOCK, sblock->addr, sblock, H5AC__NO_FLAGS_SET) < 0)
+ H5E_THROW(H5E_CANTUNPROTECT, "unable to unprotect extensible array super block, address = %llu",
+ (unsigned long long)sblock->addr)
+ } /* end if */
END_FUNC(PKG) /* end H5EA__sblock_protect() */
@@ -318,17 +320,17 @@ END_FUNC(PKG) /* end H5EA__sblock_protect() */
BEGIN_FUNC(PKG, ERR, herr_t, SUCCEED, FAIL,
H5EA__sblock_unprotect(H5EA_sblock_t *sblock, unsigned cache_flags))
-/* Local variables */
+ /* Local variables */
-/* Sanity check */
-HDassert(sblock);
+ /* Sanity check */
+ HDassert(sblock);
-/* Unprotect the super block */
-if (H5AC_unprotect(sblock->hdr->f, H5AC_EARRAY_SBLOCK, sblock->addr, sblock, cache_flags) < 0)
- H5E_THROW(H5E_CANTUNPROTECT, "unable to unprotect extensible array super block, address = %llu",
- (unsigned long long)sblock->addr)
+ /* Unprotect the super block */
+ if (H5AC_unprotect(sblock->hdr->f, H5AC_EARRAY_SBLOCK, sblock->addr, sblock, cache_flags) < 0)
+ H5E_THROW(H5E_CANTUNPROTECT, "unable to unprotect extensible array super block, address = %llu",
+ (unsigned long long)sblock->addr)
-CATCH
+ CATCH
END_FUNC(PKG) /* end H5EA__sblock_unprotect() */
@@ -347,35 +349,35 @@ END_FUNC(PKG) /* end H5EA__sblock_unprotect() */
BEGIN_FUNC(PKG, ERR, herr_t, SUCCEED, FAIL,
H5EA__sblock_delete(H5EA_hdr_t *hdr, H5EA_iblock_t *parent, haddr_t sblk_addr, unsigned sblk_idx))
-/* Local variables */
-H5EA_sblock_t *sblock = NULL; /* Pointer to super block */
-size_t u; /* Local index variable */
-
-/* Sanity check */
-HDassert(hdr);
-HDassert(H5F_addr_defined(sblk_addr));
-
-/* Protect super block */
-if (NULL == (sblock = H5EA__sblock_protect(hdr, parent, sblk_addr, sblk_idx, H5AC__NO_FLAGS_SET)))
- H5E_THROW(H5E_CANTPROTECT, "unable to protect extensible array super block, address = %llu",
- (unsigned long long)sblk_addr)
-
-/* Iterate over data blocks */
-for (u = 0; u < sblock->ndblks; u++) {
- /* Check for data block existing */
- if (H5F_addr_defined(sblock->dblk_addrs[u])) {
- /* Delete data block */
- if (H5EA__dblock_delete(hdr, sblock, sblock->dblk_addrs[u], sblock->dblk_nelmts) < 0)
- H5E_THROW(H5E_CANTDELETE, "unable to delete extensible array data block")
- sblock->dblk_addrs[u] = HADDR_UNDEF;
- } /* end if */
-} /* end for */
-
-CATCH
-/* Finished deleting super block in metadata cache */
-if (sblock &&
- H5EA__sblock_unprotect(sblock, H5AC__DIRTIED_FLAG | H5AC__DELETED_FLAG | H5AC__FREE_FILE_SPACE_FLAG) < 0)
- H5E_THROW(H5E_CANTUNPROTECT, "unable to release extensible array super block")
+ /* Local variables */
+ H5EA_sblock_t *sblock = NULL; /* Pointer to super block */
+ size_t u; /* Local index variable */
+
+ /* Sanity check */
+ HDassert(hdr);
+ HDassert(H5F_addr_defined(sblk_addr));
+
+ /* Protect super block */
+ if (NULL == (sblock = H5EA__sblock_protect(hdr, parent, sblk_addr, sblk_idx, H5AC__NO_FLAGS_SET)))
+ H5E_THROW(H5E_CANTPROTECT, "unable to protect extensible array super block, address = %llu",
+ (unsigned long long)sblk_addr)
+
+ /* Iterate over data blocks */
+ for (u = 0; u < sblock->ndblks; u++) {
+ /* Check for data block existing */
+ if (H5F_addr_defined(sblock->dblk_addrs[u])) {
+ /* Delete data block */
+ if (H5EA__dblock_delete(hdr, sblock, sblock->dblk_addrs[u], sblock->dblk_nelmts) < 0)
+ H5E_THROW(H5E_CANTDELETE, "unable to delete extensible array data block")
+ sblock->dblk_addrs[u] = HADDR_UNDEF;
+ } /* end if */
+ } /* end for */
+
+ CATCH
+ /* Finished deleting super block in metadata cache */
+ if (sblock && H5EA__sblock_unprotect(sblock, H5AC__DIRTIED_FLAG | H5AC__DELETED_FLAG |
+ H5AC__FREE_FILE_SPACE_FLAG) < 0)
+ H5E_THROW(H5E_CANTUNPROTECT, "unable to release extensible array super block")
END_FUNC(PKG) /* end H5EA__sblock_delete() */
@@ -393,34 +395,34 @@ END_FUNC(PKG) /* end H5EA__sblock_delete() */
*/
BEGIN_FUNC(PKG, ERR, herr_t, SUCCEED, FAIL, H5EA__sblock_dest(H5EA_sblock_t *sblock))
-/* Sanity check */
-HDassert(sblock);
-HDassert(!sblock->has_hdr_depend);
-
-/* Check if shared header field has been initialized */
-if (sblock->hdr) {
- /* Free buffer for super block data block addresses, if there are any */
- if (sblock->dblk_addrs)
- sblock->dblk_addrs = H5FL_SEQ_FREE(haddr_t, sblock->dblk_addrs);
-
- /* Free buffer for super block 'page init' bitmask, if there is one */
- if (sblock->page_init) {
- HDassert(sblock->dblk_npages > 0);
- sblock->page_init = H5FL_BLK_FREE(page_init, sblock->page_init);
+ /* Sanity check */
+ HDassert(sblock);
+ HDassert(!sblock->has_hdr_depend);
+
+ /* Check if shared header field has been initialized */
+ if (sblock->hdr) {
+ /* Free buffer for super block data block addresses, if there are any */
+ if (sblock->dblk_addrs)
+ sblock->dblk_addrs = H5FL_SEQ_FREE(haddr_t, sblock->dblk_addrs);
+
+ /* Free buffer for super block 'page init' bitmask, if there is one */
+ if (sblock->page_init) {
+ HDassert(sblock->dblk_npages > 0);
+ sblock->page_init = H5FL_BLK_FREE(page_init, sblock->page_init);
+ } /* end if */
+
+ /* Decrement reference count on shared info */
+ if (H5EA__hdr_decr(sblock->hdr) < 0)
+ H5E_THROW(H5E_CANTDEC, "can't decrement reference count on shared array header")
+ sblock->hdr = NULL;
} /* end if */
- /* Decrement reference count on shared info */
- if (H5EA__hdr_decr(sblock->hdr) < 0)
- H5E_THROW(H5E_CANTDEC, "can't decrement reference count on shared array header")
- sblock->hdr = NULL;
-} /* end if */
-
-/* Sanity check */
-HDassert(NULL == sblock->top_proxy);
+ /* Sanity check */
+ HDassert(NULL == sblock->top_proxy);
-/* Free the super block itself */
-sblock = H5FL_FREE(H5EA_sblock_t, sblock);
+ /* Free the super block itself */
+ sblock = H5FL_FREE(H5EA_sblock_t, sblock);
-CATCH
+ CATCH
END_FUNC(PKG) /* end H5EA__sblock_dest() */
diff --git a/src/H5EAstat.c b/src/H5EAstat.c
index 1e0197d..35a2462 100644
--- a/src/H5EAstat.c
+++ b/src/H5EAstat.c
@@ -82,15 +82,15 @@
*/
BEGIN_FUNC(PRIV, NOERR, herr_t, SUCCEED, -, H5EA_get_stats(const H5EA_t *ea, H5EA_stat_t *stats))
-/* Local variables */
+ /* Local variables */
-/*
- * Check arguments.
- */
-HDassert(ea);
-HDassert(stats);
+ /*
+ * Check arguments.
+ */
+ HDassert(ea);
+ HDassert(stats);
-/* Copy extensible array statistics */
-H5MM_memcpy(stats, &ea->hdr->stats, sizeof(ea->hdr->stats));
+ /* Copy extensible array statistics */
+ H5MM_memcpy(stats, &ea->hdr->stats, sizeof(ea->hdr->stats));
END_FUNC(PRIV) /* end H5EA_get_stats() */
diff --git a/src/H5EAtest.c b/src/H5EAtest.c
index 9442cd9..0a85729 100644
--- a/src/H5EAtest.c
+++ b/src/H5EAtest.c
@@ -121,24 +121,24 @@ H5FL_DEFINE_STATIC(H5EA__ctx_cb_t);
*/
BEGIN_FUNC(STATIC, ERR, void *, NULL, NULL, H5EA__test_crt_context(void *_udata))
-/* Local variables */
-H5EA__test_ctx_t *ctx; /* Context for callbacks */
-H5EA__ctx_cb_t * udata = (H5EA__ctx_cb_t *)_udata; /* User data for context */
+ /* Local variables */
+ H5EA__test_ctx_t *ctx; /* Context for callbacks */
+ H5EA__ctx_cb_t * udata = (H5EA__ctx_cb_t *)_udata; /* User data for context */
-/* Sanity checks */
+ /* Sanity checks */
-/* Allocate new context structure */
-if (NULL == (ctx = H5FL_MALLOC(H5EA__test_ctx_t)))
- H5E_THROW(H5E_CANTALLOC, "can't allocate extensible array client callback context")
+ /* Allocate new context structure */
+ if (NULL == (ctx = H5FL_MALLOC(H5EA__test_ctx_t)))
+ H5E_THROW(H5E_CANTALLOC, "can't allocate extensible array client callback context")
-/* Initialize the context */
-ctx->bogus = H5EA__TEST_BOGUS_VAL;
-ctx->cb = udata;
+ /* Initialize the context */
+ ctx->bogus = H5EA__TEST_BOGUS_VAL;
+ ctx->cb = udata;
-/* Set return value */
-ret_value = ctx;
+ /* Set return value */
+ ret_value = ctx;
-CATCH
+ CATCH
END_FUNC(STATIC) /* end H5EA__test_crt_context() */
@@ -157,14 +157,14 @@ END_FUNC(STATIC) /* end H5EA__test_crt_context() */
*/
BEGIN_FUNC(STATIC, NOERR, herr_t, SUCCEED, -, H5EA__test_dst_context(void *_ctx))
-/* Local variables */
-H5EA__test_ctx_t *ctx = (H5EA__test_ctx_t *)_ctx; /* Callback context to destroy */
+ /* Local variables */
+ H5EA__test_ctx_t *ctx = (H5EA__test_ctx_t *)_ctx; /* Callback context to destroy */
-/* Sanity checks */
-HDassert(H5EA__TEST_BOGUS_VAL == ctx->bogus);
+ /* Sanity checks */
+ HDassert(H5EA__TEST_BOGUS_VAL == ctx->bogus);
-/* Release context structure */
-ctx = H5FL_FREE(H5EA__test_ctx_t, ctx);
+ /* Release context structure */
+ ctx = H5FL_FREE(H5EA__test_ctx_t, ctx);
END_FUNC(STATIC) /* end H5EA__test_dst_context() */
@@ -183,14 +183,14 @@ END_FUNC(STATIC) /* end H5EA__test_dst_context() */
*/
BEGIN_FUNC(STATIC, NOERR, herr_t, SUCCEED, -, H5EA__test_fill(void *nat_blk, size_t nelmts))
-/* Local variables */
-uint64_t fill_val = H5EA_TEST_FILL; /* Value to fill elements with */
+ /* Local variables */
+ uint64_t fill_val = H5EA_TEST_FILL; /* Value to fill elements with */
-/* Sanity checks */
-HDassert(nat_blk);
-HDassert(nelmts);
+ /* Sanity checks */
+ HDassert(nat_blk);
+ HDassert(nelmts);
-H5VM_array_fill(nat_blk, &fill_val, sizeof(uint64_t), nelmts);
+ H5VM_array_fill(nat_blk, &fill_val, sizeof(uint64_t), nelmts);
END_FUNC(STATIC) /* end H5EA__test_fill() */
@@ -210,36 +210,36 @@ END_FUNC(STATIC) /* end H5EA__test_fill() */
BEGIN_FUNC(STATIC, ERR, herr_t, SUCCEED, FAIL,
H5EA__test_encode(void *raw, const void *_elmt, size_t nelmts, void *_ctx))
-/* Local variables */
-H5EA__test_ctx_t *ctx = (H5EA__test_ctx_t *)_ctx; /* Callback context to destroy */
-const uint64_t * elmt = (const uint64_t *)_elmt; /* Convenience pointer to native elements */
+ /* Local variables */
+ H5EA__test_ctx_t *ctx = (H5EA__test_ctx_t *)_ctx; /* Callback context to destroy */
+ const uint64_t * elmt = (const uint64_t *)_elmt; /* Convenience pointer to native elements */
-/* Sanity checks */
-HDassert(raw);
-HDassert(elmt);
-HDassert(nelmts);
-HDassert(H5EA__TEST_BOGUS_VAL == ctx->bogus);
+ /* Sanity checks */
+ HDassert(raw);
+ HDassert(elmt);
+ HDassert(nelmts);
+ HDassert(H5EA__TEST_BOGUS_VAL == ctx->bogus);
-/* Check for callback action */
-if (ctx->cb) {
- if ((*ctx->cb->encode)(elmt, nelmts, ctx->cb->udata) < 0)
- H5E_THROW(H5E_BADVALUE, "extensible array testing callback action failed")
-} /* end if */
+ /* Check for callback action */
+ if (ctx->cb) {
+ if ((*ctx->cb->encode)(elmt, nelmts, ctx->cb->udata) < 0)
+ H5E_THROW(H5E_BADVALUE, "extensible array testing callback action failed")
+ } /* end if */
-/* Encode native elements into raw elements */
-while (nelmts) {
- /* Encode element */
- /* (advances 'raw' pointer) */
- UINT64ENCODE(raw, *elmt);
+ /* Encode native elements into raw elements */
+ while (nelmts) {
+ /* Encode element */
+ /* (advances 'raw' pointer) */
+ UINT64ENCODE(raw, *elmt);
- /* Advance native element pointer */
- elmt++;
+ /* Advance native element pointer */
+ elmt++;
- /* Decrement # of elements to encode */
- nelmts--;
-} /* end while */
+ /* Decrement # of elements to encode */
+ nelmts--;
+ } /* end while */
-CATCH
+ CATCH
END_FUNC(STATIC) /* end H5EA__test_encode() */
@@ -261,29 +261,29 @@ BEGIN_FUNC(STATIC, NOERR, herr_t, SUCCEED, -,
/* Local variables */
#ifndef NDEBUG
-H5EA__test_ctx_t *ctx = (H5EA__test_ctx_t *)_ctx; /* Callback context to destroy */
-#endif /* NDEBUG */
-uint64_t * elmt = (uint64_t *)_elmt; /* Convenience pointer to native elements */
-const uint8_t *raw = (const uint8_t *)_raw; /* Convenience pointer to raw elements */
-
-/* Sanity checks */
-HDassert(raw);
-HDassert(elmt);
-HDassert(nelmts);
-HDassert(H5EA__TEST_BOGUS_VAL == ctx->bogus);
-
-/* Decode raw elements into native elements */
-while (nelmts) {
- /* Decode element */
- /* (advances 'raw' pointer) */
- UINT64DECODE(raw, *elmt);
-
- /* Advance native element pointer */
- elmt++;
-
- /* Decrement # of elements to decode */
- nelmts--;
-} /* end while */
+ H5EA__test_ctx_t *ctx = (H5EA__test_ctx_t *)_ctx; /* Callback context to destroy */
+#endif /* NDEBUG */
+ uint64_t * elmt = (uint64_t *)_elmt; /* Convenience pointer to native elements */
+ const uint8_t *raw = (const uint8_t *)_raw; /* Convenience pointer to raw elements */
+
+ /* Sanity checks */
+ HDassert(raw);
+ HDassert(elmt);
+ HDassert(nelmts);
+ HDassert(H5EA__TEST_BOGUS_VAL == ctx->bogus);
+
+ /* Decode raw elements into native elements */
+ while (nelmts) {
+ /* Decode element */
+ /* (advances 'raw' pointer) */
+ UINT64DECODE(raw, *elmt);
+
+ /* Advance native element pointer */
+ elmt++;
+
+ /* Decrement # of elements to decode */
+ nelmts--;
+ } /* end while */
END_FUNC(STATIC) /* end H5EA__test_decode() */
@@ -303,17 +303,17 @@ END_FUNC(STATIC) /* end H5EA__test_decode() */
BEGIN_FUNC(STATIC, NOERR, herr_t, SUCCEED, -,
H5EA__test_debug(FILE *stream, int indent, int fwidth, hsize_t idx, const void *elmt))
-/* Local variables */
-char temp_str[128]; /* Temporary string, for formatting */
+ /* Local variables */
+ char temp_str[128]; /* Temporary string, for formatting */
-/* Sanity checks */
-HDassert(stream);
-HDassert(elmt);
+ /* Sanity checks */
+ HDassert(stream);
+ HDassert(elmt);
-/* Print element */
-HDsprintf(temp_str, "Element #%llu:", (unsigned long long)idx);
-HDfprintf(stream, "%*s%-*s %llu\n", indent, "", fwidth, temp_str,
- (unsigned long long)*(const uint64_t *)elmt);
+ /* Print element */
+ HDsprintf(temp_str, "Element #%llu:", (unsigned long long)idx);
+ HDfprintf(stream, "%*s%-*s %llu\n", indent, "", fwidth, temp_str,
+ (unsigned long long)*(const uint64_t *)elmt);
END_FUNC(STATIC) /* end H5EA__test_debug() */
@@ -332,17 +332,17 @@ END_FUNC(STATIC) /* end H5EA__test_debug() */
BEGIN_FUNC(STATIC, ERR, void *, NULL, NULL,
H5EA__test_crt_dbg_context(H5F_t H5_ATTR_UNUSED *f, haddr_t H5_ATTR_UNUSED obj_addr))
-/* Local variables */
-H5EA__ctx_cb_t *ctx; /* Context for callbacks */
+ /* Local variables */
+ H5EA__ctx_cb_t *ctx; /* Context for callbacks */
-/* Allocate new context structure */
-if (NULL == (ctx = H5FL_MALLOC(H5EA__ctx_cb_t)))
- H5E_THROW(H5E_CANTALLOC, "can't allocate extensible array client callback context")
+ /* Allocate new context structure */
+ if (NULL == (ctx = H5FL_MALLOC(H5EA__ctx_cb_t)))
+ H5E_THROW(H5E_CANTALLOC, "can't allocate extensible array client callback context")
-/* Set return value */
-ret_value = ctx;
+ /* Set return value */
+ ret_value = ctx;
-CATCH
+ CATCH
END_FUNC(STATIC) /* end H5EA__test_crt_dbg_context() */
@@ -360,13 +360,13 @@ END_FUNC(STATIC) /* end H5EA__test_crt_dbg_context() */
*/
BEGIN_FUNC(STATIC, NOERR, herr_t, SUCCEED, -, H5EA__test_dst_dbg_context(void *_ctx))
-/* Local variables */
-H5EA__ctx_cb_t *ctx = (H5EA__ctx_cb_t *)_ctx; /* Callback context to destroy */
+ /* Local variables */
+ H5EA__ctx_cb_t *ctx = (H5EA__ctx_cb_t *)_ctx; /* Callback context to destroy */
-HDassert(_ctx);
+ HDassert(_ctx);
-/* Release context structure */
-ctx = H5FL_FREE(H5EA__ctx_cb_t, ctx);
+ /* Release context structure */
+ ctx = H5FL_FREE(H5EA__ctx_cb_t, ctx);
END_FUNC(STATIC) /* end H5EA__test_dst_dbg_context() */
@@ -385,17 +385,17 @@ END_FUNC(STATIC) /* end H5EA__test_dst_dbg_context() */
*/
BEGIN_FUNC(PKG, NOERR, herr_t, SUCCEED, -, H5EA__get_cparam_test(const H5EA_t *ea, H5EA_create_t *cparam))
-/* Check arguments. */
-HDassert(ea);
-HDassert(cparam);
+ /* Check arguments. */
+ HDassert(ea);
+ HDassert(cparam);
-/* Get extensible array creation parameters */
-cparam->raw_elmt_size = ea->hdr->cparam.raw_elmt_size;
-cparam->max_nelmts_bits = ea->hdr->cparam.max_nelmts_bits;
-cparam->idx_blk_elmts = ea->hdr->cparam.idx_blk_elmts;
-cparam->sup_blk_min_data_ptrs = ea->hdr->cparam.sup_blk_min_data_ptrs;
-cparam->data_blk_min_elmts = ea->hdr->cparam.data_blk_min_elmts;
-cparam->max_dblk_page_nelmts_bits = ea->hdr->cparam.max_dblk_page_nelmts_bits;
+ /* Get extensible array creation parameters */
+ cparam->raw_elmt_size = ea->hdr->cparam.raw_elmt_size;
+ cparam->max_nelmts_bits = ea->hdr->cparam.max_nelmts_bits;
+ cparam->idx_blk_elmts = ea->hdr->cparam.idx_blk_elmts;
+ cparam->sup_blk_min_data_ptrs = ea->hdr->cparam.sup_blk_min_data_ptrs;
+ cparam->data_blk_min_elmts = ea->hdr->cparam.data_blk_min_elmts;
+ cparam->max_dblk_page_nelmts_bits = ea->hdr->cparam.max_dblk_page_nelmts_bits;
END_FUNC(PKG) /* end H5EA__get_cparam_test() */
@@ -415,36 +415,36 @@ END_FUNC(PKG) /* end H5EA__get_cparam_test() */
BEGIN_FUNC(PKG, ERRCATCH, int, 0, -,
H5EA__cmp_cparam_test(const H5EA_create_t *cparam1, const H5EA_create_t *cparam2))
-/* Check arguments. */
-HDassert(cparam1);
-HDassert(cparam2);
-
-/* Compare creation parameters for array */
-if (cparam1->raw_elmt_size < cparam2->raw_elmt_size)
- H5_LEAVE(-1)
-else if (cparam1->raw_elmt_size > cparam2->raw_elmt_size)
- H5_LEAVE(1)
-if (cparam1->max_nelmts_bits < cparam2->max_nelmts_bits)
- H5_LEAVE(-1)
-else if (cparam1->max_nelmts_bits > cparam2->max_nelmts_bits)
- H5_LEAVE(1)
-if (cparam1->idx_blk_elmts < cparam2->idx_blk_elmts)
- H5_LEAVE(-1)
-else if (cparam1->idx_blk_elmts > cparam2->idx_blk_elmts)
- H5_LEAVE(1)
-if (cparam1->sup_blk_min_data_ptrs < cparam2->sup_blk_min_data_ptrs)
- H5_LEAVE(-1)
-else if (cparam1->sup_blk_min_data_ptrs > cparam2->sup_blk_min_data_ptrs)
- H5_LEAVE(1)
-if (cparam1->data_blk_min_elmts < cparam2->data_blk_min_elmts)
- H5_LEAVE(-1)
-else if (cparam1->data_blk_min_elmts > cparam2->data_blk_min_elmts)
- H5_LEAVE(1)
-if (cparam1->max_dblk_page_nelmts_bits < cparam2->max_dblk_page_nelmts_bits)
- H5_LEAVE(-1)
-else if (cparam1->max_dblk_page_nelmts_bits > cparam2->max_dblk_page_nelmts_bits)
- H5_LEAVE(1)
-
-CATCH
+ /* Check arguments. */
+ HDassert(cparam1);
+ HDassert(cparam2);
+
+ /* Compare creation parameters for array */
+ if (cparam1->raw_elmt_size < cparam2->raw_elmt_size)
+ H5_LEAVE(-1)
+ else if (cparam1->raw_elmt_size > cparam2->raw_elmt_size)
+ H5_LEAVE(1)
+ if (cparam1->max_nelmts_bits < cparam2->max_nelmts_bits)
+ H5_LEAVE(-1)
+ else if (cparam1->max_nelmts_bits > cparam2->max_nelmts_bits)
+ H5_LEAVE(1)
+ if (cparam1->idx_blk_elmts < cparam2->idx_blk_elmts)
+ H5_LEAVE(-1)
+ else if (cparam1->idx_blk_elmts > cparam2->idx_blk_elmts)
+ H5_LEAVE(1)
+ if (cparam1->sup_blk_min_data_ptrs < cparam2->sup_blk_min_data_ptrs)
+ H5_LEAVE(-1)
+ else if (cparam1->sup_blk_min_data_ptrs > cparam2->sup_blk_min_data_ptrs)
+ H5_LEAVE(1)
+ if (cparam1->data_blk_min_elmts < cparam2->data_blk_min_elmts)
+ H5_LEAVE(-1)
+ else if (cparam1->data_blk_min_elmts > cparam2->data_blk_min_elmts)
+ H5_LEAVE(1)
+ if (cparam1->max_dblk_page_nelmts_bits < cparam2->max_dblk_page_nelmts_bits)
+ H5_LEAVE(-1)
+ else if (cparam1->max_dblk_page_nelmts_bits > cparam2->max_dblk_page_nelmts_bits)
+ H5_LEAVE(1)
+
+ CATCH
END_FUNC(PKG) /* end H5EA__cmp_cparam_test() */
diff --git a/src/H5Edeprec.c b/src/H5Edeprec.c
index e3ed7da..d3eef5d 100644
--- a/src/H5Edeprec.c
+++ b/src/H5Edeprec.c
@@ -35,7 +35,6 @@
/* Headers */
/***********/
#include "H5private.h" /* Generic Functions */
-#include "H5CXprivate.h" /* API Contexts */
#include "H5Epkg.h" /* Error handling */
#include "H5Iprivate.h" /* IDs */
#include "H5MMprivate.h" /* Memory management */
@@ -187,7 +186,7 @@ done:
* same parameter as the old function, in contrary to
* H5Epush2.
*
- * Return: SUCCEED/FAIL
+ * Return: Non-negative on success/Negative on failure
*
* Programmer: Raymond Lu
* Tuesday, Sep 16, 2003
@@ -217,7 +216,7 @@ done:
* Purpose: This function is for backward compatibility.
* Clears the error stack for the specified error stack.
*
- * Return: SUCCEED/FAIL
+ * Return: Non-negative on success/Negative on failure
*
* Programmer: Raymond Lu
* Wednesday, July 16, 2003
@@ -250,7 +249,7 @@ done:
* prints error messages. Users are encouraged to write there
* own more specific error handlers.
*
- * Return: SUCCEED/FAIL
+ * Return: Non-negative on success/Negative on failure
*
* Programmer: Raymond Lu
* Sep 16, 2003
@@ -286,7 +285,7 @@ done:
* Walks the error stack for the current thread and calls some
* function for each error along the way.
*
- * Return: SUCCEED/FAIL
+ * Return: Non-negative on success/Negative on failure
*
* Programmer: Raymond Lu
* Sep 16, 2003
@@ -327,7 +326,7 @@ done:
* Either (or both) arguments may be null in which case the
* value is not returned.
*
- * Return: SUCCEED/FAIL
+ * Return: Non-negative on success/Negative on failure
*
* Programmer: Raymond Lu
* Sep 16, 2003
@@ -380,7 +379,7 @@ done:
* Automatic stack traversal is always in the H5E_WALK_DOWNWARD
* direction.
*
- * Return: SUCCEED/FAIL
+ * Return: Non-negative on success/Negative on failure
*
* Programmer: Raymond Lu
* Sep 16, 2003
diff --git a/src/H5Eint.c b/src/H5Eint.c
index 78b28de..c743ddb 100644
--- a/src/H5Eint.c
+++ b/src/H5Eint.c
@@ -650,11 +650,7 @@ herr_t
H5E_printf_stack(H5E_t *estack, const char *file, const char *func, unsigned line, hid_t cls_id, hid_t maj_id,
hid_t min_id, const char *fmt, ...)
{
- va_list ap; /* Varargs info */
-#ifndef H5_HAVE_VASPRINTF
- int tmp_len; /* Current size of description buffer */
- int desc_len; /* Actual length of description when formatted */
-#endif /* H5_HAVE_VASPRINTF */
+ va_list ap; /* Varargs info */
char * tmp = NULL; /* Buffer to place formatted description in */
hbool_t va_started = FALSE; /* Whether the variable argument list is open */
herr_t ret_value = SUCCEED; /* Return value */
@@ -683,31 +679,9 @@ H5E_printf_stack(H5E_t *estack, const char *file, const char *func, unsigned lin
HDva_start(ap, fmt);
va_started = TRUE;
-#ifdef H5_HAVE_VASPRINTF
/* Use the vasprintf() routine, since it does what we're trying to do below */
if (HDvasprintf(&tmp, fmt, ap) < 0)
HGOTO_DONE(FAIL)
-#else /* H5_HAVE_VASPRINTF */
- /* Allocate space for the formatted description buffer */
- tmp_len = 128;
- if (NULL == (tmp = H5MM_malloc((size_t)tmp_len)))
- HGOTO_DONE(FAIL)
-
- /* If the description doesn't fit into the initial buffer size, allocate more space and try again */
- while ((desc_len = HDvsnprintf(tmp, (size_t)tmp_len, fmt, ap)) > (tmp_len - 1)) {
- /* shutdown & restart the va_list */
- HDva_end(ap);
- HDva_start(ap, fmt);
-
- /* Release the previous description, it's too small */
- H5MM_xfree(tmp);
-
- /* Allocate a description of the appropriate length */
- tmp_len = desc_len + 1;
- if (NULL == (tmp = H5MM_malloc((size_t)tmp_len)))
- HGOTO_DONE(FAIL)
- } /* end while */
-#endif /* H5_HAVE_VASPRINTF */
/* Push the error on the stack */
if (H5E__push_stack(estack, file, func, line, cls_id, maj_id, min_id, tmp) < 0)
@@ -716,16 +690,11 @@ H5E_printf_stack(H5E_t *estack, const char *file, const char *func, unsigned lin
done:
if (va_started)
HDva_end(ap);
-#ifdef H5_HAVE_VASPRINTF
/* Memory was allocated with HDvasprintf so it needs to be freed
* with HDfree
*/
if (tmp)
HDfree(tmp);
-#else /* H5_HAVE_VASPRINTF */
- if (tmp)
- H5MM_xfree(tmp);
-#endif /* H5_HAVE_VASPRINTF */
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5E_printf_stack() */
diff --git a/src/H5F.c b/src/H5F.c
index 7cafd82..3c6df2b 100644
--- a/src/H5F.c
+++ b/src/H5F.c
@@ -68,8 +68,6 @@ typedef struct {
/* Local Prototypes */
/********************/
-static herr_t H5F__close_cb(H5VL_object_t *file_vol_obj);
-
/* Callback for getting object counts in a file */
static int H5F__get_all_count_cb(void H5_ATTR_UNUSED *obj_ptr, hid_t H5_ATTR_UNUSED obj_id, void *key);
@@ -80,9 +78,6 @@ static int H5F__get_all_ids_cb(void H5_ATTR_UNUSED *obj_ptr, hid_t obj_id, void
/* Package Variables */
/*********************/
-/* Package initialization variable */
-hbool_t H5_PKG_INIT_VAR = FALSE;
-
/*****************************/
/* Library Private Variables */
/*****************************/
@@ -97,146 +92,6 @@ H5FL_EXTERN(H5VL_t);
/* Declare a free list to manage the H5VL_object_t struct */
H5FL_EXTERN(H5VL_object_t);
-/* File ID class */
-static const H5I_class_t H5I_FILE_CLS[1] = {{
- H5I_FILE, /* ID class value */
- 0, /* Class flags */
- 0, /* # of reserved IDs for class */
- (H5I_free_t)H5F__close_cb /* Callback routine for closing objects of this class */
-}};
-
-/*-------------------------------------------------------------------------
- * Function: H5F_init
- *
- * Purpose: Initialize the interface from some other layer.
- *
- * Return: Success: non-negative
- *
- * Failure: negative
- *-------------------------------------------------------------------------
- */
-herr_t
-H5F_init(void)
-{
- herr_t ret_value = SUCCEED; /* Return value */
-
- FUNC_ENTER_NOAPI(FAIL)
- /* FUNC_ENTER() does all the work */
-
-done:
- FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5F_init() */
-
-/*--------------------------------------------------------------------------
-NAME
- H5F__init_package -- Initialize interface-specific information
-USAGE
- herr_t H5F__init_package()
-RETURNS
- Non-negative on success/Negative on failure
-DESCRIPTION
- Initializes any interface-specific data or routines.
-
---------------------------------------------------------------------------*/
-herr_t
-H5F__init_package(void)
-{
- herr_t ret_value = SUCCEED; /* Return value */
-
- FUNC_ENTER_PACKAGE
-
- /*
- * Initialize the atom group for the file IDs.
- */
- if (H5I_register_type(H5I_FILE_CLS) < 0)
- HGOTO_ERROR(H5E_FILE, H5E_CANTINIT, FAIL, "unable to initialize interface")
-
-done:
- FUNC_LEAVE_NOAPI(ret_value)
-} /* H5F__init_package() */
-
-/*-------------------------------------------------------------------------
- * Function: H5F_term_package
- *
- * Purpose: Terminate this interface: free all memory and reset global
- * variables to their initial values. Release all ID groups
- * associated with this interface.
- *
- * Return: Success: Positive if anything was done that might
- * have affected other interfaces;
- * zero otherwise.
- *
- * Failure: Never fails
- *
- *-------------------------------------------------------------------------
- */
-int
-H5F_term_package(void)
-{
- int n = 0;
-
- FUNC_ENTER_NOAPI_NOINIT_NOERR
-
- if (H5_PKG_INIT_VAR) {
- if (H5I_nmembers(H5I_FILE) > 0) {
- (void)H5I_clear_type(H5I_FILE, FALSE, FALSE);
- n++; /*H5I*/
- } /* end if */
- else {
- /* Make certain we've cleaned up all the shared file objects */
- H5F_sfile_assert_num(0);
-
- /* Destroy the file object id group */
- n += (H5I_dec_type_ref(H5I_FILE) > 0);
-
- /* Mark closed */
- if (0 == n)
- H5_PKG_INIT_VAR = FALSE;
- } /* end else */
- } /* end if */
-
- FUNC_LEAVE_NOAPI(n)
-} /* end H5F_term_package() */
-
-/*-------------------------------------------------------------------------
- * Function: H5F__close_cb
- *
- * Purpose: Closes a file or causes the close operation to be pended.
- * This function is called from the API and gets called
- * by H5Fclose->H5I_dec_ref->H5F__close_cb when H5I_dec_ref()
- * decrements the file ID reference count to zero. The file ID
- * is removed from the H5I_FILE group by H5I_dec_ref() just
- * before H5F__close_cb() is called. If there are open object
- * headers then the close is pended by moving the file to the
- * H5I_FILE_CLOSING ID group (the f->closing contains the ID
- * assigned to file).
- *
- * Return: SUCCEED/FAIL
- *
- *-------------------------------------------------------------------------
- */
-static herr_t
-H5F__close_cb(H5VL_object_t *file_vol_obj)
-{
- herr_t ret_value = SUCCEED; /* Return value */
-
- FUNC_ENTER_STATIC
-
- /* Sanity check */
- HDassert(file_vol_obj);
-
- /* Close the file */
- if (H5VL_file_close(file_vol_obj, H5P_DATASET_XFER_DEFAULT, H5_REQUEST_NULL) < 0)
- HGOTO_ERROR(H5E_FILE, H5E_CANTCLOSEFILE, FAIL, "unable to close file")
-
- /* Free the VOL object */
- if (H5VL_free_object(file_vol_obj) < 0)
- HGOTO_ERROR(H5E_FILE, H5E_CANTDEC, FAIL, "unable to free VOL object")
-
-done:
- FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5F__close_cb() */
-
/*-------------------------------------------------------------------------
* Function: H5Fget_create_plist
*
diff --git a/src/H5FA.c b/src/H5FA.c
index 6ca13a8..39b5376 100644
--- a/src/H5FA.c
+++ b/src/H5FA.c
@@ -108,50 +108,50 @@ H5FL_BLK_DEFINE(fa_native_elmt);
BEGIN_FUNC(STATIC, ERR, H5FA_t *, NULL, NULL,
H5FA__new(H5F_t *f, haddr_t fa_addr, hbool_t from_open, void *ctx_udata))
-/* Local variables */
-H5FA_t * fa = NULL; /* Pointer to new fixed array */
-H5FA_hdr_t *hdr = NULL; /* The fixed array header information */
+ /* Local variables */
+ H5FA_t * fa = NULL; /* Pointer to new fixed array */
+ H5FA_hdr_t *hdr = NULL; /* The fixed array header information */
-/*
- * Check arguments.
- */
-HDassert(f);
-HDassert(H5F_addr_defined(fa_addr));
+ /*
+ * Check arguments.
+ */
+ HDassert(f);
+ HDassert(H5F_addr_defined(fa_addr));
-/* Allocate fixed array wrapper */
-if (NULL == (fa = H5FL_CALLOC(H5FA_t)))
- H5E_THROW(H5E_CANTALLOC, "memory allocation failed for fixed array info")
+ /* Allocate fixed array wrapper */
+ if (NULL == (fa = H5FL_CALLOC(H5FA_t)))
+ H5E_THROW(H5E_CANTALLOC, "memory allocation failed for fixed array info")
-/* Lock the array header into memory */
-if (NULL == (hdr = H5FA__hdr_protect(f, fa_addr, ctx_udata, H5AC__READ_ONLY_FLAG)))
- H5E_THROW(H5E_CANTPROTECT, "unable to load fixed array header")
+ /* Lock the array header into memory */
+ if (NULL == (hdr = H5FA__hdr_protect(f, fa_addr, ctx_udata, H5AC__READ_ONLY_FLAG)))
+ H5E_THROW(H5E_CANTPROTECT, "unable to load fixed array header")
-/* Check for pending array deletion */
-if (from_open && hdr->pending_delete)
- H5E_THROW(H5E_CANTOPENOBJ, "can't open fixed array pending deletion")
+ /* Check for pending array deletion */
+ if (from_open && hdr->pending_delete)
+ H5E_THROW(H5E_CANTOPENOBJ, "can't open fixed array pending deletion")
-/* Point fixed array wrapper at header and bump it's ref count */
-fa->hdr = hdr;
-if (H5FA__hdr_incr(fa->hdr) < 0)
- H5E_THROW(H5E_CANTINC, "can't increment reference count on shared array header")
+ /* Point fixed array wrapper at header and bump it's ref count */
+ fa->hdr = hdr;
+ if (H5FA__hdr_incr(fa->hdr) < 0)
+ H5E_THROW(H5E_CANTINC, "can't increment reference count on shared array header")
-/* Increment # of files using this array header */
-if (H5FA__hdr_fuse_incr(fa->hdr) < 0)
- H5E_THROW(H5E_CANTINC, "can't increment file reference count on shared array header")
+ /* Increment # of files using this array header */
+ if (H5FA__hdr_fuse_incr(fa->hdr) < 0)
+ H5E_THROW(H5E_CANTINC, "can't increment file reference count on shared array header")
-/* Set file pointer for this array open context */
-fa->f = f;
+ /* Set file pointer for this array open context */
+ fa->f = f;
-/* Set the return value */
-ret_value = fa;
+ /* Set the return value */
+ ret_value = fa;
-CATCH
+ CATCH
-if (hdr && H5FA__hdr_unprotect(hdr, H5AC__NO_FLAGS_SET) < 0)
- H5E_THROW(H5E_CANTUNPROTECT, "unable to release fixed array header")
-if (!ret_value)
- if (fa && H5FA_close(fa) < 0)
- H5E_THROW(H5E_CLOSEERROR, "unable to close fixed array")
+ if (hdr && H5FA__hdr_unprotect(hdr, H5AC__NO_FLAGS_SET) < 0)
+ H5E_THROW(H5E_CANTUNPROTECT, "unable to release fixed array header")
+ if (!ret_value)
+ if (fa && H5FA_close(fa) < 0)
+ H5E_THROW(H5E_CLOSEERROR, "unable to close fixed array")
END_FUNC(STATIC) /* end H5FA__new() */
@@ -171,35 +171,35 @@ END_FUNC(STATIC) /* end H5FA__new() */
BEGIN_FUNC(PRIV, ERR, H5FA_t *, NULL, NULL,
H5FA_create(H5F_t *f, const H5FA_create_t *cparam, void *ctx_udata))
-/* Local variables */
-H5FA_t *fa = NULL; /* Pointer to new fixed array */
-haddr_t fa_addr; /* Fixed array header address */
+ /* Local variables */
+ H5FA_t *fa = NULL; /* Pointer to new fixed array */
+ haddr_t fa_addr; /* Fixed array header address */
-/*
- * Check arguments.
- */
-HDassert(f);
-HDassert(cparam);
+ /*
+ * Check arguments.
+ */
+ HDassert(f);
+ HDassert(cparam);
-/* H5FA interface sanity check */
-HDcompile_assert(H5FA_NUM_CLS_ID == NELMTS(H5FA_client_class_g));
+ /* H5FA interface sanity check */
+ HDcompile_assert(H5FA_NUM_CLS_ID == NELMTS(H5FA_client_class_g));
-/* Create fixed array header */
-if (HADDR_UNDEF == (fa_addr = H5FA__hdr_create(f, cparam, ctx_udata)))
- H5E_THROW(H5E_CANTINIT, "can't create fixed array header")
+ /* Create fixed array header */
+ if (HADDR_UNDEF == (fa_addr = H5FA__hdr_create(f, cparam, ctx_udata)))
+ H5E_THROW(H5E_CANTINIT, "can't create fixed array header")
-/* Allocate and initialize new fixed array wrapper */
-if (NULL == (fa = H5FA__new(f, fa_addr, FALSE, ctx_udata)))
- H5E_THROW(H5E_CANTINIT, "allocation and/or initialization failed for fixed array wrapper")
+ /* Allocate and initialize new fixed array wrapper */
+ if (NULL == (fa = H5FA__new(f, fa_addr, FALSE, ctx_udata)))
+ H5E_THROW(H5E_CANTINIT, "allocation and/or initialization failed for fixed array wrapper")
-/* Set the return value */
-ret_value = fa;
+ /* Set the return value */
+ ret_value = fa;
-CATCH
+ CATCH
-if (!ret_value)
- if (fa && H5FA_close(fa) < 0)
- H5E_THROW(H5E_CLOSEERROR, "unable to close fixed array")
+ if (!ret_value)
+ if (fa && H5FA_close(fa) < 0)
+ H5E_THROW(H5E_CLOSEERROR, "unable to close fixed array")
END_FUNC(PRIV) /* end H5FA_create() */
@@ -218,27 +218,27 @@ END_FUNC(PRIV) /* end H5FA_create() */
*/
BEGIN_FUNC(PRIV, ERR, H5FA_t *, NULL, NULL, H5FA_open(H5F_t *f, haddr_t fa_addr, void *ctx_udata))
-/* Local variables */
-H5FA_t *fa = NULL; /* Pointer to new fixed array wrapper */
+ /* Local variables */
+ H5FA_t *fa = NULL; /* Pointer to new fixed array wrapper */
-/*
- * Check arguments.
- */
-HDassert(f);
-HDassert(H5F_addr_defined(fa_addr));
+ /*
+ * Check arguments.
+ */
+ HDassert(f);
+ HDassert(H5F_addr_defined(fa_addr));
-/* Allocate and initialize new fixed array wrapper */
-if (NULL == (fa = H5FA__new(f, fa_addr, TRUE, ctx_udata)))
- H5E_THROW(H5E_CANTINIT, "allocation and/or initialization failed for fixed array wrapper")
+ /* Allocate and initialize new fixed array wrapper */
+ if (NULL == (fa = H5FA__new(f, fa_addr, TRUE, ctx_udata)))
+ H5E_THROW(H5E_CANTINIT, "allocation and/or initialization failed for fixed array wrapper")
-/* Set the return value */
-ret_value = fa;
+ /* Set the return value */
+ ret_value = fa;
-CATCH
+ CATCH
-if (!ret_value)
- if (fa && H5FA_close(fa) < 0)
- H5E_THROW(H5E_CLOSEERROR, "unable to close fixed array")
+ if (!ret_value)
+ if (fa && H5FA_close(fa) < 0)
+ H5E_THROW(H5E_CLOSEERROR, "unable to close fixed array")
END_FUNC(PRIV) /* end H5FA_open() */
@@ -256,16 +256,16 @@ END_FUNC(PRIV) /* end H5FA_open() */
*/
BEGIN_FUNC(PRIV, NOERR, herr_t, SUCCEED, -, H5FA_get_nelmts(const H5FA_t *fa, hsize_t *nelmts))
-/* Local variables */
+ /* Local variables */
-/*
- * Check arguments.
- */
-HDassert(fa);
-HDassert(nelmts);
+ /*
+ * Check arguments.
+ */
+ HDassert(fa);
+ HDassert(nelmts);
-/* Retrieve the current number of elements in the fixed array */
-*nelmts = fa->hdr->stats.nelmts;
+ /* Retrieve the current number of elements in the fixed array */
+ *nelmts = fa->hdr->stats.nelmts;
END_FUNC(PRIV) /* end H5FA_get_nelmts() */
@@ -283,17 +283,17 @@ END_FUNC(PRIV) /* end H5FA_get_nelmts() */
*/
BEGIN_FUNC(PRIV, NOERR, herr_t, SUCCEED, -, H5FA_get_addr(const H5FA_t *fa, haddr_t *addr))
-/* Local variables */
+ /* Local variables */
-/*
- * Check arguments.
- */
-HDassert(fa);
-HDassert(fa->hdr);
-HDassert(addr);
+ /*
+ * Check arguments.
+ */
+ HDassert(fa);
+ HDassert(fa->hdr);
+ HDassert(addr);
-/* Retrieve the address of the fixed array's header */
-*addr = fa->hdr->addr;
+ /* Retrieve the address of the fixed array's header */
+ *addr = fa->hdr->addr;
END_FUNC(PRIV) /* end H5FA_get_addr() */
@@ -311,99 +311,100 @@ END_FUNC(PRIV) /* end H5FA_get_addr() */
*/
BEGIN_FUNC(PRIV, ERR, herr_t, SUCCEED, FAIL, H5FA_set(const H5FA_t *fa, hsize_t idx, const void *elmt))
-/* Local variables */
-H5FA_hdr_t * hdr = fa->hdr; /* Header for fixed array */
-H5FA_dblock_t * dblock = NULL; /* Pointer to fixed array Data block */
-H5FA_dblk_page_t *dblk_page = NULL; /* Pointer to fixed array Data block page */
-unsigned dblock_cache_flags = H5AC__NO_FLAGS_SET; /* Flags to unprotecting fixed array Data block */
-unsigned dblk_page_cache_flags = H5AC__NO_FLAGS_SET; /* Flags to unprotecting FIxed Array Data block page */
-hbool_t hdr_dirty = FALSE; /* Whether header information changed */
+ /* Local variables */
+ H5FA_hdr_t * hdr = fa->hdr; /* Header for fixed array */
+ H5FA_dblock_t * dblock = NULL; /* Pointer to fixed array Data block */
+ H5FA_dblk_page_t *dblk_page = NULL; /* Pointer to fixed array Data block page */
+ unsigned dblock_cache_flags = H5AC__NO_FLAGS_SET; /* Flags to unprotecting fixed array Data block */
+ unsigned dblk_page_cache_flags =
+ H5AC__NO_FLAGS_SET; /* Flags to unprotecting FIxed Array Data block page */
+ hbool_t hdr_dirty = FALSE; /* Whether header information changed */
+
+ /*
+ * Check arguments.
+ */
+ HDassert(fa);
+ HDassert(fa->hdr);
-/*
- * Check arguments.
- */
-HDassert(fa);
-HDassert(fa->hdr);
-
-/* Set the shared array header's file context for this operation */
-hdr->f = fa->f;
-
-/* Check if we need to create the fixed array data block */
-if (!H5F_addr_defined(hdr->dblk_addr)) {
- /* Create the data block */
- hdr->dblk_addr = H5FA__dblock_create(hdr, &hdr_dirty);
- if (!H5F_addr_defined(hdr->dblk_addr))
- H5E_THROW(H5E_CANTCREATE, "unable to create fixed array data block")
-} /* end if */
-
-HDassert(idx < hdr->cparam.nelmts);
-
-/* Protect data block */
-if (NULL == (dblock = H5FA__dblock_protect(hdr, hdr->dblk_addr, H5AC__NO_FLAGS_SET)))
- H5E_THROW(H5E_CANTPROTECT, "unable to protect fixed array data block, address = %llu",
- (unsigned long long)hdr->dblk_addr)
-
-/* Check for paging data block */
-if (!dblock->npages) {
- /* Set element in data block */
- H5MM_memcpy(((uint8_t *)dblock->elmts) + (hdr->cparam.cls->nat_elmt_size * idx), elmt,
- hdr->cparam.cls->nat_elmt_size);
- dblock_cache_flags |= H5AC__DIRTIED_FLAG;
-} /* end if */
-else { /* paging */
- size_t page_idx; /* Index of page within data block */
- size_t dblk_page_nelmts; /* # of elements in a data block page */
- size_t elmt_idx; /* Element index within the page */
- haddr_t dblk_page_addr; /* Address of data block page */
-
- /* Compute the page & element index */
- page_idx = (size_t)(idx / dblock->dblk_page_nelmts);
- elmt_idx = (size_t)(idx % dblock->dblk_page_nelmts);
-
- /* Get the address of the data block page */
- dblk_page_addr =
- dblock->addr + H5FA_DBLOCK_PREFIX_SIZE(dblock) + ((hsize_t)page_idx * dblock->dblk_page_size);
-
- /* Check for using last page, to set the number of elements on the page */
- if ((page_idx + 1) == dblock->npages)
- dblk_page_nelmts = dblock->last_page_nelmts;
- else
- dblk_page_nelmts = dblock->dblk_page_nelmts;
-
- /* Check if the page has been created yet */
- if (!H5VM_bit_get(dblock->dblk_page_init, page_idx)) {
- /* Create the data block page */
- if (H5FA__dblk_page_create(hdr, dblk_page_addr, dblk_page_nelmts) < 0)
- H5E_THROW(H5E_CANTCREATE, "unable to create data block page")
-
- /* Mark data block page as initialized in data block */
- H5VM_bit_set(dblock->dblk_page_init, page_idx, TRUE);
- dblock_cache_flags |= H5AC__DIRTIED_FLAG;
+ /* Set the shared array header's file context for this operation */
+ hdr->f = fa->f;
+
+ /* Check if we need to create the fixed array data block */
+ if (!H5F_addr_defined(hdr->dblk_addr)) {
+ /* Create the data block */
+ hdr->dblk_addr = H5FA__dblock_create(hdr, &hdr_dirty);
+ if (!H5F_addr_defined(hdr->dblk_addr))
+ H5E_THROW(H5E_CANTCREATE, "unable to create fixed array data block")
} /* end if */
- /* Protect the data block page */
- if (NULL ==
- (dblk_page = H5FA__dblk_page_protect(hdr, dblk_page_addr, dblk_page_nelmts, H5AC__NO_FLAGS_SET)))
- H5E_THROW(H5E_CANTPROTECT, "unable to protect fixed array data block page, address = %llu",
- (unsigned long long)dblk_page_addr)
-
- /* Set the element in the data block page */
- H5MM_memcpy(((uint8_t *)dblk_page->elmts) + (hdr->cparam.cls->nat_elmt_size * elmt_idx), elmt,
- hdr->cparam.cls->nat_elmt_size);
- dblk_page_cache_flags |= H5AC__DIRTIED_FLAG;
-} /* end else */
-
-CATCH
-/* Check for header modified */
-if (hdr_dirty)
- if (H5FA__hdr_modified(hdr) < 0)
- H5E_THROW(H5E_CANTMARKDIRTY, "unable to mark fixed array header as modified")
-
-/* Release resources */
-if (dblock && H5FA__dblock_unprotect(dblock, dblock_cache_flags) < 0)
- H5E_THROW(H5E_CANTUNPROTECT, "unable to release fixed array data block")
-if (dblk_page && H5FA__dblk_page_unprotect(dblk_page, dblk_page_cache_flags) < 0)
- H5E_THROW(H5E_CANTUNPROTECT, "unable to release fixed array data block page")
+ HDassert(idx < hdr->cparam.nelmts);
+
+ /* Protect data block */
+ if (NULL == (dblock = H5FA__dblock_protect(hdr, hdr->dblk_addr, H5AC__NO_FLAGS_SET)))
+ H5E_THROW(H5E_CANTPROTECT, "unable to protect fixed array data block, address = %llu",
+ (unsigned long long)hdr->dblk_addr)
+
+ /* Check for paging data block */
+ if (!dblock->npages) {
+ /* Set element in data block */
+ H5MM_memcpy(((uint8_t *)dblock->elmts) + (hdr->cparam.cls->nat_elmt_size * idx), elmt,
+ hdr->cparam.cls->nat_elmt_size);
+ dblock_cache_flags |= H5AC__DIRTIED_FLAG;
+ } /* end if */
+ else { /* paging */
+ size_t page_idx; /* Index of page within data block */
+ size_t dblk_page_nelmts; /* # of elements in a data block page */
+ size_t elmt_idx; /* Element index within the page */
+ haddr_t dblk_page_addr; /* Address of data block page */
+
+ /* Compute the page & element index */
+ page_idx = (size_t)(idx / dblock->dblk_page_nelmts);
+ elmt_idx = (size_t)(idx % dblock->dblk_page_nelmts);
+
+ /* Get the address of the data block page */
+ dblk_page_addr =
+ dblock->addr + H5FA_DBLOCK_PREFIX_SIZE(dblock) + ((hsize_t)page_idx * dblock->dblk_page_size);
+
+ /* Check for using last page, to set the number of elements on the page */
+ if ((page_idx + 1) == dblock->npages)
+ dblk_page_nelmts = dblock->last_page_nelmts;
+ else
+ dblk_page_nelmts = dblock->dblk_page_nelmts;
+
+ /* Check if the page has been created yet */
+ if (!H5VM_bit_get(dblock->dblk_page_init, page_idx)) {
+ /* Create the data block page */
+ if (H5FA__dblk_page_create(hdr, dblk_page_addr, dblk_page_nelmts) < 0)
+ H5E_THROW(H5E_CANTCREATE, "unable to create data block page")
+
+ /* Mark data block page as initialized in data block */
+ H5VM_bit_set(dblock->dblk_page_init, page_idx, TRUE);
+ dblock_cache_flags |= H5AC__DIRTIED_FLAG;
+ } /* end if */
+
+ /* Protect the data block page */
+ if (NULL ==
+ (dblk_page = H5FA__dblk_page_protect(hdr, dblk_page_addr, dblk_page_nelmts, H5AC__NO_FLAGS_SET)))
+ H5E_THROW(H5E_CANTPROTECT, "unable to protect fixed array data block page, address = %llu",
+ (unsigned long long)dblk_page_addr)
+
+ /* Set the element in the data block page */
+ H5MM_memcpy(((uint8_t *)dblk_page->elmts) + (hdr->cparam.cls->nat_elmt_size * elmt_idx), elmt,
+ hdr->cparam.cls->nat_elmt_size);
+ dblk_page_cache_flags |= H5AC__DIRTIED_FLAG;
+ } /* end else */
+
+ CATCH
+ /* Check for header modified */
+ if (hdr_dirty)
+ if (H5FA__hdr_modified(hdr) < 0)
+ H5E_THROW(H5E_CANTMARKDIRTY, "unable to mark fixed array header as modified")
+
+ /* Release resources */
+ if (dblock && H5FA__dblock_unprotect(dblock, dblock_cache_flags) < 0)
+ H5E_THROW(H5E_CANTUNPROTECT, "unable to release fixed array data block")
+ if (dblk_page && H5FA__dblk_page_unprotect(dblk_page, dblk_page_cache_flags) < 0)
+ H5E_THROW(H5E_CANTUNPROTECT, "unable to release fixed array data block page")
END_FUNC(PRIV) /* end H5FA_set() */
@@ -421,89 +422,90 @@ END_FUNC(PRIV) /* end H5FA_set() */
*/
BEGIN_FUNC(PRIV, ERR, herr_t, SUCCEED, FAIL, H5FA_get(const H5FA_t *fa, hsize_t idx, void *elmt))
-/* Local variables */
-H5FA_hdr_t * hdr = fa->hdr; /* Header for FA */
-H5FA_dblock_t * dblock = NULL; /* Pointer to data block for FA */
-H5FA_dblk_page_t *dblk_page = NULL; /* Pointer to data block page for FA */
-
-/*
- * Check arguments.
- */
-HDassert(fa);
-HDassert(fa->hdr);
-
-/* Set the shared array header's file context for this operation */
-hdr->f = fa->f;
-
-/* Check if the fixed array data block has been allocated on disk yet */
-if (!H5F_addr_defined(hdr->dblk_addr)) {
- /* Call the class's 'fill' callback */
- if ((hdr->cparam.cls->fill)(elmt, (size_t)1) < 0)
- H5E_THROW(H5E_CANTSET, "can't set element to class's fill value")
-} /* end if */
-else {
- /* Get the data block */
- HDassert(H5F_addr_defined(hdr->dblk_addr));
- if (NULL == (dblock = H5FA__dblock_protect(hdr, hdr->dblk_addr, H5AC__READ_ONLY_FLAG)))
- H5E_THROW(H5E_CANTPROTECT, "unable to protect fixed array data block, address = %llu",
- (unsigned long long)hdr->dblk_addr)
-
- /* Check for paged data block */
- if (!dblock->npages)
- /* Retrieve element from data block */
- H5MM_memcpy(elmt, ((uint8_t *)dblock->elmts) + (hdr->cparam.cls->nat_elmt_size * idx),
- hdr->cparam.cls->nat_elmt_size);
- else { /* paging */
- size_t page_idx; /* Index of page within data block */
+ /* Local variables */
+ H5FA_hdr_t * hdr = fa->hdr; /* Header for FA */
+ H5FA_dblock_t * dblock = NULL; /* Pointer to data block for FA */
+ H5FA_dblk_page_t *dblk_page = NULL; /* Pointer to data block page for FA */
- /* Compute the page index */
- page_idx = (size_t)(idx / dblock->dblk_page_nelmts);
+ /*
+ * Check arguments.
+ */
+ HDassert(fa);
+ HDassert(fa->hdr);
- /* Check if the page is defined yet */
- if (!H5VM_bit_get(dblock->dblk_page_init, page_idx)) {
- /* Call the class's 'fill' callback */
- if ((hdr->cparam.cls->fill)(elmt, (size_t)1) < 0)
- H5E_THROW(H5E_CANTSET, "can't set element to class's fill value")
-
- /* We've retrieved the value, leave now */
- H5_LEAVE(SUCCEED)
- } /* end if */
- else { /* get the page */
- size_t dblk_page_nelmts; /* # of elements in a data block page */
- size_t elmt_idx; /* Element index within the page */
- haddr_t dblk_page_addr; /* Address of data block page */
-
- /* Compute the element index */
- elmt_idx = (size_t)(idx % dblock->dblk_page_nelmts);
-
- /* Compute the address of the data block */
- dblk_page_addr =
- dblock->addr + H5FA_DBLOCK_PREFIX_SIZE(dblock) + ((hsize_t)page_idx * dblock->dblk_page_size);
-
- /* Check for using last page, to set the number of elements on the page */
- if ((page_idx + 1) == dblock->npages)
- dblk_page_nelmts = dblock->last_page_nelmts;
- else
- dblk_page_nelmts = dblock->dblk_page_nelmts;
-
- /* Protect the data block page */
- if (NULL == (dblk_page = H5FA__dblk_page_protect(hdr, dblk_page_addr, dblk_page_nelmts,
- H5AC__READ_ONLY_FLAG)))
- H5E_THROW(H5E_CANTPROTECT, "unable to protect fixed array data block page, address = %llu",
- (unsigned long long)dblk_page_addr)
+ /* Set the shared array header's file context for this operation */
+ hdr->f = fa->f;
+ /* Check if the fixed array data block has been allocated on disk yet */
+ if (!H5F_addr_defined(hdr->dblk_addr)) {
+ /* Call the class's 'fill' callback */
+ if ((hdr->cparam.cls->fill)(elmt, (size_t)1) < 0)
+ H5E_THROW(H5E_CANTSET, "can't set element to class's fill value")
+ } /* end if */
+ else {
+ /* Get the data block */
+ HDassert(H5F_addr_defined(hdr->dblk_addr));
+ if (NULL == (dblock = H5FA__dblock_protect(hdr, hdr->dblk_addr, H5AC__READ_ONLY_FLAG)))
+ H5E_THROW(H5E_CANTPROTECT, "unable to protect fixed array data block, address = %llu",
+ (unsigned long long)hdr->dblk_addr)
+
+ /* Check for paged data block */
+ if (!dblock->npages)
/* Retrieve element from data block */
- H5MM_memcpy(elmt, ((uint8_t *)dblk_page->elmts) + (hdr->cparam.cls->nat_elmt_size * elmt_idx),
+ H5MM_memcpy(elmt, ((uint8_t *)dblock->elmts) + (hdr->cparam.cls->nat_elmt_size * idx),
hdr->cparam.cls->nat_elmt_size);
- } /* end else */
- } /* end else */
-} /* end else */
-
-CATCH
-if (dblock && H5FA__dblock_unprotect(dblock, H5AC__NO_FLAGS_SET) < 0)
- H5E_THROW(H5E_CANTUNPROTECT, "unable to release fixed array data block")
-if (dblk_page && H5FA__dblk_page_unprotect(dblk_page, H5AC__NO_FLAGS_SET) < 0)
- H5E_THROW(H5E_CANTUNPROTECT, "unable to release fixed array data block page")
+ else { /* paging */
+ size_t page_idx; /* Index of page within data block */
+
+ /* Compute the page index */
+ page_idx = (size_t)(idx / dblock->dblk_page_nelmts);
+
+ /* Check if the page is defined yet */
+ if (!H5VM_bit_get(dblock->dblk_page_init, page_idx)) {
+ /* Call the class's 'fill' callback */
+ if ((hdr->cparam.cls->fill)(elmt, (size_t)1) < 0)
+ H5E_THROW(H5E_CANTSET, "can't set element to class's fill value")
+
+ /* We've retrieved the value, leave now */
+ H5_LEAVE(SUCCEED)
+ } /* end if */
+ else { /* get the page */
+ size_t dblk_page_nelmts; /* # of elements in a data block page */
+ size_t elmt_idx; /* Element index within the page */
+ haddr_t dblk_page_addr; /* Address of data block page */
+
+ /* Compute the element index */
+ elmt_idx = (size_t)(idx % dblock->dblk_page_nelmts);
+
+ /* Compute the address of the data block */
+ dblk_page_addr = dblock->addr + H5FA_DBLOCK_PREFIX_SIZE(dblock) +
+ ((hsize_t)page_idx * dblock->dblk_page_size);
+
+ /* Check for using last page, to set the number of elements on the page */
+ if ((page_idx + 1) == dblock->npages)
+ dblk_page_nelmts = dblock->last_page_nelmts;
+ else
+ dblk_page_nelmts = dblock->dblk_page_nelmts;
+
+ /* Protect the data block page */
+ if (NULL == (dblk_page = H5FA__dblk_page_protect(hdr, dblk_page_addr, dblk_page_nelmts,
+ H5AC__READ_ONLY_FLAG)))
+ H5E_THROW(H5E_CANTPROTECT,
+ "unable to protect fixed array data block page, address = %llu",
+ (unsigned long long)dblk_page_addr)
+
+ /* Retrieve element from data block */
+ H5MM_memcpy(elmt, ((uint8_t *)dblk_page->elmts) + (hdr->cparam.cls->nat_elmt_size * elmt_idx),
+ hdr->cparam.cls->nat_elmt_size);
+ } /* end else */
+ } /* end else */
+ } /* end else */
+
+ CATCH
+ if (dblock && H5FA__dblock_unprotect(dblock, H5AC__NO_FLAGS_SET) < 0)
+ H5E_THROW(H5E_CANTUNPROTECT, "unable to release fixed array data block")
+ if (dblk_page && H5FA__dblk_page_unprotect(dblk_page, H5AC__NO_FLAGS_SET) < 0)
+ H5E_THROW(H5E_CANTUNPROTECT, "unable to release fixed array data block page")
END_FUNC(PRIV) /* end H5FA_get() */
@@ -521,86 +523,87 @@ END_FUNC(PRIV) /* end H5FA_get() */
*/
BEGIN_FUNC(PRIV, ERR, herr_t, SUCCEED, FAIL, H5FA_close(H5FA_t *fa))
-/* Local variables */
-hbool_t pending_delete = FALSE; /* Whether the array is pending deletion */
-haddr_t fa_addr = HADDR_UNDEF; /* Address of array (for deletion) */
+ /* Local variables */
+ hbool_t pending_delete = FALSE; /* Whether the array is pending deletion */
+ haddr_t fa_addr = HADDR_UNDEF; /* Address of array (for deletion) */
-/*
- * Check arguments.
- */
-HDassert(fa);
+ /*
+ * Check arguments.
+ */
+ HDassert(fa);
-/* Close the header, if it was set */
-if (fa->hdr) {
- /* Decrement file reference & check if this is the last open fixed array using the shared array header */
- if (0 == H5FA__hdr_fuse_decr(fa->hdr)) {
- /* Set the shared array header's file context for this operation */
- fa->hdr->f = fa->f;
-
- /* Shut down anything that can't be put in the header's 'flush' callback */
+ /* Close the header, if it was set */
+ if (fa->hdr) {
+ /* Decrement file reference & check if this is the last open fixed array using the shared array header
+ */
+ if (0 == H5FA__hdr_fuse_decr(fa->hdr)) {
+ /* Set the shared array header's file context for this operation */
+ fa->hdr->f = fa->f;
+
+ /* Shut down anything that can't be put in the header's 'flush' callback */
+
+ /* Check for pending array deletion */
+ if (fa->hdr->pending_delete) {
+ /* Set local info, so array deletion can occur after decrementing the
+ * header's ref count
+ */
+ pending_delete = TRUE;
+ fa_addr = fa->hdr->addr;
+ } /* end if */
+ } /* end if */
/* Check for pending array deletion */
- if (fa->hdr->pending_delete) {
- /* Set local info, so array deletion can occur after decrementing the
- * header's ref count
- */
- pending_delete = TRUE;
- fa_addr = fa->hdr->addr;
- } /* end if */
- } /* end if */
-
- /* Check for pending array deletion */
- if (pending_delete) {
- H5FA_hdr_t *hdr; /* Another pointer to fixed array header */
+ if (pending_delete) {
+ H5FA_hdr_t *hdr; /* Another pointer to fixed array header */
#ifndef NDEBUG
- {
- unsigned hdr_status = 0; /* Header's status in the metadata cache */
-
- /* Check the header's status in the metadata cache */
- if (H5AC_get_entry_status(fa->f, fa_addr, &hdr_status) < 0)
- H5E_THROW(H5E_CANTGET, "unable to check metadata cache status for fixed array header")
-
- /* Sanity checks on header */
- HDassert(hdr_status & H5AC_ES__IN_CACHE);
- HDassert(hdr_status & H5AC_ES__IS_PINNED);
- HDassert(!(hdr_status & H5AC_ES__IS_PROTECTED));
- }
+ {
+ unsigned hdr_status = 0; /* Header's status in the metadata cache */
+
+ /* Check the header's status in the metadata cache */
+ if (H5AC_get_entry_status(fa->f, fa_addr, &hdr_status) < 0)
+ H5E_THROW(H5E_CANTGET, "unable to check metadata cache status for fixed array header")
+
+ /* Sanity checks on header */
+ HDassert(hdr_status & H5AC_ES__IN_CACHE);
+ HDassert(hdr_status & H5AC_ES__IS_PINNED);
+ HDassert(!(hdr_status & H5AC_ES__IS_PROTECTED));
+ }
#endif /* NDEBUG */
- /* Lock the array header into memory */
- /* (OK to pass in NULL for callback context, since we know the header must be in the cache) */
- if (NULL == (hdr = H5FA__hdr_protect(fa->f, fa_addr, NULL, H5AC__NO_FLAGS_SET)))
- H5E_THROW(H5E_CANTLOAD, "unable to load fixed array header")
+ /* Lock the array header into memory */
+ /* (OK to pass in NULL for callback context, since we know the header must be in the cache) */
+ if (NULL == (hdr = H5FA__hdr_protect(fa->f, fa_addr, NULL, H5AC__NO_FLAGS_SET)))
+ H5E_THROW(H5E_CANTLOAD, "unable to load fixed array header")
- /* Set the shared array header's file context for this operation */
- hdr->f = fa->f;
+ /* Set the shared array header's file context for this operation */
+ hdr->f = fa->f;
- /* Decrement the reference count on the array header */
- /* (don't put in H5FA_hdr_fuse_decr() as the array header may be evicted
- * immediately -QAK)
- */
- if (H5FA__hdr_decr(fa->hdr) < 0)
- H5E_THROW(H5E_CANTDEC, "can't decrement reference count on shared array header")
+ /* Decrement the reference count on the array header */
+ /* (don't put in H5FA_hdr_fuse_decr() as the array header may be evicted
+ * immediately -QAK)
+ */
+ if (H5FA__hdr_decr(fa->hdr) < 0)
+ H5E_THROW(H5E_CANTDEC, "can't decrement reference count on shared array header")
- /* Delete array, starting with header (unprotects header) */
- if (H5FA__hdr_delete(hdr) < 0)
- H5E_THROW(H5E_CANTDELETE, "unable to delete fixed array")
- } /* end if */
- else {
- /* Decrement the reference count on the array header */
- /* (don't put in H5FA_hdr_fuse_decr() as the array header may be evicted
- * immediately -QAK)
- */
- if (H5FA__hdr_decr(fa->hdr) < 0)
- H5E_THROW(H5E_CANTDEC, "can't decrement reference count on shared array header")
- } /* end else */
-} /* end if */
+ /* Delete array, starting with header (unprotects header) */
+ if (H5FA__hdr_delete(hdr) < 0)
+ H5E_THROW(H5E_CANTDELETE, "unable to delete fixed array")
+ } /* end if */
+ else {
+ /* Decrement the reference count on the array header */
+ /* (don't put in H5FA_hdr_fuse_decr() as the array header may be evicted
+ * immediately -QAK)
+ */
+ if (H5FA__hdr_decr(fa->hdr) < 0)
+ H5E_THROW(H5E_CANTDEC, "can't decrement reference count on shared array header")
+ } /* end else */
+ } /* end if */
-/* Release the fixed array wrapper */
-fa = H5FL_FREE(H5FA_t, fa);
+ /* Release the fixed array wrapper */
+ fa = H5FL_FREE(H5FA_t, fa);
-CATCH
+ CATCH
END_FUNC(PRIV) /* end H5FA_close() */
@@ -618,38 +621,38 @@ END_FUNC(PRIV) /* end H5FA_close() */
*/
BEGIN_FUNC(PRIV, ERR, herr_t, SUCCEED, FAIL, H5FA_delete(H5F_t *f, haddr_t fa_addr, void *ctx_udata))
-/* Local variables */
-H5FA_hdr_t *hdr = NULL; /* The fixed array header information */
+ /* Local variables */
+ H5FA_hdr_t *hdr = NULL; /* The fixed array header information */
-/*
- * Check arguments.
- */
-HDassert(f);
-HDassert(H5F_addr_defined(fa_addr));
-
-/* Lock the array header into memory */
-if (NULL == (hdr = H5FA__hdr_protect(f, fa_addr, ctx_udata, H5AC__NO_FLAGS_SET)))
- H5E_THROW(H5E_CANTPROTECT, "unable to protect fixed array header, address = %llu",
- (unsigned long long)fa_addr)
-
-/* Check for files using shared array header */
-if (hdr->file_rc)
- hdr->pending_delete = TRUE;
-else {
- /* Set the shared array header's file context for this operation */
- hdr->f = f;
+ /*
+ * Check arguments.
+ */
+ HDassert(f);
+ HDassert(H5F_addr_defined(fa_addr));
- /* Delete array now, starting with header (unprotects header) */
- if (H5FA__hdr_delete(hdr) < 0)
- H5E_THROW(H5E_CANTDELETE, "unable to delete fixed array")
- hdr = NULL;
-} /* end if */
+ /* Lock the array header into memory */
+ if (NULL == (hdr = H5FA__hdr_protect(f, fa_addr, ctx_udata, H5AC__NO_FLAGS_SET)))
+ H5E_THROW(H5E_CANTPROTECT, "unable to protect fixed array header, address = %llu",
+ (unsigned long long)fa_addr)
-CATCH
+ /* Check for files using shared array header */
+ if (hdr->file_rc)
+ hdr->pending_delete = TRUE;
+ else {
+ /* Set the shared array header's file context for this operation */
+ hdr->f = f;
-/* Unprotect the header, if an error occurred */
-if (hdr && H5FA__hdr_unprotect(hdr, H5AC__NO_FLAGS_SET) < 0)
- H5E_THROW(H5E_CANTUNPROTECT, "unable to release fixed array header")
+ /* Delete array now, starting with header (unprotects header) */
+ if (H5FA__hdr_delete(hdr) < 0)
+ H5E_THROW(H5E_CANTDELETE, "unable to delete fixed array")
+ hdr = NULL;
+ } /* end if */
+
+ CATCH
+
+ /* Unprotect the header, if an error occurred */
+ if (hdr && H5FA__hdr_unprotect(hdr, H5AC__NO_FLAGS_SET) < 0)
+ H5E_THROW(H5E_CANTUNPROTECT, "unable to release fixed array header")
END_FUNC(PRIV) /* end H5FA_delete() */
@@ -671,39 +674,39 @@ END_FUNC(PRIV) /* end H5FA_delete() */
BEGIN_FUNC(PRIV, ERR, int, H5_ITER_CONT, H5_ITER_ERROR,
H5FA_iterate(H5FA_t *fa, H5FA_operator_t op, void *udata))
-/* Local variables */
-uint8_t *elmt = NULL;
-hsize_t u;
-int cb_ret = H5_ITER_CONT; /* Return value from callback */
-
-/*
- * Check arguments.
- */
-HDassert(fa);
-HDassert(op);
-HDassert(udata);
-
-/* Allocate space for a native array element */
-if (NULL == (elmt = H5FL_BLK_MALLOC(fa_native_elmt, fa->hdr->cparam.cls->nat_elmt_size)))
- H5E_THROW(H5E_CANTALLOC, "memory allocation failed for fixed array element")
-
-/* Iterate over all elements in array */
-for (u = 0; u < fa->hdr->stats.nelmts && cb_ret == H5_ITER_CONT; u++) {
- /* Get array element */
- if (H5FA_get(fa, u, elmt) < 0)
- H5E_THROW(H5E_CANTGET, "unable to delete fixed array")
-
- /* Make callback */
- if ((cb_ret = (*op)(u, elmt, udata)) < 0) {
- H5E_PRINTF(H5E_BADITER, "iterator function failed");
- H5_LEAVE(cb_ret)
- } /* end if */
-} /* end for */
+ /* Local variables */
+ uint8_t *elmt = NULL;
+ hsize_t u;
+ int cb_ret = H5_ITER_CONT; /* Return value from callback */
+
+ /*
+ * Check arguments.
+ */
+ HDassert(fa);
+ HDassert(op);
+ HDassert(udata);
+
+ /* Allocate space for a native array element */
+ if (NULL == (elmt = H5FL_BLK_MALLOC(fa_native_elmt, fa->hdr->cparam.cls->nat_elmt_size)))
+ H5E_THROW(H5E_CANTALLOC, "memory allocation failed for fixed array element")
+
+ /* Iterate over all elements in array */
+ for (u = 0; u < fa->hdr->stats.nelmts && cb_ret == H5_ITER_CONT; u++) {
+ /* Get array element */
+ if (H5FA_get(fa, u, elmt) < 0)
+ H5E_THROW(H5E_CANTGET, "unable to delete fixed array")
+
+ /* Make callback */
+ if ((cb_ret = (*op)(u, elmt, udata)) < 0) {
+ H5E_PRINTF(H5E_BADITER, "iterator function failed");
+ H5_LEAVE(cb_ret)
+ } /* end if */
+ } /* end for */
-CATCH
+ CATCH
-if (elmt)
- elmt = H5FL_BLK_FREE(fa_native_elmt, elmt);
+ if (elmt)
+ elmt = H5FL_BLK_FREE(fa_native_elmt, elmt);
END_FUNC(PRIV) /* end H5FA_iterate() */
@@ -722,35 +725,35 @@ END_FUNC(PRIV) /* end H5FA_iterate() */
*/
BEGIN_FUNC(PRIV, ERR, herr_t, SUCCEED, FAIL, H5FA_depend(H5FA_t *fa, H5AC_proxy_entry_t *parent))
-/* Local variables */
-H5FA_hdr_t *hdr = fa->hdr; /* Header for FA */
-
-/*
- * Check arguments.
- */
-HDassert(fa);
-HDassert(hdr);
-HDassert(parent);
-
-/*
- * Check to see if a flush dependency between the fixed array
- * and another data structure in the file has already been set up.
- * If it hasn't, do so now.
- */
-if (NULL == hdr->parent) {
- /* Sanity check */
- HDassert(hdr->top_proxy);
+ /* Local variables */
+ H5FA_hdr_t *hdr = fa->hdr; /* Header for FA */
+
+ /*
+ * Check arguments.
+ */
+ HDassert(fa);
+ HDassert(hdr);
+ HDassert(parent);
+
+ /*
+ * Check to see if a flush dependency between the fixed array
+ * and another data structure in the file has already been set up.
+ * If it hasn't, do so now.
+ */
+ if (NULL == hdr->parent) {
+ /* Sanity check */
+ HDassert(hdr->top_proxy);
- /* Set the shared array header's file context for this operation */
- hdr->f = fa->f;
+ /* Set the shared array header's file context for this operation */
+ hdr->f = fa->f;
- /* Add the fixed array as a child of the parent (proxy) */
- if (H5AC_proxy_entry_add_child(parent, hdr->f, hdr->top_proxy) < 0)
- H5E_THROW(H5E_CANTSET, "unable to add fixed array as child of proxy")
- hdr->parent = parent;
-} /* end if */
+ /* Add the fixed array as a child of the parent (proxy) */
+ if (H5AC_proxy_entry_add_child(parent, hdr->f, hdr->top_proxy) < 0)
+ H5E_THROW(H5E_CANTSET, "unable to add fixed array as child of proxy")
+ hdr->parent = parent;
+ } /* end if */
-CATCH
+ CATCH
END_FUNC(PRIV) /* end H5FA_depend() */
@@ -768,15 +771,15 @@ END_FUNC(PRIV) /* end H5FA_depend() */
*/
BEGIN_FUNC(PRIV, NOERR, herr_t, SUCCEED, -, H5FA_patch_file(H5FA_t *fa, H5F_t *f))
-/* Local variables */
+ /* Local variables */
-/*
- * Check arguments.
- */
-HDassert(fa);
-HDassert(f);
+ /*
+ * Check arguments.
+ */
+ HDassert(fa);
+ HDassert(f);
-if (fa->f != f || fa->hdr->f != f)
- fa->f = fa->hdr->f = f;
+ if (fa->f != f || fa->hdr->f != f)
+ fa->f = fa->hdr->f = f;
END_FUNC(PRIV) /* end H5FA_patch_file() */
diff --git a/src/H5FAcache.c b/src/H5FAcache.c
index b030bd5..3772399 100644
--- a/src/H5FAcache.c
+++ b/src/H5FAcache.c
@@ -170,16 +170,16 @@ const H5AC_class_t H5AC_FARRAY_DBLK_PAGE[1] = {{
BEGIN_FUNC(STATIC, NOERR, herr_t, SUCCEED, -,
H5FA__cache_hdr_get_initial_load_size(void *_udata, size_t *image_len))
-/* Local variables */
-H5FA_hdr_cache_ud_t *udata = (H5FA_hdr_cache_ud_t *)_udata; /* User data for callback */
+ /* Local variables */
+ H5FA_hdr_cache_ud_t *udata = (H5FA_hdr_cache_ud_t *)_udata; /* User data for callback */
-/* Check arguments */
-HDassert(udata);
-HDassert(udata->f);
-HDassert(image_len);
+ /* Check arguments */
+ HDassert(udata);
+ HDassert(udata->f);
+ HDassert(image_len);
-/* Set the image length size */
-*image_len = (size_t)H5FA_HEADER_SIZE_FILE(udata->f);
+ /* Set the image length size */
+ *image_len = (size_t)H5FA_HEADER_SIZE_FILE(udata->f);
END_FUNC(STATIC) /* end H5FA__cache_hdr_get_initial_load_size() */
@@ -199,19 +199,19 @@ END_FUNC(STATIC) /* end H5FA__cache_hdr_get_initial_load_size() */
BEGIN_FUNC(STATIC, NOERR, htri_t, TRUE, -,
H5FA__cache_hdr_verify_chksum(const void *_image, size_t len, void H5_ATTR_UNUSED *_udata))
-/* Local variables */
-const uint8_t *image = (const uint8_t *)_image; /* Pointer into raw data buffer */
-uint32_t stored_chksum; /* Stored metadata checksum value */
-uint32_t computed_chksum; /* Computed metadata checksum value */
+ /* Local variables */
+ const uint8_t *image = (const uint8_t *)_image; /* Pointer into raw data buffer */
+ uint32_t stored_chksum; /* Stored metadata checksum value */
+ uint32_t computed_chksum; /* Computed metadata checksum value */
-/* Check arguments */
-HDassert(image);
+ /* Check arguments */
+ HDassert(image);
-/* Get stored and computed checksums */
-H5F_get_checksums(image, len, &stored_chksum, &computed_chksum);
+ /* Get stored and computed checksums */
+ H5F_get_checksums(image, len, &stored_chksum, &computed_chksum);
-if (stored_chksum != computed_chksum)
- ret_value = FALSE;
+ if (stored_chksum != computed_chksum)
+ ret_value = FALSE;
END_FUNC(STATIC) /* end H5FA__cache_hdr_verify_chksum() */
@@ -232,97 +232,97 @@ BEGIN_FUNC(STATIC, ERR, void *, NULL, NULL,
H5FA__cache_hdr_deserialize(const void *_image, size_t H5_ATTR_NDEBUG_UNUSED len, void *_udata,
hbool_t H5_ATTR_UNUSED *dirty))
-/* Local variables */
-H5FA_cls_id_t id; /* ID of fixed array class, as found in file */
-H5FA_hdr_t * hdr = NULL; /* Fixed array info */
-H5FA_hdr_cache_ud_t *udata = (H5FA_hdr_cache_ud_t *)_udata;
-const uint8_t * image = (const uint8_t *)_image; /* Pointer into raw data buffer */
-uint32_t stored_chksum; /* Stored metadata checksum value */
-
-/* Check arguments */
-HDassert(udata);
-HDassert(udata->f);
-HDassert(H5F_addr_defined(udata->addr));
-
-/* Allocate space for the fixed array data structure */
-if (NULL == (hdr = H5FA__hdr_alloc(udata->f)))
- H5E_THROW(H5E_CANTALLOC, "memory allocation failed for fixed array shared header")
-
-/* Set the fixed array header's address */
-hdr->addr = udata->addr;
-
-/* Magic number */
-if (HDmemcmp(image, H5FA_HDR_MAGIC, (size_t)H5_SIZEOF_MAGIC))
- H5E_THROW(H5E_BADVALUE, "wrong fixed array header signature")
-image += H5_SIZEOF_MAGIC;
-
-/* Version */
-if (*image++ != H5FA_HDR_VERSION)
- H5E_THROW(H5E_VERSION, "wrong fixed array header version")
-
-/* Fixed array class */
-id = (H5FA_cls_id_t)*image++;
-if (id >= H5FA_NUM_CLS_ID)
- H5E_THROW(H5E_BADTYPE, "incorrect fixed array class")
-hdr->cparam.cls = H5FA_client_class_g[id];
-
-/* General array creation/configuration information */
-hdr->cparam.raw_elmt_size = *image++; /* Element size in file (in bytes) */
-hdr->cparam.max_dblk_page_nelmts_bits = *image++; /* Log2(Max. # of elements in data block page) -
- i.e. # of bits needed to store max. # of
- elements in data block page. */
-
-/* Array statistics */
-H5F_DECODE_LENGTH(udata->f, image, hdr->cparam.nelmts); /* Number of elements */
-
-/* Internal information */
-H5F_addr_decode(udata->f, &image, &hdr->dblk_addr); /* Address of index block */
-
-/* Check for data block */
-if (H5F_addr_defined(hdr->dblk_addr)) {
- H5FA_dblock_t dblock; /* Fake data block for computing size */
- size_t dblk_page_nelmts; /* # of elements per data block page */
+ /* Local variables */
+ H5FA_cls_id_t id; /* ID of fixed array class, as found in file */
+ H5FA_hdr_t * hdr = NULL; /* Fixed array info */
+ H5FA_hdr_cache_ud_t *udata = (H5FA_hdr_cache_ud_t *)_udata;
+ const uint8_t * image = (const uint8_t *)_image; /* Pointer into raw data buffer */
+ uint32_t stored_chksum; /* Stored metadata checksum value */
+
+ /* Check arguments */
+ HDassert(udata);
+ HDassert(udata->f);
+ HDassert(H5F_addr_defined(udata->addr));
+
+ /* Allocate space for the fixed array data structure */
+ if (NULL == (hdr = H5FA__hdr_alloc(udata->f)))
+ H5E_THROW(H5E_CANTALLOC, "memory allocation failed for fixed array shared header")
+
+ /* Set the fixed array header's address */
+ hdr->addr = udata->addr;
+
+ /* Magic number */
+ if (HDmemcmp(image, H5FA_HDR_MAGIC, (size_t)H5_SIZEOF_MAGIC))
+ H5E_THROW(H5E_BADVALUE, "wrong fixed array header signature")
+ image += H5_SIZEOF_MAGIC;
+
+ /* Version */
+ if (*image++ != H5FA_HDR_VERSION)
+ H5E_THROW(H5E_VERSION, "wrong fixed array header version")
+
+ /* Fixed array class */
+ id = (H5FA_cls_id_t)*image++;
+ if (id >= H5FA_NUM_CLS_ID)
+ H5E_THROW(H5E_BADTYPE, "incorrect fixed array class")
+ hdr->cparam.cls = H5FA_client_class_g[id];
+
+ /* General array creation/configuration information */
+ hdr->cparam.raw_elmt_size = *image++; /* Element size in file (in bytes) */
+ hdr->cparam.max_dblk_page_nelmts_bits = *image++; /* Log2(Max. # of elements in data block page) -
+ i.e. # of bits needed to store max. # of
+ elements in data block page. */
+
+ /* Array statistics */
+ H5F_DECODE_LENGTH(udata->f, image, hdr->cparam.nelmts); /* Number of elements */
+
+ /* Internal information */
+ H5F_addr_decode(udata->f, &image, &hdr->dblk_addr); /* Address of index block */
+
+ /* Check for data block */
+ if (H5F_addr_defined(hdr->dblk_addr)) {
+ H5FA_dblock_t dblock; /* Fake data block for computing size */
+ size_t dblk_page_nelmts; /* # of elements per data block page */
+
+ /* Set up fake data block for computing size on disk */
+ dblock.hdr = hdr;
+ dblock.dblk_page_init_size = 0;
+ dblock.npages = 0;
+ dblk_page_nelmts = (size_t)1 << hdr->cparam.max_dblk_page_nelmts_bits;
+ if (hdr->cparam.nelmts > dblk_page_nelmts) {
+ dblock.npages = (size_t)(((hdr->cparam.nelmts + dblk_page_nelmts) - 1) / dblk_page_nelmts);
+ dblock.dblk_page_init_size = (dblock.npages + 7) / 8;
+ } /* end if */
- /* Set up fake data block for computing size on disk */
- dblock.hdr = hdr;
- dblock.dblk_page_init_size = 0;
- dblock.npages = 0;
- dblk_page_nelmts = (size_t)1 << hdr->cparam.max_dblk_page_nelmts_bits;
- if (hdr->cparam.nelmts > dblk_page_nelmts) {
- dblock.npages = (size_t)(((hdr->cparam.nelmts + dblk_page_nelmts) - 1) / dblk_page_nelmts);
- dblock.dblk_page_init_size = (dblock.npages + 7) / 8;
+ /* Compute Fixed Array data block size for hdr statistics */
+ hdr->stats.dblk_size = (size_t)H5FA_DBLOCK_SIZE(&dblock);
} /* end if */
- /* Compute Fixed Array data block size for hdr statistics */
- hdr->stats.dblk_size = (size_t)H5FA_DBLOCK_SIZE(&dblock);
-} /* end if */
-
-/* Sanity check */
-/* (allow for checksum not decoded yet) */
-HDassert((size_t)(image - (const uint8_t *)_image) == (len - H5FA_SIZEOF_CHKSUM));
+ /* Sanity check */
+ /* (allow for checksum not decoded yet) */
+ HDassert((size_t)(image - (const uint8_t *)_image) == (len - H5FA_SIZEOF_CHKSUM));
-/* checksum verification already done in verify_chksum cb */
+ /* checksum verification already done in verify_chksum cb */
-/* Metadata checksum */
-UINT32DECODE(image, stored_chksum);
+ /* Metadata checksum */
+ UINT32DECODE(image, stored_chksum);
-/* Sanity check */
-HDassert((size_t)(image - (const uint8_t *)_image) == len);
+ /* Sanity check */
+ HDassert((size_t)(image - (const uint8_t *)_image) == len);
-/* Finish initializing fixed array header */
-if (H5FA__hdr_init(hdr, udata->ctx_udata) < 0)
- H5E_THROW(H5E_CANTINIT, "initialization failed for fixed array header")
-HDassert(hdr->size == len);
+ /* Finish initializing fixed array header */
+ if (H5FA__hdr_init(hdr, udata->ctx_udata) < 0)
+ H5E_THROW(H5E_CANTINIT, "initialization failed for fixed array header")
+ HDassert(hdr->size == len);
-/* Set return value */
-ret_value = hdr;
+ /* Set return value */
+ ret_value = hdr;
-CATCH
+ CATCH
-/* Release resources */
-if (!ret_value)
- if (hdr && H5FA__hdr_dest(hdr) < 0)
- H5E_THROW(H5E_CANTFREE, "unable to destroy fixed array header")
+ /* Release resources */
+ if (!ret_value)
+ if (hdr && H5FA__hdr_dest(hdr) < 0)
+ H5E_THROW(H5E_CANTFREE, "unable to destroy fixed array header")
END_FUNC(STATIC) /* end H5FA__cache_hdr_deserialize() */
@@ -341,15 +341,15 @@ END_FUNC(STATIC) /* end H5FA__cache_hdr_deserialize() */
BEGIN_FUNC(STATIC, NOERR, herr_t, SUCCEED, -,
H5FA__cache_hdr_image_len(const void *_thing, size_t *image_len))
-/* Local variables */
-const H5FA_hdr_t *hdr = (const H5FA_hdr_t *)_thing; /* Pointer to the object */
+ /* Local variables */
+ const H5FA_hdr_t *hdr = (const H5FA_hdr_t *)_thing; /* Pointer to the object */
-/* Check arguments */
-HDassert(hdr);
-HDassert(image_len);
+ /* Check arguments */
+ HDassert(hdr);
+ HDassert(image_len);
-/* Set the image length size */
-*image_len = hdr->size;
+ /* Set the image length size */
+ *image_len = hdr->size;
END_FUNC(STATIC) /* end H5FA__cache_hdr_image_len() */
@@ -368,47 +368,47 @@ END_FUNC(STATIC) /* end H5FA__cache_hdr_image_len() */
BEGIN_FUNC(STATIC, NOERR, herr_t, SUCCEED, -,
H5FA__cache_hdr_serialize(const H5F_t *f, void *_image, size_t H5_ATTR_UNUSED len, void *_thing))
-/* Local variables */
-H5FA_hdr_t *hdr = (H5FA_hdr_t *)_thing; /* Pointer to the fixed array header */
-uint8_t * image = (uint8_t *)_image; /* Pointer into raw data buffer */
-uint32_t metadata_chksum; /* Computed metadata checksum value */
+ /* Local variables */
+ H5FA_hdr_t *hdr = (H5FA_hdr_t *)_thing; /* Pointer to the fixed array header */
+ uint8_t * image = (uint8_t *)_image; /* Pointer into raw data buffer */
+ uint32_t metadata_chksum; /* Computed metadata checksum value */
-/* check arguments */
-HDassert(f);
-HDassert(image);
-HDassert(hdr);
+ /* check arguments */
+ HDassert(f);
+ HDassert(image);
+ HDassert(hdr);
-/* Magic number */
-H5MM_memcpy(image, H5FA_HDR_MAGIC, (size_t)H5_SIZEOF_MAGIC);
-image += H5_SIZEOF_MAGIC;
+ /* Magic number */
+ H5MM_memcpy(image, H5FA_HDR_MAGIC, (size_t)H5_SIZEOF_MAGIC);
+ image += H5_SIZEOF_MAGIC;
-/* Version # */
-*image++ = H5FA_HDR_VERSION;
+ /* Version # */
+ *image++ = H5FA_HDR_VERSION;
-/* Fixed array type */
-HDassert(hdr->cparam.cls->id <= 255);
-*image++ = (uint8_t)hdr->cparam.cls->id;
+ /* Fixed array type */
+ HDassert(hdr->cparam.cls->id <= 255);
+ *image++ = (uint8_t)hdr->cparam.cls->id;
-/* General array creation/configuration information */
-*image++ = hdr->cparam.raw_elmt_size; /* Element size in file (in bytes) */
-*image++ =
- hdr->cparam.max_dblk_page_nelmts_bits; /* Log2(Max. # of elements in data block page) - i.e. # of bits
- needed to store max. # of elements in data block page */
+ /* General array creation/configuration information */
+ *image++ = hdr->cparam.raw_elmt_size; /* Element size in file (in bytes) */
+ *image++ =
+ hdr->cparam.max_dblk_page_nelmts_bits; /* Log2(Max. # of elements in data block page) - i.e. # of bits
+ needed to store max. # of elements in data block page */
-/* Array statistics */
-H5F_ENCODE_LENGTH(f, image, hdr->stats.nelmts); /* Number of elements for the fixed array */
+ /* Array statistics */
+ H5F_ENCODE_LENGTH(f, image, hdr->stats.nelmts); /* Number of elements for the fixed array */
-/* Internal information */
-H5F_addr_encode(f, &image, hdr->dblk_addr); /* Address of fixed array data block */
+ /* Internal information */
+ H5F_addr_encode(f, &image, hdr->dblk_addr); /* Address of fixed array data block */
-/* Compute metadata checksum */
-metadata_chksum = H5_checksum_metadata(_image, (size_t)(image - (uint8_t *)_image), 0);
+ /* Compute metadata checksum */
+ metadata_chksum = H5_checksum_metadata(_image, (size_t)(image - (uint8_t *)_image), 0);
-/* Metadata checksum */
-UINT32ENCODE(image, metadata_chksum);
+ /* Metadata checksum */
+ UINT32ENCODE(image, metadata_chksum);
-/* Sanity check */
-HDassert((size_t)(image - (uint8_t *)_image) == len);
+ /* Sanity check */
+ HDassert((size_t)(image - (uint8_t *)_image) == len);
END_FUNC(STATIC) /* end H5FA__cache_hdr_serialize() */
@@ -427,65 +427,66 @@ END_FUNC(STATIC) /* end H5FA__cache_hdr_serialize() */
BEGIN_FUNC(STATIC, ERR, herr_t, SUCCEED, FAIL,
H5FA__cache_hdr_notify(H5AC_notify_action_t action, void *_thing))
-/* Local variables */
-H5FA_hdr_t *hdr = (H5FA_hdr_t *)_thing; /* Pointer to the object */
-
-/* Sanity check */
-HDassert(hdr);
-
-/* Check if the file was opened with SWMR-write access */
-if (hdr->swmr_write) {
- /* Determine which action to take */
- switch (action) {
- case H5AC_NOTIFY_ACTION_AFTER_INSERT:
- case H5AC_NOTIFY_ACTION_AFTER_LOAD:
- case H5AC_NOTIFY_ACTION_AFTER_FLUSH:
- case H5AC_NOTIFY_ACTION_ENTRY_DIRTIED:
- case H5AC_NOTIFY_ACTION_ENTRY_CLEANED:
- case H5AC_NOTIFY_ACTION_CHILD_DIRTIED:
- case H5AC_NOTIFY_ACTION_CHILD_CLEANED:
- case H5AC_NOTIFY_ACTION_CHILD_UNSERIALIZED:
- case H5AC_NOTIFY_ACTION_CHILD_SERIALIZED:
- /* do nothing */
- break;
-
- case H5AC_NOTIFY_ACTION_BEFORE_EVICT:
- /* If hdr->parent != NULL, hdr->parent is used to destroy
- * the flush dependency before the header is evicted.
- */
- if (hdr->parent) {
- /* Sanity check */
- HDassert(hdr->top_proxy);
-
- /* Destroy flush dependency on object header proxy */
- if (H5AC_proxy_entry_remove_child((H5AC_proxy_entry_t *)hdr->parent, (void *)hdr->top_proxy) <
- 0)
- H5E_THROW(H5E_CANTUNDEPEND,
- "unable to destroy flush dependency between fixed array and proxy")
- hdr->parent = NULL;
- } /* end if */
-
- /* Detach from 'top' proxy for fixed array */
- if (hdr->top_proxy) {
- if (H5AC_proxy_entry_remove_child(hdr->top_proxy, hdr) < 0)
- H5E_THROW(H5E_CANTUNDEPEND,
- "unable to destroy flush dependency between header and fixed array 'top' proxy")
- /* Don't reset hdr->top_proxy here, it's destroyed when the header is freed -QAK */
- } /* end if */
- break;
-
- default:
+ /* Local variables */
+ H5FA_hdr_t *hdr = (H5FA_hdr_t *)_thing; /* Pointer to the object */
+
+ /* Sanity check */
+ HDassert(hdr);
+
+ /* Check if the file was opened with SWMR-write access */
+ if (hdr->swmr_write) {
+ /* Determine which action to take */
+ switch (action) {
+ case H5AC_NOTIFY_ACTION_AFTER_INSERT:
+ case H5AC_NOTIFY_ACTION_AFTER_LOAD:
+ case H5AC_NOTIFY_ACTION_AFTER_FLUSH:
+ case H5AC_NOTIFY_ACTION_ENTRY_DIRTIED:
+ case H5AC_NOTIFY_ACTION_ENTRY_CLEANED:
+ case H5AC_NOTIFY_ACTION_CHILD_DIRTIED:
+ case H5AC_NOTIFY_ACTION_CHILD_CLEANED:
+ case H5AC_NOTIFY_ACTION_CHILD_UNSERIALIZED:
+ case H5AC_NOTIFY_ACTION_CHILD_SERIALIZED:
+ /* do nothing */
+ break;
+
+ case H5AC_NOTIFY_ACTION_BEFORE_EVICT:
+ /* If hdr->parent != NULL, hdr->parent is used to destroy
+ * the flush dependency before the header is evicted.
+ */
+ if (hdr->parent) {
+ /* Sanity check */
+ HDassert(hdr->top_proxy);
+
+ /* Destroy flush dependency on object header proxy */
+ if (H5AC_proxy_entry_remove_child((H5AC_proxy_entry_t *)hdr->parent,
+ (void *)hdr->top_proxy) < 0)
+ H5E_THROW(H5E_CANTUNDEPEND,
+ "unable to destroy flush dependency between fixed array and proxy")
+ hdr->parent = NULL;
+ } /* end if */
+
+ /* Detach from 'top' proxy for fixed array */
+ if (hdr->top_proxy) {
+ if (H5AC_proxy_entry_remove_child(hdr->top_proxy, hdr) < 0)
+ H5E_THROW(
+ H5E_CANTUNDEPEND,
+ "unable to destroy flush dependency between header and fixed array 'top' proxy")
+ /* Don't reset hdr->top_proxy here, it's destroyed when the header is freed -QAK */
+ } /* end if */
+ break;
+
+ default:
#ifdef NDEBUG
- H5E_THROW(H5E_BADVALUE, "unknown action from metadata cache")
-#else /* NDEBUG */
- HDassert(0 && "Unknown action?!?");
-#endif /* NDEBUG */
- } /* end switch */
-} /* end if */
-else
- HDassert(NULL == hdr->parent);
+ H5E_THROW(H5E_BADVALUE, "unknown action from metadata cache")
+#else /* NDEBUG */
+ HDassert(0 && "Unknown action?!?");
+#endif /* NDEBUG */
+ } /* end switch */
+ } /* end if */
+ else
+ HDassert(NULL == hdr->parent);
-CATCH
+ CATCH
END_FUNC(STATIC) /* end H5FA__cache_hdr_notify() */
@@ -504,14 +505,14 @@ END_FUNC(STATIC) /* end H5FA__cache_hdr_notify() */
*/
BEGIN_FUNC(STATIC, ERR, herr_t, SUCCEED, FAIL, H5FA__cache_hdr_free_icr(void *thing))
-/* Check arguments */
-HDassert(thing);
+ /* Check arguments */
+ HDassert(thing);
-/* Release the extensible array header */
-if (H5FA__hdr_dest((H5FA_hdr_t *)thing) < 0)
- H5E_THROW(H5E_CANTFREE, "can't free fixed array header")
+ /* Release the extensible array header */
+ if (H5FA__hdr_dest((H5FA_hdr_t *)thing) < 0)
+ H5E_THROW(H5E_CANTFREE, "can't free fixed array header")
-CATCH
+ CATCH
END_FUNC(STATIC) /* end H5FA__cache_hdr_free_icr() */
@@ -530,38 +531,38 @@ END_FUNC(STATIC) /* end H5FA__cache_hdr_free_icr() */
BEGIN_FUNC(STATIC, NOERR, herr_t, SUCCEED, -,
H5FA__cache_dblock_get_initial_load_size(void *_udata, size_t *image_len))
-/* Local variables */
-H5FA_dblock_cache_ud_t *udata = (H5FA_dblock_cache_ud_t *)_udata; /* User data */
-H5FA_dblock_t dblock; /* Fake data block for computing size */
-size_t dblk_page_nelmts; /* # of elements per data block page */
+ /* Local variables */
+ H5FA_dblock_cache_ud_t *udata = (H5FA_dblock_cache_ud_t *)_udata; /* User data */
+ H5FA_dblock_t dblock; /* Fake data block for computing size */
+ size_t dblk_page_nelmts; /* # of elements per data block page */
-/* Check arguments */
-HDassert(udata);
-HDassert(udata->hdr);
-HDassert(image_len);
+ /* Check arguments */
+ HDassert(udata);
+ HDassert(udata->hdr);
+ HDassert(image_len);
-/* Set up fake data block for computing size on disk */
-/* (Note: extracted from H5FA__dblock_alloc) */
-HDmemset(&dblock, 0, sizeof(dblock));
+ /* Set up fake data block for computing size on disk */
+ /* (Note: extracted from H5FA__dblock_alloc) */
+ HDmemset(&dblock, 0, sizeof(dblock));
+
+ /* Set up fake data block for computing size on disk
+ *
+ * need: dblock->hdr
+ * dblock->npages
+ * dblock->dblk_page_init_size
+ */
+ dblock.hdr = udata->hdr;
+ dblk_page_nelmts = (size_t)1 << udata->hdr->cparam.max_dblk_page_nelmts_bits;
+ if (udata->hdr->cparam.nelmts > dblk_page_nelmts) {
+ dblock.npages = (size_t)(((udata->hdr->cparam.nelmts + dblk_page_nelmts) - 1) / dblk_page_nelmts);
+ dblock.dblk_page_init_size = (dblock.npages + 7) / 8;
+ } /* end if */
-/* Set up fake data block for computing size on disk
- *
- * need: dblock->hdr
- * dblock->npages
- * dblock->dblk_page_init_size
- */
-dblock.hdr = udata->hdr;
-dblk_page_nelmts = (size_t)1 << udata->hdr->cparam.max_dblk_page_nelmts_bits;
-if (udata->hdr->cparam.nelmts > dblk_page_nelmts) {
- dblock.npages = (size_t)(((udata->hdr->cparam.nelmts + dblk_page_nelmts) - 1) / dblk_page_nelmts);
- dblock.dblk_page_init_size = (dblock.npages + 7) / 8;
-} /* end if */
-
-/* Set the image length size */
-if (!dblock.npages)
- *image_len = (size_t)H5FA_DBLOCK_SIZE(&dblock);
-else
- *image_len = (size_t)H5FA_DBLOCK_PREFIX_SIZE(&dblock);
+ /* Set the image length size */
+ if (!dblock.npages)
+ *image_len = (size_t)H5FA_DBLOCK_SIZE(&dblock);
+ else
+ *image_len = (size_t)H5FA_DBLOCK_PREFIX_SIZE(&dblock);
END_FUNC(STATIC) /* end H5FA__cache_dblock_get_initial_load_size() */
@@ -581,19 +582,19 @@ END_FUNC(STATIC) /* end H5FA__cache_dblock_get_initial_load_size() */
BEGIN_FUNC(STATIC, NOERR, htri_t, TRUE, -,
H5FA__cache_dblock_verify_chksum(const void *_image, size_t len, void H5_ATTR_UNUSED *_udata))
-/* Local variables */
-const uint8_t *image = (const uint8_t *)_image; /* Pointer into raw data buffer */
-uint32_t stored_chksum; /* Stored metadata checksum value */
-uint32_t computed_chksum; /* Computed metadata checksum value */
+ /* Local variables */
+ const uint8_t *image = (const uint8_t *)_image; /* Pointer into raw data buffer */
+ uint32_t stored_chksum; /* Stored metadata checksum value */
+ uint32_t computed_chksum; /* Computed metadata checksum value */
-/* Check arguments */
-HDassert(image);
+ /* Check arguments */
+ HDassert(image);
-/* Get stored and computed checksums */
-H5F_get_checksums(image, len, &stored_chksum, &computed_chksum);
+ /* Get stored and computed checksums */
+ H5F_get_checksums(image, len, &stored_chksum, &computed_chksum);
-if (stored_chksum != computed_chksum)
- ret_value = FALSE;
+ if (stored_chksum != computed_chksum)
+ ret_value = FALSE;
END_FUNC(STATIC) /* end H5FA__cache_dblock_verify_chksum() */
@@ -614,85 +615,85 @@ BEGIN_FUNC(STATIC, ERR, void *, NULL, NULL,
H5FA__cache_dblock_deserialize(const void *_image, size_t H5_ATTR_NDEBUG_UNUSED len, void *_udata,
hbool_t H5_ATTR_UNUSED *dirty))
-/* Local variables */
-H5FA_dblock_t * dblock = NULL; /* Data block info */
-H5FA_dblock_cache_ud_t *udata = (H5FA_dblock_cache_ud_t *)_udata; /* User data for loading data block */
-const uint8_t * image = (const uint8_t *)_image; /* Pointer into raw data buffer */
-uint32_t stored_chksum; /* Stored metadata checksum value */
-haddr_t arr_addr; /* Address of array header in the file */
-
-/* Sanity check */
-HDassert(udata);
-HDassert(udata->hdr);
-
-/* Allocate the fixed array data block */
-if (NULL == (dblock = H5FA__dblock_alloc(udata->hdr)))
- H5E_THROW(H5E_CANTALLOC, "memory allocation failed for fixed array data block")
-
-HDassert(((!dblock->npages) && (len == (size_t)H5FA_DBLOCK_SIZE(dblock))) ||
- (len == (size_t)H5FA_DBLOCK_PREFIX_SIZE(dblock)));
-
-/* Set the fixed array data block's information */
-dblock->addr = udata->dblk_addr;
-
-/* Magic number */
-if (HDmemcmp(image, H5FA_DBLOCK_MAGIC, (size_t)H5_SIZEOF_MAGIC))
- H5E_THROW(H5E_BADVALUE, "wrong fixed array data block signature")
-image += H5_SIZEOF_MAGIC;
-
-/* Version */
-if (*image++ != H5FA_DBLOCK_VERSION)
- H5E_THROW(H5E_VERSION, "wrong fixed array data block version")
-
-/* Fixed array type */
-if (*image++ != (uint8_t)udata->hdr->cparam.cls->id)
- H5E_THROW(H5E_BADTYPE, "incorrect fixed array class")
-
-/* Address of header for array that owns this block (just for file integrity checks) */
-H5F_addr_decode(udata->hdr->f, &image, &arr_addr);
-if (H5F_addr_ne(arr_addr, udata->hdr->addr))
- H5E_THROW(H5E_BADVALUE, "wrong fixed array header address")
-
-/* Page initialization flags */
-if (dblock->npages > 0) {
- H5MM_memcpy(dblock->dblk_page_init, image, dblock->dblk_page_init_size);
- image += dblock->dblk_page_init_size;
-} /* end if */
-
-/* Only decode elements if the data block is not paged */
-if (!dblock->npages) {
- /* Decode elements in data block */
- /* Convert from raw elements on disk into native elements in memory */
- if ((udata->hdr->cparam.cls->decode)(image, dblock->elmts, (size_t)udata->hdr->cparam.nelmts,
- udata->hdr->cb_ctx) < 0)
- H5E_THROW(H5E_CANTDECODE, "can't decode fixed array data elements")
- image += (udata->hdr->cparam.nelmts * udata->hdr->cparam.raw_elmt_size);
-} /* end if */
+ /* Local variables */
+ H5FA_dblock_t * dblock = NULL; /* Data block info */
+ H5FA_dblock_cache_ud_t *udata = (H5FA_dblock_cache_ud_t *)_udata; /* User data for loading data block */
+ const uint8_t * image = (const uint8_t *)_image; /* Pointer into raw data buffer */
+ uint32_t stored_chksum; /* Stored metadata checksum value */
+ haddr_t arr_addr; /* Address of array header in the file */
+
+ /* Sanity check */
+ HDassert(udata);
+ HDassert(udata->hdr);
+
+ /* Allocate the fixed array data block */
+ if (NULL == (dblock = H5FA__dblock_alloc(udata->hdr)))
+ H5E_THROW(H5E_CANTALLOC, "memory allocation failed for fixed array data block")
+
+ HDassert(((!dblock->npages) && (len == (size_t)H5FA_DBLOCK_SIZE(dblock))) ||
+ (len == (size_t)H5FA_DBLOCK_PREFIX_SIZE(dblock)));
+
+ /* Set the fixed array data block's information */
+ dblock->addr = udata->dblk_addr;
+
+ /* Magic number */
+ if (HDmemcmp(image, H5FA_DBLOCK_MAGIC, (size_t)H5_SIZEOF_MAGIC))
+ H5E_THROW(H5E_BADVALUE, "wrong fixed array data block signature")
+ image += H5_SIZEOF_MAGIC;
+
+ /* Version */
+ if (*image++ != H5FA_DBLOCK_VERSION)
+ H5E_THROW(H5E_VERSION, "wrong fixed array data block version")
+
+ /* Fixed array type */
+ if (*image++ != (uint8_t)udata->hdr->cparam.cls->id)
+ H5E_THROW(H5E_BADTYPE, "incorrect fixed array class")
+
+ /* Address of header for array that owns this block (just for file integrity checks) */
+ H5F_addr_decode(udata->hdr->f, &image, &arr_addr);
+ if (H5F_addr_ne(arr_addr, udata->hdr->addr))
+ H5E_THROW(H5E_BADVALUE, "wrong fixed array header address")
+
+ /* Page initialization flags */
+ if (dblock->npages > 0) {
+ H5MM_memcpy(dblock->dblk_page_init, image, dblock->dblk_page_init_size);
+ image += dblock->dblk_page_init_size;
+ } /* end if */
-/* Sanity check */
-/* (allow for checksum not decoded yet) */
-HDassert((size_t)(image - (const uint8_t *)_image) == (len - H5FA_SIZEOF_CHKSUM));
+ /* Only decode elements if the data block is not paged */
+ if (!dblock->npages) {
+ /* Decode elements in data block */
+ /* Convert from raw elements on disk into native elements in memory */
+ if ((udata->hdr->cparam.cls->decode)(image, dblock->elmts, (size_t)udata->hdr->cparam.nelmts,
+ udata->hdr->cb_ctx) < 0)
+ H5E_THROW(H5E_CANTDECODE, "can't decode fixed array data elements")
+ image += (udata->hdr->cparam.nelmts * udata->hdr->cparam.raw_elmt_size);
+ } /* end if */
+
+ /* Sanity check */
+ /* (allow for checksum not decoded yet) */
+ HDassert((size_t)(image - (const uint8_t *)_image) == (len - H5FA_SIZEOF_CHKSUM));
-/* Set the data block's size */
-dblock->size = H5FA_DBLOCK_SIZE(dblock);
+ /* Set the data block's size */
+ dblock->size = H5FA_DBLOCK_SIZE(dblock);
-/* checksum verification already done in verify_chksum cb */
+ /* checksum verification already done in verify_chksum cb */
-/* Metadata checksum */
-UINT32DECODE(image, stored_chksum);
+ /* Metadata checksum */
+ UINT32DECODE(image, stored_chksum);
-/* Sanity check */
-HDassert((size_t)(image - (const uint8_t *)_image) == len);
+ /* Sanity check */
+ HDassert((size_t)(image - (const uint8_t *)_image) == len);
-/* Set return value */
-ret_value = dblock;
+ /* Set return value */
+ ret_value = dblock;
-CATCH
+ CATCH
-/* Release resources */
-if (!ret_value)
- if (dblock && H5FA__dblock_dest(dblock) < 0)
- H5E_THROW(H5E_CANTFREE, "unable to destroy fixed array data block")
+ /* Release resources */
+ if (!ret_value)
+ if (dblock && H5FA__dblock_dest(dblock) < 0)
+ H5E_THROW(H5E_CANTFREE, "unable to destroy fixed array data block")
END_FUNC(STATIC) /* end H5FA__cache_dblock_deserialize() */
@@ -711,18 +712,18 @@ END_FUNC(STATIC) /* end H5FA__cache_dblock_deserialize() */
BEGIN_FUNC(STATIC, NOERR, herr_t, SUCCEED, -,
H5FA__cache_dblock_image_len(const void *_thing, size_t *image_len))
-/* Local variables */
-const H5FA_dblock_t *dblock = (const H5FA_dblock_t *)_thing; /* Pointer to the object */
+ /* Local variables */
+ const H5FA_dblock_t *dblock = (const H5FA_dblock_t *)_thing; /* Pointer to the object */
-/* Check arguments */
-HDassert(dblock);
-HDassert(image_len);
+ /* Check arguments */
+ HDassert(dblock);
+ HDassert(image_len);
-/* Set the image length size */
-if (!dblock->npages)
- *image_len = (size_t)dblock->size;
-else
- *image_len = H5FA_DBLOCK_PREFIX_SIZE(dblock);
+ /* Set the image length size */
+ if (!dblock->npages)
+ *image_len = (size_t)dblock->size;
+ else
+ *image_len = H5FA_DBLOCK_PREFIX_SIZE(dblock);
END_FUNC(STATIC) /* end H5FA__cache_dblock_image_len() */
@@ -742,60 +743,60 @@ BEGIN_FUNC(STATIC, ERR, herr_t, SUCCEED, FAIL,
H5FA__cache_dblock_serialize(const H5F_t *f, void *_image, size_t H5_ATTR_UNUSED len,
void *_thing))
-/* Local variables */
-H5FA_dblock_t *dblock = (H5FA_dblock_t *)_thing; /* Pointer to the object to serialize */
-uint8_t * image = (uint8_t *)_image; /* Pointer into raw data buffer */
-uint32_t metadata_chksum; /* Computed metadata checksum value */
+ /* Local variables */
+ H5FA_dblock_t *dblock = (H5FA_dblock_t *)_thing; /* Pointer to the object to serialize */
+ uint8_t * image = (uint8_t *)_image; /* Pointer into raw data buffer */
+ uint32_t metadata_chksum; /* Computed metadata checksum value */
-/* Check arguments */
-HDassert(f);
-HDassert(image);
-HDassert(dblock);
-HDassert(dblock->hdr);
+ /* Check arguments */
+ HDassert(f);
+ HDassert(image);
+ HDassert(dblock);
+ HDassert(dblock->hdr);
-/* Magic number */
-H5MM_memcpy(image, H5FA_DBLOCK_MAGIC, (size_t)H5_SIZEOF_MAGIC);
-image += H5_SIZEOF_MAGIC;
+ /* Magic number */
+ H5MM_memcpy(image, H5FA_DBLOCK_MAGIC, (size_t)H5_SIZEOF_MAGIC);
+ image += H5_SIZEOF_MAGIC;
-/* Version # */
-*image++ = H5FA_DBLOCK_VERSION;
+ /* Version # */
+ *image++ = H5FA_DBLOCK_VERSION;
-/* Fixed array type */
-HDassert(dblock->hdr->cparam.cls->id <= 255);
-*image++ = (uint8_t)dblock->hdr->cparam.cls->id;
+ /* Fixed array type */
+ HDassert(dblock->hdr->cparam.cls->id <= 255);
+ *image++ = (uint8_t)dblock->hdr->cparam.cls->id;
-/* Address of array header for array which owns this block */
-H5F_addr_encode(f, &image, dblock->hdr->addr);
+ /* Address of array header for array which owns this block */
+ H5F_addr_encode(f, &image, dblock->hdr->addr);
-/* Page init flags */
-if (dblock->npages > 0) {
- /* Store the 'page init' bitmasks */
- H5MM_memcpy(image, dblock->dblk_page_init, dblock->dblk_page_init_size);
- image += dblock->dblk_page_init_size;
-} /* end if */
+ /* Page init flags */
+ if (dblock->npages > 0) {
+ /* Store the 'page init' bitmasks */
+ H5MM_memcpy(image, dblock->dblk_page_init, dblock->dblk_page_init_size);
+ image += dblock->dblk_page_init_size;
+ } /* end if */
-/* Only encode elements if the data block is not paged */
-if (!dblock->npages) {
- /* Encode elements in data block */
+ /* Only encode elements if the data block is not paged */
+ if (!dblock->npages) {
+ /* Encode elements in data block */
- /* Convert from native elements in memory into raw elements on disk */
- H5_CHECK_OVERFLOW(dblock->hdr->cparam.nelmts, /* From: */ hsize_t, /* To: */ size_t);
- if ((dblock->hdr->cparam.cls->encode)(image, dblock->elmts, (size_t)dblock->hdr->cparam.nelmts,
- dblock->hdr->cb_ctx) < 0)
- H5E_THROW(H5E_CANTENCODE, "can't encode fixed array data elements")
- image += (dblock->hdr->cparam.nelmts * dblock->hdr->cparam.raw_elmt_size);
-} /* end if */
+ /* Convert from native elements in memory into raw elements on disk */
+ H5_CHECK_OVERFLOW(dblock->hdr->cparam.nelmts, /* From: */ hsize_t, /* To: */ size_t);
+ if ((dblock->hdr->cparam.cls->encode)(image, dblock->elmts, (size_t)dblock->hdr->cparam.nelmts,
+ dblock->hdr->cb_ctx) < 0)
+ H5E_THROW(H5E_CANTENCODE, "can't encode fixed array data elements")
+ image += (dblock->hdr->cparam.nelmts * dblock->hdr->cparam.raw_elmt_size);
+ } /* end if */
-/* Compute metadata checksum */
-metadata_chksum = H5_checksum_metadata(_image, (size_t)(image - (uint8_t *)_image), 0);
+ /* Compute metadata checksum */
+ metadata_chksum = H5_checksum_metadata(_image, (size_t)(image - (uint8_t *)_image), 0);
-/* Metadata checksum */
-UINT32ENCODE(image, metadata_chksum);
+ /* Metadata checksum */
+ UINT32ENCODE(image, metadata_chksum);
-/* Sanity check */
-HDassert((size_t)(image - (uint8_t *)_image) == len);
+ /* Sanity check */
+ HDassert((size_t)(image - (uint8_t *)_image) == len);
-CATCH
+ CATCH
END_FUNC(STATIC) /* end H5FA__cache_dblock_serialize() */
@@ -814,60 +815,60 @@ END_FUNC(STATIC) /* end H5FA__cache_dblock_serialize() */
BEGIN_FUNC(STATIC, ERR, herr_t, SUCCEED, FAIL,
H5FA__cache_dblock_notify(H5AC_notify_action_t action, void *_thing))
-/* Local variables */
-H5FA_dblock_t *dblock = (H5FA_dblock_t *)_thing;
-
-/* Sanity check */
-HDassert(dblock);
-
-/* Check if the file was opened with SWMR-write access */
-if (dblock->hdr->swmr_write) {
- /* Determine which action to take */
- switch (action) {
- case H5AC_NOTIFY_ACTION_AFTER_INSERT:
- case H5AC_NOTIFY_ACTION_AFTER_LOAD:
- /* Create flush dependency on parent */
- if (H5FA__create_flush_depend((H5AC_info_t *)dblock->hdr, (H5AC_info_t *)dblock) < 0)
- H5E_THROW(H5E_CANTDEPEND,
- "unable to create flush dependency between data block and header, address = %llu",
- (unsigned long long)dblock->addr)
- break;
-
- case H5AC_NOTIFY_ACTION_AFTER_FLUSH:
- case H5AC_NOTIFY_ACTION_ENTRY_DIRTIED:
- case H5AC_NOTIFY_ACTION_ENTRY_CLEANED:
- case H5AC_NOTIFY_ACTION_CHILD_DIRTIED:
- case H5AC_NOTIFY_ACTION_CHILD_CLEANED:
- case H5AC_NOTIFY_ACTION_CHILD_UNSERIALIZED:
- case H5AC_NOTIFY_ACTION_CHILD_SERIALIZED:
- /* do nothing */
- break;
+ /* Local variables */
+ H5FA_dblock_t *dblock = (H5FA_dblock_t *)_thing;
- case H5AC_NOTIFY_ACTION_BEFORE_EVICT:
- /* Destroy flush dependency on parent */
- if (H5FA__destroy_flush_depend((H5AC_info_t *)dblock->hdr, (H5AC_info_t *)dblock) < 0)
- H5E_THROW(H5E_CANTUNDEPEND, "unable to destroy flush dependency")
+ /* Sanity check */
+ HDassert(dblock);
- /* Detach from 'top' proxy for fixed array */
- if (dblock->top_proxy) {
- if (H5AC_proxy_entry_remove_child(dblock->top_proxy, dblock) < 0)
+ /* Check if the file was opened with SWMR-write access */
+ if (dblock->hdr->swmr_write) {
+ /* Determine which action to take */
+ switch (action) {
+ case H5AC_NOTIFY_ACTION_AFTER_INSERT:
+ case H5AC_NOTIFY_ACTION_AFTER_LOAD:
+ /* Create flush dependency on parent */
+ if (H5FA__create_flush_depend((H5AC_info_t *)dblock->hdr, (H5AC_info_t *)dblock) < 0)
H5E_THROW(
- H5E_CANTUNDEPEND,
- "unable to destroy flush dependency between data block and fixed array 'top' proxy")
- dblock->top_proxy = NULL;
- } /* end if */
- break;
-
- default:
+ H5E_CANTDEPEND,
+ "unable to create flush dependency between data block and header, address = %llu",
+ (unsigned long long)dblock->addr)
+ break;
+
+ case H5AC_NOTIFY_ACTION_AFTER_FLUSH:
+ case H5AC_NOTIFY_ACTION_ENTRY_DIRTIED:
+ case H5AC_NOTIFY_ACTION_ENTRY_CLEANED:
+ case H5AC_NOTIFY_ACTION_CHILD_DIRTIED:
+ case H5AC_NOTIFY_ACTION_CHILD_CLEANED:
+ case H5AC_NOTIFY_ACTION_CHILD_UNSERIALIZED:
+ case H5AC_NOTIFY_ACTION_CHILD_SERIALIZED:
+ /* do nothing */
+ break;
+
+ case H5AC_NOTIFY_ACTION_BEFORE_EVICT:
+ /* Destroy flush dependency on parent */
+ if (H5FA__destroy_flush_depend((H5AC_info_t *)dblock->hdr, (H5AC_info_t *)dblock) < 0)
+ H5E_THROW(H5E_CANTUNDEPEND, "unable to destroy flush dependency")
+
+ /* Detach from 'top' proxy for fixed array */
+ if (dblock->top_proxy) {
+ if (H5AC_proxy_entry_remove_child(dblock->top_proxy, dblock) < 0)
+ H5E_THROW(H5E_CANTUNDEPEND, "unable to destroy flush dependency between data block "
+ "and fixed array 'top' proxy")
+ dblock->top_proxy = NULL;
+ } /* end if */
+ break;
+
+ default:
#ifdef NDEBUG
- H5E_THROW(H5E_BADVALUE, "unknown action from metadata cache")
-#else /* NDEBUG */
- HDassert(0 && "Unknown action?!?");
-#endif /* NDEBUG */
- } /* end switch */
-} /* end if */
+ H5E_THROW(H5E_BADVALUE, "unknown action from metadata cache")
+#else /* NDEBUG */
+ HDassert(0 && "Unknown action?!?");
+#endif /* NDEBUG */
+ } /* end switch */
+ } /* end if */
-CATCH
+ CATCH
END_FUNC(STATIC) /* end H5FA__cache_dblock_notify() */
@@ -886,16 +887,16 @@ END_FUNC(STATIC) /* end H5FA__cache_dblock_notify() */
*/
BEGIN_FUNC(STATIC, ERR, herr_t, SUCCEED, FAIL, H5FA__cache_dblock_free_icr(void *_thing))
-H5FA_dblock_t *dblock = (H5FA_dblock_t *)_thing; /* Pointer to the object */
+ H5FA_dblock_t *dblock = (H5FA_dblock_t *)_thing; /* Pointer to the object */
-/* Check arguments */
-HDassert(dblock);
+ /* Check arguments */
+ HDassert(dblock);
-/* Release the fixed array data block */
-if (H5FA__dblock_dest(dblock) < 0)
- H5E_THROW(H5E_CANTFREE, "can't free fixed array data block")
+ /* Release the fixed array data block */
+ if (H5FA__dblock_dest(dblock) < 0)
+ H5E_THROW(H5E_CANTFREE, "can't free fixed array data block")
-CATCH
+ CATCH
END_FUNC(STATIC) /* end H5FA__cache_dblock_free_icr() */
@@ -931,15 +932,15 @@ END_FUNC(STATIC) /* end H5FA__cache_dblock_free_icr() */
BEGIN_FUNC(STATIC, NOERR, herr_t, SUCCEED, -,
H5FA__cache_dblock_fsf_size(const void *_thing, hsize_t *fsf_size))
-const H5FA_dblock_t *dblock = (const H5FA_dblock_t *)_thing; /* Pointer to the object */
+ const H5FA_dblock_t *dblock = (const H5FA_dblock_t *)_thing; /* Pointer to the object */
-/* Check arguments */
-HDassert(dblock);
-HDassert(dblock->cache_info.magic == H5C__H5C_CACHE_ENTRY_T_MAGIC);
-HDassert(dblock->cache_info.type == H5AC_FARRAY_DBLOCK);
-HDassert(fsf_size);
+ /* Check arguments */
+ HDassert(dblock);
+ HDassert(dblock->cache_info.magic == H5C__H5C_CACHE_ENTRY_T_MAGIC);
+ HDassert(dblock->cache_info.type == H5AC_FARRAY_DBLOCK);
+ HDassert(fsf_size);
-*fsf_size = dblock->size;
+ *fsf_size = dblock->size;
END_FUNC(STATIC) /* end H5FA__cache_dblock_fsf_size() */
@@ -958,17 +959,17 @@ END_FUNC(STATIC) /* end H5FA__cache_dblock_fsf_size() */
BEGIN_FUNC(STATIC, NOERR, herr_t, SUCCEED, -,
H5FA__cache_dblk_page_get_initial_load_size(void *_udata, size_t *image_len))
-/* Local variables */
-H5FA_dblk_page_cache_ud_t *udata = (H5FA_dblk_page_cache_ud_t *)_udata; /* User data */
+ /* Local variables */
+ H5FA_dblk_page_cache_ud_t *udata = (H5FA_dblk_page_cache_ud_t *)_udata; /* User data */
-/* Check arguments */
-HDassert(udata);
-HDassert(udata->hdr);
-HDassert(udata->nelmts > 0);
-HDassert(image_len);
+ /* Check arguments */
+ HDassert(udata);
+ HDassert(udata->hdr);
+ HDassert(udata->nelmts > 0);
+ HDassert(image_len);
-/* Set the image length size */
-*image_len = (size_t)H5FA_DBLK_PAGE_SIZE(udata->hdr, udata->nelmts);
+ /* Set the image length size */
+ *image_len = (size_t)H5FA_DBLK_PAGE_SIZE(udata->hdr, udata->nelmts);
END_FUNC(STATIC) /* end H5FA__cache_dblk_page_get_initial_load_size() */
@@ -988,19 +989,19 @@ END_FUNC(STATIC) /* end H5FA__cache_dblk_page_get_initial_load_size() */
BEGIN_FUNC(STATIC, NOERR, htri_t, TRUE, -,
H5FA__cache_dblk_page_verify_chksum(const void *_image, size_t len, void H5_ATTR_UNUSED *_udata))
-/* Local variables */
-const uint8_t *image = (const uint8_t *)_image; /* Pointer into raw data buffer */
-uint32_t stored_chksum; /* Stored metadata checksum value */
-uint32_t computed_chksum; /* Computed metadata checksum value */
+ /* Local variables */
+ const uint8_t *image = (const uint8_t *)_image; /* Pointer into raw data buffer */
+ uint32_t stored_chksum; /* Stored metadata checksum value */
+ uint32_t computed_chksum; /* Computed metadata checksum value */
-/* Check arguments */
-HDassert(image);
+ /* Check arguments */
+ HDassert(image);
-/* Get stored and computed checksums */
-H5F_get_checksums(image, len, &stored_chksum, &computed_chksum);
+ /* Get stored and computed checksums */
+ H5F_get_checksums(image, len, &stored_chksum, &computed_chksum);
-if (stored_chksum != computed_chksum)
- ret_value = FALSE;
+ if (stored_chksum != computed_chksum)
+ ret_value = FALSE;
END_FUNC(STATIC) /* end H5FA__cache_dblk_page_verify_chksum() */
@@ -1021,58 +1022,58 @@ BEGIN_FUNC(STATIC, ERR, void *, NULL, NULL,
H5FA__cache_dblk_page_deserialize(const void *_image, size_t len, void *_udata,
hbool_t H5_ATTR_UNUSED *dirty))
-/* Local variables */
-H5FA_dblk_page_t * dblk_page = NULL; /* Data block page info */
-H5FA_dblk_page_cache_ud_t *udata =
- (H5FA_dblk_page_cache_ud_t *)_udata; /* User data for loading data block page */
-const uint8_t *image = (const uint8_t *)_image; /* Pointer into raw data buffer */
-uint32_t stored_chksum; /* Stored metadata checksum value */
+ /* Local variables */
+ H5FA_dblk_page_t * dblk_page = NULL; /* Data block page info */
+ H5FA_dblk_page_cache_ud_t *udata =
+ (H5FA_dblk_page_cache_ud_t *)_udata; /* User data for loading data block page */
+ const uint8_t *image = (const uint8_t *)_image; /* Pointer into raw data buffer */
+ uint32_t stored_chksum; /* Stored metadata checksum value */
-/* Sanity check */
-HDassert(udata);
-HDassert(udata->hdr);
-HDassert(udata->nelmts > 0);
-HDassert(H5F_addr_defined(udata->dblk_page_addr));
+ /* Sanity check */
+ HDassert(udata);
+ HDassert(udata->hdr);
+ HDassert(udata->nelmts > 0);
+ HDassert(H5F_addr_defined(udata->dblk_page_addr));
-/* Allocate the fixed array data block page */
-if (NULL == (dblk_page = H5FA__dblk_page_alloc(udata->hdr, udata->nelmts)))
- H5E_THROW(H5E_CANTALLOC, "memory allocation failed for fixed array data block page")
+ /* Allocate the fixed array data block page */
+ if (NULL == (dblk_page = H5FA__dblk_page_alloc(udata->hdr, udata->nelmts)))
+ H5E_THROW(H5E_CANTALLOC, "memory allocation failed for fixed array data block page")
-/* Set the fixed array data block's information */
-dblk_page->addr = udata->dblk_page_addr;
+ /* Set the fixed array data block's information */
+ dblk_page->addr = udata->dblk_page_addr;
-/* Internal information */
+ /* Internal information */
-/* Decode elements in data block page */
-/* Convert from raw elements on disk into native elements in memory */
-if ((udata->hdr->cparam.cls->decode)(image, dblk_page->elmts, udata->nelmts, udata->hdr->cb_ctx) < 0)
- H5E_THROW(H5E_CANTDECODE, "can't decode fixed array data elements")
-image += (udata->nelmts * udata->hdr->cparam.raw_elmt_size);
+ /* Decode elements in data block page */
+ /* Convert from raw elements on disk into native elements in memory */
+ if ((udata->hdr->cparam.cls->decode)(image, dblk_page->elmts, udata->nelmts, udata->hdr->cb_ctx) < 0)
+ H5E_THROW(H5E_CANTDECODE, "can't decode fixed array data elements")
+ image += (udata->nelmts * udata->hdr->cparam.raw_elmt_size);
-/* Sanity check */
-/* (allow for checksum not decoded yet) */
-HDassert((size_t)(image - (const uint8_t *)_image) == (len - H5FA_SIZEOF_CHKSUM));
+ /* Sanity check */
+ /* (allow for checksum not decoded yet) */
+ HDassert((size_t)(image - (const uint8_t *)_image) == (len - H5FA_SIZEOF_CHKSUM));
-/* Set the data block page's size */
-dblk_page->size = len;
+ /* Set the data block page's size */
+ dblk_page->size = len;
-/* checksum verification already done in verify_chksum cb */
+ /* checksum verification already done in verify_chksum cb */
-/* Metadata checksum */
-UINT32DECODE(image, stored_chksum);
+ /* Metadata checksum */
+ UINT32DECODE(image, stored_chksum);
-/* Sanity check */
-HDassert((size_t)(image - (const uint8_t *)_image) == dblk_page->size);
+ /* Sanity check */
+ HDassert((size_t)(image - (const uint8_t *)_image) == dblk_page->size);
-/* Set return value */
-ret_value = dblk_page;
+ /* Set return value */
+ ret_value = dblk_page;
-CATCH
+ CATCH
-/* Release resources */
-if (!ret_value)
- if (dblk_page && H5FA__dblk_page_dest(dblk_page) < 0)
- H5E_THROW(H5E_CANTFREE, "unable to destroy fixed array data block page")
+ /* Release resources */
+ if (!ret_value)
+ if (dblk_page && H5FA__dblk_page_dest(dblk_page) < 0)
+ H5E_THROW(H5E_CANTFREE, "unable to destroy fixed array data block page")
END_FUNC(STATIC) /* end H5FA__cache_dblk_page_deserialize() */
@@ -1091,15 +1092,15 @@ END_FUNC(STATIC) /* end H5FA__cache_dblk_page_deserialize() */
BEGIN_FUNC(STATIC, NOERR, herr_t, SUCCEED, -,
H5FA__cache_dblk_page_image_len(const void *_thing, size_t *image_len))
-/* Local variables */
-const H5FA_dblk_page_t *dblk_page = (const H5FA_dblk_page_t *)_thing; /* Pointer to the object */
+ /* Local variables */
+ const H5FA_dblk_page_t *dblk_page = (const H5FA_dblk_page_t *)_thing; /* Pointer to the object */
-/* Check arguments */
-HDassert(dblk_page);
-HDassert(image_len);
+ /* Check arguments */
+ HDassert(dblk_page);
+ HDassert(image_len);
-/* Set the image length size */
-*image_len = dblk_page->size;
+ /* Set the image length size */
+ *image_len = dblk_page->size;
END_FUNC(STATIC) /* end H5FA__cache_dblk_page_image_len() */
@@ -1119,37 +1120,37 @@ BEGIN_FUNC(STATIC, ERR, herr_t, SUCCEED, FAIL,
H5FA__cache_dblk_page_serialize(const H5F_t H5_ATTR_NDEBUG_UNUSED *f, void *_image,
size_t H5_ATTR_UNUSED len, void *_thing))
-/* Local variables */
-H5FA_dblk_page_t *dblk_page = (H5FA_dblk_page_t *)_thing; /* Pointer to the object to serialize */
-uint8_t * image = (uint8_t *)_image; /* Pointer into raw data buffer */
-uint32_t metadata_chksum; /* Computed metadata checksum value */
+ /* Local variables */
+ H5FA_dblk_page_t *dblk_page = (H5FA_dblk_page_t *)_thing; /* Pointer to the object to serialize */
+ uint8_t * image = (uint8_t *)_image; /* Pointer into raw data buffer */
+ uint32_t metadata_chksum; /* Computed metadata checksum value */
-/* Sanity check */
-HDassert(f);
-HDassert(image);
-HDassert(dblk_page);
-HDassert(dblk_page->hdr);
+ /* Sanity check */
+ HDassert(f);
+ HDassert(image);
+ HDassert(dblk_page);
+ HDassert(dblk_page->hdr);
-/* Internal information */
+ /* Internal information */
-/* Encode elements in data block page */
+ /* Encode elements in data block page */
-/* Convert from native elements in memory into raw elements on disk */
-if ((dblk_page->hdr->cparam.cls->encode)(image, dblk_page->elmts, dblk_page->nelmts, dblk_page->hdr->cb_ctx) <
- 0)
- H5E_THROW(H5E_CANTENCODE, "can't encode fixed array data elements")
-image += (dblk_page->nelmts * dblk_page->hdr->cparam.raw_elmt_size);
+ /* Convert from native elements in memory into raw elements on disk */
+ if ((dblk_page->hdr->cparam.cls->encode)(image, dblk_page->elmts, dblk_page->nelmts,
+ dblk_page->hdr->cb_ctx) < 0)
+ H5E_THROW(H5E_CANTENCODE, "can't encode fixed array data elements")
+ image += (dblk_page->nelmts * dblk_page->hdr->cparam.raw_elmt_size);
-/* Compute metadata checksum */
-metadata_chksum = H5_checksum_metadata(_image, (size_t)(image - (uint8_t *)_image), 0);
+ /* Compute metadata checksum */
+ metadata_chksum = H5_checksum_metadata(_image, (size_t)(image - (uint8_t *)_image), 0);
-/* Metadata checksum */
-UINT32ENCODE(image, metadata_chksum);
+ /* Metadata checksum */
+ UINT32ENCODE(image, metadata_chksum);
-/* Sanity check */
-HDassert((size_t)(image - (uint8_t *)_image) == len);
+ /* Sanity check */
+ HDassert((size_t)(image - (uint8_t *)_image) == len);
-CATCH
+ CATCH
END_FUNC(STATIC) /* end H5FA__cache_dblk_page_serialize() */
@@ -1168,49 +1169,48 @@ END_FUNC(STATIC) /* end H5FA__cache_dblk_page_serialize() */
BEGIN_FUNC(STATIC, ERR, herr_t, SUCCEED, FAIL,
H5FA__cache_dblk_page_notify(H5AC_notify_action_t action, void *_thing))
-/* Local variables */
-H5FA_dblk_page_t *dblk_page = (H5FA_dblk_page_t *)_thing; /* Pointer to the object */
-
-/* Sanity check */
-HDassert(dblk_page);
-
-/* Determine which action to take */
-switch (action) {
- case H5AC_NOTIFY_ACTION_AFTER_INSERT:
- case H5AC_NOTIFY_ACTION_AFTER_LOAD:
- case H5AC_NOTIFY_ACTION_AFTER_FLUSH:
- /* do nothing */
- break;
-
- case H5AC_NOTIFY_ACTION_BEFORE_EVICT:
- /* Detach from 'top' proxy for fixed array */
- if (dblk_page->top_proxy) {
- if (H5AC_proxy_entry_remove_child(dblk_page->top_proxy, dblk_page) < 0)
- H5E_THROW(
- H5E_CANTUNDEPEND,
- "unable to destroy flush dependency between data block page and fixed array 'top' proxy")
- dblk_page->top_proxy = NULL;
- } /* end if */
- break;
-
- case H5AC_NOTIFY_ACTION_ENTRY_DIRTIED:
- case H5AC_NOTIFY_ACTION_ENTRY_CLEANED:
- case H5AC_NOTIFY_ACTION_CHILD_DIRTIED:
- case H5AC_NOTIFY_ACTION_CHILD_CLEANED:
- case H5AC_NOTIFY_ACTION_CHILD_UNSERIALIZED:
- case H5AC_NOTIFY_ACTION_CHILD_SERIALIZED:
- /* do nothing */
- break;
-
- default:
+ /* Local variables */
+ H5FA_dblk_page_t *dblk_page = (H5FA_dblk_page_t *)_thing; /* Pointer to the object */
+
+ /* Sanity check */
+ HDassert(dblk_page);
+
+ /* Determine which action to take */
+ switch (action) {
+ case H5AC_NOTIFY_ACTION_AFTER_INSERT:
+ case H5AC_NOTIFY_ACTION_AFTER_LOAD:
+ case H5AC_NOTIFY_ACTION_AFTER_FLUSH:
+ /* do nothing */
+ break;
+
+ case H5AC_NOTIFY_ACTION_BEFORE_EVICT:
+ /* Detach from 'top' proxy for fixed array */
+ if (dblk_page->top_proxy) {
+ if (H5AC_proxy_entry_remove_child(dblk_page->top_proxy, dblk_page) < 0)
+ H5E_THROW(H5E_CANTUNDEPEND, "unable to destroy flush dependency between data block page "
+ "and fixed array 'top' proxy")
+ dblk_page->top_proxy = NULL;
+ } /* end if */
+ break;
+
+ case H5AC_NOTIFY_ACTION_ENTRY_DIRTIED:
+ case H5AC_NOTIFY_ACTION_ENTRY_CLEANED:
+ case H5AC_NOTIFY_ACTION_CHILD_DIRTIED:
+ case H5AC_NOTIFY_ACTION_CHILD_CLEANED:
+ case H5AC_NOTIFY_ACTION_CHILD_UNSERIALIZED:
+ case H5AC_NOTIFY_ACTION_CHILD_SERIALIZED:
+ /* do nothing */
+ break;
+
+ default:
#ifdef NDEBUG
- H5E_THROW(H5E_BADVALUE, "unknown action from metadata cache")
+ H5E_THROW(H5E_BADVALUE, "unknown action from metadata cache")
#else /* NDEBUG */
- HDassert(0 && "Unknown action?!?");
+ HDassert(0 && "Unknown action?!?");
#endif /* NDEBUG */
-} /* end switch */
+ } /* end switch */
-CATCH
+ CATCH
END_FUNC(STATIC) /* end H5FA__cache_dblk_page_notify() */
@@ -1229,13 +1229,13 @@ END_FUNC(STATIC) /* end H5FA__cache_dblk_page_notify() */
*/
BEGIN_FUNC(STATIC, ERR, herr_t, SUCCEED, FAIL, H5FA__cache_dblk_page_free_icr(void *thing))
-/* Check arguments */
-HDassert(thing);
+ /* Check arguments */
+ HDassert(thing);
-/* Release the fixed array data block page */
-if (H5FA__dblk_page_dest((H5FA_dblk_page_t *)thing) < 0)
- H5E_THROW(H5E_CANTFREE, "can't free fixed array data block page")
+ /* Release the fixed array data block page */
+ if (H5FA__dblk_page_dest((H5FA_dblk_page_t *)thing) < 0)
+ H5E_THROW(H5E_CANTFREE, "can't free fixed array data block page")
-CATCH
+ CATCH
END_FUNC(STATIC) /* end H5FA__cache_dblk_page_free_icr() */
diff --git a/src/H5FAdbg.c b/src/H5FAdbg.c
index 37ad94d..a5e758e 100644
--- a/src/H5FAdbg.c
+++ b/src/H5FAdbg.c
@@ -83,53 +83,54 @@ BEGIN_FUNC(PKG, ERR, herr_t, SUCCEED, FAIL,
H5FA__hdr_debug(H5F_t *f, haddr_t addr, FILE *stream, int indent, int fwidth,
const H5FA_class_t *cls, haddr_t obj_addr))
-/* Local variables */
-H5FA_hdr_t *hdr = NULL; /* Shared fixed array header */
-void * dbg_ctx = NULL; /* Fixed array debugging context */
-
-/* Check arguments */
-HDassert(f);
-HDassert(H5F_addr_defined(addr));
-HDassert(H5F_addr_defined(obj_addr));
-HDassert(stream);
-HDassert(indent >= 0);
-HDassert(fwidth >= 0);
-HDassert(cls);
-
-/* Check for debugging context callback available */
-if (cls->crt_dbg_ctx)
- /* Create debugging context */
- if (NULL == (dbg_ctx = cls->crt_dbg_ctx(f, obj_addr)))
- H5E_THROW(H5E_CANTGET, "unable to create fixed array debugging context")
-
-/* Load the fixed array header */
-if (NULL == (hdr = H5FA__hdr_protect(f, addr, dbg_ctx, H5AC__READ_ONLY_FLAG)))
- H5E_THROW(H5E_CANTPROTECT, "unable to load fixed array header")
-
-/* Print opening message */
-HDfprintf(stream, "%*sFixed Array Header...\n", indent, "");
-
-/* Print the values */
-HDfprintf(stream, "%*s%-*s %s\n", indent, "", fwidth, "Array class ID:", hdr->cparam.cls->name);
-HDfprintf(stream, "%*s%-*s %Zu\n", indent, "", fwidth, "Header size:", hdr->size);
-HDfprintf(stream, "%*s%-*s %u\n", indent, "", fwidth,
- "Raw Element Size:", (unsigned)hdr->cparam.raw_elmt_size);
-HDfprintf(stream, "%*s%-*s %Zu\n", indent, "", fwidth,
- "Native Element Size (on this platform):", hdr->cparam.cls->nat_elmt_size);
-
-HDfprintf(stream, "%*s%-*s %u\n", indent, "", fwidth, "Max. # of elements in data block page:",
- (unsigned)((size_t)1 << hdr->cparam.max_dblk_page_nelmts_bits));
-
-HDfprintf(stream, "%*s%-*s %Hu\n", indent, "", fwidth,
- "Number of elements in Fixed Array:", hdr->stats.nelmts);
-
-HDfprintf(stream, "%*s%-*s %a\n", indent, "", fwidth, "Fixed Array Data Block Address:", hdr->dblk_addr);
-
-CATCH
-if (dbg_ctx && cls->dst_dbg_ctx(dbg_ctx) < 0)
- H5E_THROW(H5E_CANTRELEASE, "unable to release fixed array debugging context")
-if (hdr && H5FA__hdr_unprotect(hdr, H5AC__NO_FLAGS_SET) < 0)
- H5E_THROW(H5E_CANTUNPROTECT, "unable to release fixed array header")
+ /* Local variables */
+ H5FA_hdr_t *hdr = NULL; /* Shared fixed array header */
+ void * dbg_ctx = NULL; /* Fixed array debugging context */
+
+ /* Check arguments */
+ HDassert(f);
+ HDassert(H5F_addr_defined(addr));
+ HDassert(H5F_addr_defined(obj_addr));
+ HDassert(stream);
+ HDassert(indent >= 0);
+ HDassert(fwidth >= 0);
+ HDassert(cls);
+
+ /* Check for debugging context callback available */
+ if (cls->crt_dbg_ctx)
+ /* Create debugging context */
+ if (NULL == (dbg_ctx = cls->crt_dbg_ctx(f, obj_addr)))
+ H5E_THROW(H5E_CANTGET, "unable to create fixed array debugging context")
+
+ /* Load the fixed array header */
+ if (NULL == (hdr = H5FA__hdr_protect(f, addr, dbg_ctx, H5AC__READ_ONLY_FLAG)))
+ H5E_THROW(H5E_CANTPROTECT, "unable to load fixed array header")
+
+ /* Print opening message */
+ HDfprintf(stream, "%*sFixed Array Header...\n", indent, "");
+
+ /* Print the values */
+ HDfprintf(stream, "%*s%-*s %s\n", indent, "", fwidth, "Array class ID:", hdr->cparam.cls->name);
+ HDfprintf(stream, "%*s%-*s %zu\n", indent, "", fwidth, "Header size:", hdr->size);
+ HDfprintf(stream, "%*s%-*s %u\n", indent, "", fwidth,
+ "Raw Element Size:", (unsigned)hdr->cparam.raw_elmt_size);
+ HDfprintf(stream, "%*s%-*s %zu\n", indent, "", fwidth,
+ "Native Element Size (on this platform):", hdr->cparam.cls->nat_elmt_size);
+
+ HDfprintf(stream, "%*s%-*s %u\n", indent, "", fwidth, "Max. # of elements in data block page:",
+ (unsigned)((size_t)1 << hdr->cparam.max_dblk_page_nelmts_bits));
+
+ HDfprintf(stream, "%*s%-*s %" PRIuHSIZE "\n", indent, "", fwidth,
+ "Number of elements in Fixed Array:", hdr->stats.nelmts);
+
+ HDfprintf(stream, "%*s%-*s %" PRIuHADDR "\n", indent, "", fwidth,
+ "Fixed Array Data Block Address:", hdr->dblk_addr);
+
+ CATCH
+ if (dbg_ctx && cls->dst_dbg_ctx(dbg_ctx) < 0)
+ H5E_THROW(H5E_CANTRELEASE, "unable to release fixed array debugging context")
+ if (hdr && H5FA__hdr_unprotect(hdr, H5AC__NO_FLAGS_SET) < 0)
+ H5E_THROW(H5E_CANTUNPROTECT, "unable to release fixed array header")
END_FUNC(PKG) /* end H5FA__hdr_debug() */
@@ -149,114 +150,116 @@ BEGIN_FUNC(PKG, ERR, herr_t, SUCCEED, FAIL,
H5FA__dblock_debug(H5F_t *f, haddr_t addr, FILE *stream, int indent, int fwidth,
const H5FA_class_t *cls, haddr_t hdr_addr, haddr_t obj_addr))
-/* Local variables */
-H5FA_hdr_t * hdr = NULL; /* Shared fixed array header */
-H5FA_dblock_t *dblock = NULL; /* Fixed array data block */
-void * dbg_ctx = NULL; /* Fixed array context */
-size_t u; /* Local index variable */
-
-/* Check arguments */
-HDassert(f);
-HDassert(H5F_addr_defined(addr));
-HDassert(stream);
-HDassert(indent >= 0);
-HDassert(fwidth >= 0);
-HDassert(cls);
-HDassert(H5F_addr_defined(hdr_addr));
-HDassert(H5F_addr_defined(obj_addr));
-
-/* Check for debugging context callback available */
-if (cls->crt_dbg_ctx)
- /* Create debugging context */
- if (NULL == (dbg_ctx = cls->crt_dbg_ctx(f, obj_addr)))
- H5E_THROW(H5E_CANTGET, "unable to create fixed array debugging context")
-
-/* Load the fixed array header */
-if (NULL == (hdr = H5FA__hdr_protect(f, hdr_addr, dbg_ctx, H5AC__READ_ONLY_FLAG)))
- H5E_THROW(H5E_CANTPROTECT, "unable to load fixed array header")
-
-/* Protect data block */
-if (NULL == (dblock = H5FA__dblock_protect(hdr, addr, H5AC__READ_ONLY_FLAG)))
- H5E_THROW(H5E_CANTPROTECT, "unable to protect fixed array data block, address = %llu",
- (unsigned long long)addr)
-
-/* Print opening message */
-HDfprintf(stream, "%*sFixed Array data Block...\n", indent, "");
-
-/* Print the values */
-HDfprintf(stream, "%*s%-*s %s\n", indent, "", fwidth, "Array class ID:", hdr->cparam.cls->name);
-HDfprintf(stream, "%*s%-*s %a\n", indent, "", fwidth, "Address of Data Block:", dblock->addr);
-HDfprintf(stream, "%*s%-*s %Zu\n", indent, "", fwidth, "Data Block size:", dblock->size);
-HDfprintf(stream, "%*s%-*s %Hu\n", indent, "", fwidth,
- "Number of elements in Data Block:", hdr->cparam.nelmts);
-HDfprintf(stream, "%*s%-*s %Hu\n", indent, "", fwidth, "Number of pages in Data Block:", dblock->npages);
-HDfprintf(stream, "%*s%-*s %Hu\n", indent, "", fwidth,
- "Number of elements per Data Block page:", dblock->dblk_page_nelmts);
-
-if (dblock->npages) { /* paging */
- size_t dblk_page_nelmts; /* # of elements in a data block page */
- haddr_t dblk_page_addr; /* Address of a data block page */
- size_t page_idx; /* Page index within data block */
-
- HDfprintf(stream, "%*sPaging:\n", indent, "");
-
- /* Iterate over the pages */
- dblk_page_addr = dblock->addr + H5FA_DBLOCK_PREFIX_SIZE(dblock);
- dblk_page_nelmts = dblock->dblk_page_nelmts;
-
- /* Read and print each page's elements in the data block */
- for (page_idx = 0; page_idx < dblock->npages; page_idx++) {
- if (!H5VM_bit_get(dblock->dblk_page_init, page_idx)) {
- HDfprintf(stream, "%*s%-*s %Hu %s\n", indent, "", fwidth, "Page %Zu:", page_idx, "empty");
-
- } /* end if */
- else { /* get the page */
- H5FA_dblk_page_t *dblk_page; /* Pointer to a data block page */
- hsize_t nelmts_left; /* Remaining elements in the last data block page */
-
- /* Check for last page */
- if (((page_idx + 1) == dblock->npages) &&
- (nelmts_left = hdr->cparam.nelmts % dblock->dblk_page_nelmts))
- dblk_page_nelmts = (size_t)nelmts_left;
-
- if (NULL == (dblk_page = H5FA__dblk_page_protect(hdr, dblk_page_addr, dblk_page_nelmts,
- H5AC__READ_ONLY_FLAG)))
- H5E_THROW(H5E_CANTPROTECT, "unable to protect fixed array data block page, address = %llu",
- (unsigned long long)dblk_page_addr)
-
- HDfprintf(stream, "%*sElements in page %Zu:\n", indent, "", page_idx);
- for (u = 0; u < dblk_page_nelmts; u++) {
- /* Call the class's 'debug' callback */
- if ((hdr->cparam.cls->debug)(stream, (indent + 3), MAX(0, (fwidth - 3)), (hsize_t)u,
- ((uint8_t *)dblk_page->elmts) +
- (hdr->cparam.cls->nat_elmt_size * u)) < 0)
- H5E_THROW(H5E_CANTGET, "can't get element for debugging")
- } /* end for */
- if (H5FA__dblk_page_unprotect(dblk_page, H5AC__NO_FLAGS_SET) < 0)
- H5E_THROW(H5E_CANTUNPROTECT, "unable to release fixed array data block page")
-
- /* Advance to next page address */
- dblk_page_addr += dblock->dblk_page_size;
- } /* paging */
- } /* end for npages */
-} /* end if */
-else { /* not paging */
- /* Print the elements in the data block */
- HDfprintf(stream, "%*sElements:\n", indent, "");
- for (u = 0; u < hdr->cparam.nelmts; u++) {
- /* Call the class's 'debug' callback */
- if ((hdr->cparam.cls->debug)(stream, (indent + 3), MAX(0, (fwidth - 3)), (hsize_t)u,
- ((uint8_t *)dblock->elmts) + (hdr->cparam.cls->nat_elmt_size * u)) < 0)
- H5E_THROW(H5E_CANTGET, "can't get element for debugging")
- } /* end for */
-} /* end else */
-
-CATCH
-if (dbg_ctx && cls->dst_dbg_ctx(dbg_ctx) < 0)
- H5E_THROW(H5E_CANTRELEASE, "unable to release fixed array debugging context")
-if (dblock && H5FA__dblock_unprotect(dblock, H5AC__NO_FLAGS_SET) < 0)
- H5E_THROW(H5E_CANTUNPROTECT, "unable to release fixed array data block")
-if (hdr && H5FA__hdr_unprotect(hdr, H5AC__NO_FLAGS_SET) < 0)
- H5E_THROW(H5E_CANTUNPROTECT, "unable to release fixed array header")
+ /* Local variables */
+ H5FA_hdr_t * hdr = NULL; /* Shared fixed array header */
+ H5FA_dblock_t *dblock = NULL; /* Fixed array data block */
+ void * dbg_ctx = NULL; /* Fixed array context */
+ size_t u; /* Local index variable */
+
+ /* Check arguments */
+ HDassert(f);
+ HDassert(H5F_addr_defined(addr));
+ HDassert(stream);
+ HDassert(indent >= 0);
+ HDassert(fwidth >= 0);
+ HDassert(cls);
+ HDassert(H5F_addr_defined(hdr_addr));
+ HDassert(H5F_addr_defined(obj_addr));
+
+ /* Check for debugging context callback available */
+ if (cls->crt_dbg_ctx)
+ /* Create debugging context */
+ if (NULL == (dbg_ctx = cls->crt_dbg_ctx(f, obj_addr)))
+ H5E_THROW(H5E_CANTGET, "unable to create fixed array debugging context")
+
+ /* Load the fixed array header */
+ if (NULL == (hdr = H5FA__hdr_protect(f, hdr_addr, dbg_ctx, H5AC__READ_ONLY_FLAG)))
+ H5E_THROW(H5E_CANTPROTECT, "unable to load fixed array header")
+
+ /* Protect data block */
+ if (NULL == (dblock = H5FA__dblock_protect(hdr, addr, H5AC__READ_ONLY_FLAG)))
+ H5E_THROW(H5E_CANTPROTECT, "unable to protect fixed array data block, address = %llu",
+ (unsigned long long)addr)
+
+ /* Print opening message */
+ HDfprintf(stream, "%*sFixed Array data Block...\n", indent, "");
+
+ /* Print the values */
+ HDfprintf(stream, "%*s%-*s %s\n", indent, "", fwidth, "Array class ID:", hdr->cparam.cls->name);
+ HDfprintf(stream, "%*s%-*s %" PRIuHADDR "\n", indent, "", fwidth, "Address of Data Block:", dblock->addr);
+ HDfprintf(stream, "%*s%-*s %" PRIuHSIZE "\n", indent, "", fwidth, "Data Block size:", dblock->size);
+ HDfprintf(stream, "%*s%-*s %" PRIuHSIZE "\n", indent, "", fwidth,
+ "Number of elements in Data Block:", hdr->cparam.nelmts);
+ HDfprintf(stream, "%*s%-*s %zu\n", indent, "", fwidth, "Number of pages in Data Block:", dblock->npages);
+ HDfprintf(stream, "%*s%-*s %zu\n", indent, "", fwidth,
+ "Number of elements per Data Block page:", dblock->dblk_page_nelmts);
+
+ if (dblock->npages) { /* paging */
+ size_t dblk_page_nelmts; /* # of elements in a data block page */
+ haddr_t dblk_page_addr; /* Address of a data block page */
+ size_t page_idx; /* Page index within data block */
+
+ HDfprintf(stream, "%*sPaging:\n", indent, "");
+
+ /* Iterate over the pages */
+ dblk_page_addr = dblock->addr + H5FA_DBLOCK_PREFIX_SIZE(dblock);
+ dblk_page_nelmts = dblock->dblk_page_nelmts;
+
+ /* Read and print each page's elements in the data block */
+ for (page_idx = 0; page_idx < dblock->npages; page_idx++) {
+ if (!H5VM_bit_get(dblock->dblk_page_init, page_idx)) {
+ HDfprintf(stream, "%*s%-*s %zu %s\n", indent, "", fwidth, "Page %zu:", page_idx, "empty");
+
+ } /* end if */
+ else { /* get the page */
+ H5FA_dblk_page_t *dblk_page; /* Pointer to a data block page */
+ hsize_t nelmts_left; /* Remaining elements in the last data block page */
+
+ /* Check for last page */
+ if (((page_idx + 1) == dblock->npages) &&
+ (nelmts_left = hdr->cparam.nelmts % dblock->dblk_page_nelmts))
+ dblk_page_nelmts = (size_t)nelmts_left;
+
+ if (NULL == (dblk_page = H5FA__dblk_page_protect(hdr, dblk_page_addr, dblk_page_nelmts,
+ H5AC__READ_ONLY_FLAG)))
+ H5E_THROW(H5E_CANTPROTECT,
+ "unable to protect fixed array data block page, address = %llu",
+ (unsigned long long)dblk_page_addr)
+
+ HDfprintf(stream, "%*sElements in page %zu:\n", indent, "", page_idx);
+ for (u = 0; u < dblk_page_nelmts; u++) {
+ /* Call the class's 'debug' callback */
+ if ((hdr->cparam.cls->debug)(stream, (indent + 3), MAX(0, (fwidth - 3)), (hsize_t)u,
+ ((uint8_t *)dblk_page->elmts) +
+ (hdr->cparam.cls->nat_elmt_size * u)) < 0)
+ H5E_THROW(H5E_CANTGET, "can't get element for debugging")
+ } /* end for */
+ if (H5FA__dblk_page_unprotect(dblk_page, H5AC__NO_FLAGS_SET) < 0)
+ H5E_THROW(H5E_CANTUNPROTECT, "unable to release fixed array data block page")
+
+ /* Advance to next page address */
+ dblk_page_addr += dblock->dblk_page_size;
+ } /* paging */
+ } /* end for npages */
+ } /* end if */
+ else { /* not paging */
+ /* Print the elements in the data block */
+ HDfprintf(stream, "%*sElements:\n", indent, "");
+ for (u = 0; u < hdr->cparam.nelmts; u++) {
+ /* Call the class's 'debug' callback */
+ if ((hdr->cparam.cls->debug)(stream, (indent + 3), MAX(0, (fwidth - 3)), (hsize_t)u,
+ ((uint8_t *)dblock->elmts) + (hdr->cparam.cls->nat_elmt_size * u)) <
+ 0)
+ H5E_THROW(H5E_CANTGET, "can't get element for debugging")
+ } /* end for */
+ } /* end else */
+
+ CATCH
+ if (dbg_ctx && cls->dst_dbg_ctx(dbg_ctx) < 0)
+ H5E_THROW(H5E_CANTRELEASE, "unable to release fixed array debugging context")
+ if (dblock && H5FA__dblock_unprotect(dblock, H5AC__NO_FLAGS_SET) < 0)
+ H5E_THROW(H5E_CANTUNPROTECT, "unable to release fixed array data block")
+ if (hdr && H5FA__hdr_unprotect(hdr, H5AC__NO_FLAGS_SET) < 0)
+ H5E_THROW(H5E_CANTUNPROTECT, "unable to release fixed array header")
END_FUNC(PKG) /* end H5FA__dblock_debug() */
diff --git a/src/H5FAdblkpage.c b/src/H5FAdblkpage.c
index 24012ec..61aaf0e 100644
--- a/src/H5FAdblkpage.c
+++ b/src/H5FAdblkpage.c
@@ -86,36 +86,36 @@ H5FL_BLK_DEFINE(page_elmts);
*/
BEGIN_FUNC(PKG, ERR, H5FA_dblk_page_t *, NULL, NULL, H5FA__dblk_page_alloc(H5FA_hdr_t *hdr, size_t nelmts))
-/* Local variables */
-H5FA_dblk_page_t *dblk_page = NULL; /* Fixed array data block page */
+ /* Local variables */
+ H5FA_dblk_page_t *dblk_page = NULL; /* Fixed array data block page */
-/* Check arguments */
-HDassert(hdr);
+ /* Check arguments */
+ HDassert(hdr);
-/* Allocate memory for the data block */
-if (NULL == (dblk_page = H5FL_CALLOC(H5FA_dblk_page_t)))
- H5E_THROW(H5E_CANTALLOC, "memory allocation failed for fixed array data block page")
+ /* Allocate memory for the data block */
+ if (NULL == (dblk_page = H5FL_CALLOC(H5FA_dblk_page_t)))
+ H5E_THROW(H5E_CANTALLOC, "memory allocation failed for fixed array data block page")
-/* Share common array information */
-if (H5FA__hdr_incr(hdr) < 0)
- H5E_THROW(H5E_CANTINC, "can't increment reference count on shared array header")
-dblk_page->hdr = hdr;
+ /* Share common array information */
+ if (H5FA__hdr_incr(hdr) < 0)
+ H5E_THROW(H5E_CANTINC, "can't increment reference count on shared array header")
+ dblk_page->hdr = hdr;
-/* Set non-zero internal fields */
-dblk_page->nelmts = nelmts;
+ /* Set non-zero internal fields */
+ dblk_page->nelmts = nelmts;
-/* Allocate buffer for elements in data block page */
-if (NULL == (dblk_page->elmts = H5FL_BLK_MALLOC(page_elmts, nelmts * hdr->cparam.cls->nat_elmt_size)))
- H5E_THROW(H5E_CANTALLOC, "memory allocation failed for data block page element buffer")
+ /* Allocate buffer for elements in data block page */
+ if (NULL == (dblk_page->elmts = H5FL_BLK_MALLOC(page_elmts, nelmts * hdr->cparam.cls->nat_elmt_size)))
+ H5E_THROW(H5E_CANTALLOC, "memory allocation failed for data block page element buffer")
-/* Set the return value */
-ret_value = dblk_page;
+ /* Set the return value */
+ ret_value = dblk_page;
-CATCH
+ CATCH
-if (!ret_value)
- if (dblk_page && H5FA__dblk_page_dest(dblk_page) < 0)
- H5E_THROW(H5E_CANTFREE, "unable to destroy fixed array data block page")
+ if (!ret_value)
+ if (dblk_page && H5FA__dblk_page_dest(dblk_page) < 0)
+ H5E_THROW(H5E_CANTFREE, "unable to destroy fixed array data block page")
END_FUNC(PKG) /* end H5FA__dblk_page_alloc() */
@@ -134,57 +134,57 @@ END_FUNC(PKG) /* end H5FA__dblk_page_alloc() */
BEGIN_FUNC(PKG, ERR, herr_t, SUCCEED, FAIL,
H5FA__dblk_page_create(H5FA_hdr_t *hdr, haddr_t addr, size_t nelmts))
-/* Local variables */
-H5FA_dblk_page_t *dblk_page = NULL; /* Fixed array data block page */
-hbool_t inserted = FALSE; /* Whether the header was inserted into cache */
+ /* Local variables */
+ H5FA_dblk_page_t *dblk_page = NULL; /* Fixed array data block page */
+ hbool_t inserted = FALSE; /* Whether the header was inserted into cache */
#ifdef H5FA_DEBUG
-HDfprintf(stderr, "%s: Called, addr = %a\n", FUNC, addr);
+ HDfprintf(stderr, "%s: Called, addr = %a\n", FUNC, addr);
#endif /* H5FA_DEBUG */
-/* Sanity check */
-HDassert(hdr);
+ /* Sanity check */
+ HDassert(hdr);
-/* Allocate the data block page */
-if (NULL == (dblk_page = H5FA__dblk_page_alloc(hdr, nelmts)))
- H5E_THROW(H5E_CANTALLOC, "memory allocation failed for fixed array data block page")
+ /* Allocate the data block page */
+ if (NULL == (dblk_page = H5FA__dblk_page_alloc(hdr, nelmts)))
+ H5E_THROW(H5E_CANTALLOC, "memory allocation failed for fixed array data block page")
-/* Set info about data block page on disk */
-dblk_page->addr = addr;
-dblk_page->size = H5FA_DBLK_PAGE_SIZE(hdr, nelmts);
+ /* Set info about data block page on disk */
+ dblk_page->addr = addr;
+ dblk_page->size = H5FA_DBLK_PAGE_SIZE(hdr, nelmts);
#ifdef H5FA_DEBUG
-HDfprintf(stderr, "%s: dblk_page->size = %Zu\n", FUNC, dblk_page->size);
+ HDfprintf(stderr, "%s: dblk_page->size = %Zu\n", FUNC, dblk_page->size);
#endif /* H5FA_DEBUG */
-/* Clear any elements in data block page to fill value */
-if ((hdr->cparam.cls->fill)(dblk_page->elmts, nelmts) < 0)
- H5E_THROW(H5E_CANTSET, "can't set fixed array data block page elements to class's fill value")
-
-/* Cache the new fixed array data block page */
-if (H5AC_insert_entry(hdr->f, H5AC_FARRAY_DBLK_PAGE, dblk_page->addr, dblk_page, H5AC__NO_FLAGS_SET) < 0)
- H5E_THROW(H5E_CANTINSERT, "can't add fixed array data block page to cache")
-inserted = TRUE;
-
-/* Add data block page as child of 'top' proxy */
-if (hdr->top_proxy) {
- if (H5AC_proxy_entry_add_child(hdr->top_proxy, hdr->f, dblk_page) < 0)
- H5E_THROW(H5E_CANTSET, "unable to add fixed array entry as child of array proxy")
- dblk_page->top_proxy = hdr->top_proxy;
-} /* end if */
-
-CATCH
-if (ret_value < 0)
- if (dblk_page) {
- /* Remove from cache, if inserted */
- if (inserted)
- if (H5AC_remove_entry(dblk_page) < 0)
- H5E_THROW(H5E_CANTREMOVE, "unable to remove fixed array data block page from cache")
-
- /* Destroy data block page */
- if (H5FA__dblk_page_dest(dblk_page) < 0)
- H5E_THROW(H5E_CANTFREE, "unable to destroy fixed array data block page")
+ /* Clear any elements in data block page to fill value */
+ if ((hdr->cparam.cls->fill)(dblk_page->elmts, nelmts) < 0)
+ H5E_THROW(H5E_CANTSET, "can't set fixed array data block page elements to class's fill value")
+
+ /* Cache the new fixed array data block page */
+ if (H5AC_insert_entry(hdr->f, H5AC_FARRAY_DBLK_PAGE, dblk_page->addr, dblk_page, H5AC__NO_FLAGS_SET) < 0)
+ H5E_THROW(H5E_CANTINSERT, "can't add fixed array data block page to cache")
+ inserted = TRUE;
+
+ /* Add data block page as child of 'top' proxy */
+ if (hdr->top_proxy) {
+ if (H5AC_proxy_entry_add_child(hdr->top_proxy, hdr->f, dblk_page) < 0)
+ H5E_THROW(H5E_CANTSET, "unable to add fixed array entry as child of array proxy")
+ dblk_page->top_proxy = hdr->top_proxy;
} /* end if */
+ CATCH
+ if (ret_value < 0)
+ if (dblk_page) {
+ /* Remove from cache, if inserted */
+ if (inserted)
+ if (H5AC_remove_entry(dblk_page) < 0)
+ H5E_THROW(H5E_CANTREMOVE, "unable to remove fixed array data block page from cache")
+
+ /* Destroy data block page */
+ if (H5FA__dblk_page_dest(dblk_page) < 0)
+ H5E_THROW(H5E_CANTFREE, "unable to destroy fixed array data block page")
+ } /* end if */
+
END_FUNC(PKG) /* end H5FA__dblk_page_create() */
/*-------------------------------------------------------------------------
@@ -204,53 +204,53 @@ BEGIN_FUNC(PKG, ERR, H5FA_dblk_page_t *, NULL, NULL,
H5FA__dblk_page_protect(H5FA_hdr_t *hdr, haddr_t dblk_page_addr, size_t dblk_page_nelmts,
unsigned flags))
-/* Local variables */
-H5FA_dblk_page_t * dblk_page = NULL; /* Fixed array data block page */
-H5FA_dblk_page_cache_ud_t udata; /* Information needed for loading data block page */
+ /* Local variables */
+ H5FA_dblk_page_t * dblk_page = NULL; /* Fixed array data block page */
+ H5FA_dblk_page_cache_ud_t udata; /* Information needed for loading data block page */
#ifdef H5FA_DEBUG
-HDfprintf(stderr, "%s: Called\n", FUNC);
+ HDfprintf(stderr, "%s: Called\n", FUNC);
#endif /* H5FA_DEBUG */
-/* Sanity check */
-HDassert(hdr);
-HDassert(H5F_addr_defined(dblk_page_addr));
-
-/* only the H5AC__READ_ONLY_FLAG is permitted */
-HDassert((flags & (unsigned)(~H5AC__READ_ONLY_FLAG)) == 0);
-
-/* Set up user data */
-udata.hdr = hdr;
-udata.nelmts = dblk_page_nelmts;
-udata.dblk_page_addr = dblk_page_addr;
-
-/* Protect the data block page */
-if (NULL == (dblk_page = (H5FA_dblk_page_t *)H5AC_protect(hdr->f, H5AC_FARRAY_DBLK_PAGE, dblk_page_addr,
- &udata, flags)))
- H5E_THROW(H5E_CANTPROTECT, "unable to protect fixed array data block page, address = %llu",
- (unsigned long long)dblk_page_addr)
-
-/* Create top proxy, if it doesn't exist */
-if (hdr->top_proxy && NULL == dblk_page->top_proxy) {
- /* Add data block page as child of 'top' proxy */
- if (H5AC_proxy_entry_add_child(hdr->top_proxy, hdr->f, dblk_page) < 0)
- H5E_THROW(H5E_CANTSET, "unable to add fixed array entry as child of array proxy")
- dblk_page->top_proxy = hdr->top_proxy;
-} /* end if */
+ /* Sanity check */
+ HDassert(hdr);
+ HDassert(H5F_addr_defined(dblk_page_addr));
+
+ /* only the H5AC__READ_ONLY_FLAG is permitted */
+ HDassert((flags & (unsigned)(~H5AC__READ_ONLY_FLAG)) == 0);
+
+ /* Set up user data */
+ udata.hdr = hdr;
+ udata.nelmts = dblk_page_nelmts;
+ udata.dblk_page_addr = dblk_page_addr;
+
+ /* Protect the data block page */
+ if (NULL == (dblk_page = (H5FA_dblk_page_t *)H5AC_protect(hdr->f, H5AC_FARRAY_DBLK_PAGE, dblk_page_addr,
+ &udata, flags)))
+ H5E_THROW(H5E_CANTPROTECT, "unable to protect fixed array data block page, address = %llu",
+ (unsigned long long)dblk_page_addr)
+
+ /* Create top proxy, if it doesn't exist */
+ if (hdr->top_proxy && NULL == dblk_page->top_proxy) {
+ /* Add data block page as child of 'top' proxy */
+ if (H5AC_proxy_entry_add_child(hdr->top_proxy, hdr->f, dblk_page) < 0)
+ H5E_THROW(H5E_CANTSET, "unable to add fixed array entry as child of array proxy")
+ dblk_page->top_proxy = hdr->top_proxy;
+ } /* end if */
-/* Set return value */
-ret_value = dblk_page;
+ /* Set return value */
+ ret_value = dblk_page;
-CATCH
+ CATCH
-/* Clean up on error */
-if (!ret_value) {
- /* Release the data block page, if it was protected */
- if (dblk_page &&
- H5AC_unprotect(hdr->f, H5AC_FARRAY_DBLK_PAGE, dblk_page->addr, dblk_page, H5AC__NO_FLAGS_SET) < 0)
- H5E_THROW(H5E_CANTUNPROTECT, "unable to unprotect fixed array data block page, address = %llu",
- (unsigned long long)dblk_page->addr)
-} /* end if */
+ /* Clean up on error */
+ if (!ret_value) {
+ /* Release the data block page, if it was protected */
+ if (dblk_page &&
+ H5AC_unprotect(hdr->f, H5AC_FARRAY_DBLK_PAGE, dblk_page->addr, dblk_page, H5AC__NO_FLAGS_SET) < 0)
+ H5E_THROW(H5E_CANTUNPROTECT, "unable to unprotect fixed array data block page, address = %llu",
+ (unsigned long long)dblk_page->addr)
+ } /* end if */
END_FUNC(PKG) /* end H5FA__dblk_page_protect() */
@@ -273,18 +273,18 @@ BEGIN_FUNC(PKG, ERR, herr_t, SUCCEED, FAIL,
/* Local variables */
#ifdef H5FA_DEBUG
-HDfprintf(stderr, "%s: Called\n", FUNC);
+ HDfprintf(stderr, "%s: Called\n", FUNC);
#endif /* H5FA_DEBUG */
-/* Sanity check */
-HDassert(dblk_page);
+ /* Sanity check */
+ HDassert(dblk_page);
-/* Unprotect the data block page */
-if (H5AC_unprotect(dblk_page->hdr->f, H5AC_FARRAY_DBLK_PAGE, dblk_page->addr, dblk_page, cache_flags) < 0)
- H5E_THROW(H5E_CANTUNPROTECT, "unable to unprotect fixed array data block page, address = %llu",
- (unsigned long long)dblk_page->addr)
+ /* Unprotect the data block page */
+ if (H5AC_unprotect(dblk_page->hdr->f, H5AC_FARRAY_DBLK_PAGE, dblk_page->addr, dblk_page, cache_flags) < 0)
+ H5E_THROW(H5E_CANTUNPROTECT, "unable to unprotect fixed array data block page, address = %llu",
+ (unsigned long long)dblk_page->addr)
-CATCH
+ CATCH
END_FUNC(PKG) /* end H5FA__dblk_page_unprotect() */
@@ -302,29 +302,29 @@ END_FUNC(PKG) /* end H5FA__dblk_page_unprotect() */
*/
BEGIN_FUNC(PKG, ERR, herr_t, SUCCEED, FAIL, H5FA__dblk_page_dest(H5FA_dblk_page_t *dblk_page))
-/* Sanity check */
-HDassert(dblk_page);
-
-/* Check if header field has been initialized */
-if (dblk_page->hdr) {
- /* Check if buffer for data block page elements has been initialized */
- if (dblk_page->elmts) {
- /* Free buffer for data block page elements */
- dblk_page->elmts = H5FL_BLK_FREE(page_elmts, dblk_page->elmts);
+ /* Sanity check */
+ HDassert(dblk_page);
+
+ /* Check if header field has been initialized */
+ if (dblk_page->hdr) {
+ /* Check if buffer for data block page elements has been initialized */
+ if (dblk_page->elmts) {
+ /* Free buffer for data block page elements */
+ dblk_page->elmts = H5FL_BLK_FREE(page_elmts, dblk_page->elmts);
+ } /* end if */
+
+ /* Decrement reference count on shared info */
+ if (H5FA__hdr_decr(dblk_page->hdr) < 0)
+ H5E_THROW(H5E_CANTDEC, "can't decrement reference count on shared array header")
+ dblk_page->hdr = NULL;
} /* end if */
- /* Decrement reference count on shared info */
- if (H5FA__hdr_decr(dblk_page->hdr) < 0)
- H5E_THROW(H5E_CANTDEC, "can't decrement reference count on shared array header")
- dblk_page->hdr = NULL;
-} /* end if */
-
-/* Sanity check */
-HDassert(NULL == dblk_page->top_proxy);
+ /* Sanity check */
+ HDassert(NULL == dblk_page->top_proxy);
-/* Free the data block page itself */
-dblk_page = H5FL_FREE(H5FA_dblk_page_t, dblk_page);
+ /* Free the data block page itself */
+ dblk_page = H5FL_FREE(H5FA_dblk_page_t, dblk_page);
-CATCH
+ CATCH
END_FUNC(PKG) /* end H5FA__dblk_page_dest() */
diff --git a/src/H5FAdblock.c b/src/H5FAdblock.c
index 09585c5..1c0a2d7 100644
--- a/src/H5FAdblock.c
+++ b/src/H5FAdblock.c
@@ -90,70 +90,70 @@ H5FL_BLK_DEFINE(fa_page_init);
*/
BEGIN_FUNC(PKG, ERR, H5FA_dblock_t *, NULL, NULL, H5FA__dblock_alloc(H5FA_hdr_t *hdr))
-/* Local variables */
-H5FA_dblock_t *dblock = NULL; /* fixed array data block */
+ /* Local variables */
+ H5FA_dblock_t *dblock = NULL; /* fixed array data block */
-/* Check arguments */
-HDassert(hdr);
-HDassert(hdr->cparam.nelmts > 0);
+ /* Check arguments */
+ HDassert(hdr);
+ HDassert(hdr->cparam.nelmts > 0);
-/* Allocate memory for the data block */
-if (NULL == (dblock = H5FL_CALLOC(H5FA_dblock_t)))
- H5E_THROW(H5E_CANTALLOC, "memory allocation failed for fixed array data block")
+ /* Allocate memory for the data block */
+ if (NULL == (dblock = H5FL_CALLOC(H5FA_dblock_t)))
+ H5E_THROW(H5E_CANTALLOC, "memory allocation failed for fixed array data block")
-/* Share common array information */
-if (H5FA__hdr_incr(hdr) < 0)
- H5E_THROW(H5E_CANTINC, "can't increment reference count on shared array header")
-dblock->hdr = hdr;
+ /* Share common array information */
+ if (H5FA__hdr_incr(hdr) < 0)
+ H5E_THROW(H5E_CANTINC, "can't increment reference count on shared array header")
+ dblock->hdr = hdr;
-/* Set non-zero internal fields */
-dblock->dblk_page_nelmts = (size_t)1 << hdr->cparam.max_dblk_page_nelmts_bits;
+ /* Set non-zero internal fields */
+ dblock->dblk_page_nelmts = (size_t)1 << hdr->cparam.max_dblk_page_nelmts_bits;
-/* Check if this data block should be paged */
-if (hdr->cparam.nelmts > dblock->dblk_page_nelmts) {
- /* Compute number of pages */
- hsize_t npages = ((hdr->cparam.nelmts + dblock->dblk_page_nelmts) - 1) / dblock->dblk_page_nelmts;
+ /* Check if this data block should be paged */
+ if (hdr->cparam.nelmts > dblock->dblk_page_nelmts) {
+ /* Compute number of pages */
+ hsize_t npages = ((hdr->cparam.nelmts + dblock->dblk_page_nelmts) - 1) / dblock->dblk_page_nelmts;
- /* Safely assign the number of pages */
- H5_CHECKED_ASSIGN(dblock->npages, size_t, npages, hsize_t);
+ /* Safely assign the number of pages */
+ H5_CHECKED_ASSIGN(dblock->npages, size_t, npages, hsize_t);
- /* Sanity check that we have at least 1 page */
- HDassert(dblock->npages > 0);
+ /* Sanity check that we have at least 1 page */
+ HDassert(dblock->npages > 0);
- /* Compute size of 'page init' flag array, in bytes */
- dblock->dblk_page_init_size = (dblock->npages + 7) / 8;
- HDassert(dblock->dblk_page_init_size > 0);
+ /* Compute size of 'page init' flag array, in bytes */
+ dblock->dblk_page_init_size = (dblock->npages + 7) / 8;
+ HDassert(dblock->dblk_page_init_size > 0);
- /* Allocate space for 'page init' flags */
- if (NULL == (dblock->dblk_page_init = H5FL_BLK_CALLOC(fa_page_init, dblock->dblk_page_init_size)))
- H5E_THROW(H5E_CANTALLOC, "memory allocation failed for page init bitmask")
+ /* Allocate space for 'page init' flags */
+ if (NULL == (dblock->dblk_page_init = H5FL_BLK_CALLOC(fa_page_init, dblock->dblk_page_init_size)))
+ H5E_THROW(H5E_CANTALLOC, "memory allocation failed for page init bitmask")
- /* Compute data block page size */
- dblock->dblk_page_size = (dblock->dblk_page_nelmts * hdr->cparam.raw_elmt_size) + H5FA_SIZEOF_CHKSUM;
+ /* Compute data block page size */
+ dblock->dblk_page_size = (dblock->dblk_page_nelmts * hdr->cparam.raw_elmt_size) + H5FA_SIZEOF_CHKSUM;
- /* Compute the # of elements on last page */
- if (0 == hdr->cparam.nelmts % dblock->dblk_page_nelmts)
- dblock->last_page_nelmts = dblock->dblk_page_nelmts;
- else
- dblock->last_page_nelmts = (size_t)(hdr->cparam.nelmts % dblock->dblk_page_nelmts);
-} /* end if */
-else {
- hsize_t dblk_size = hdr->cparam.nelmts * hdr->cparam.cls->nat_elmt_size;
+ /* Compute the # of elements on last page */
+ if (0 == hdr->cparam.nelmts % dblock->dblk_page_nelmts)
+ dblock->last_page_nelmts = dblock->dblk_page_nelmts;
+ else
+ dblock->last_page_nelmts = (size_t)(hdr->cparam.nelmts % dblock->dblk_page_nelmts);
+ } /* end if */
+ else {
+ hsize_t dblk_size = hdr->cparam.nelmts * hdr->cparam.cls->nat_elmt_size;
- /* Allocate buffer for elements in data block */
- H5_CHECK_OVERFLOW(dblk_size, /* From: */ hsize_t, /* To: */ size_t);
- if (NULL == (dblock->elmts = H5FL_BLK_MALLOC(chunk_elmts, (size_t)dblk_size)))
- H5E_THROW(H5E_CANTALLOC, "memory allocation failed for data block element buffer")
-} /* end else */
+ /* Allocate buffer for elements in data block */
+ H5_CHECK_OVERFLOW(dblk_size, /* From: */ hsize_t, /* To: */ size_t);
+ if (NULL == (dblock->elmts = H5FL_BLK_MALLOC(chunk_elmts, (size_t)dblk_size)))
+ H5E_THROW(H5E_CANTALLOC, "memory allocation failed for data block element buffer")
+ } /* end else */
-/* Set the return value */
-ret_value = dblock;
+ /* Set the return value */
+ ret_value = dblock;
-CATCH
+ CATCH
-if (!ret_value)
- if (dblock && H5FA__dblock_dest(dblock) < 0)
- H5E_THROW(H5E_CANTFREE, "unable to destroy fixed array data block")
+ if (!ret_value)
+ if (dblock && H5FA__dblock_dest(dblock) < 0)
+ H5E_THROW(H5E_CANTFREE, "unable to destroy fixed array data block")
END_FUNC(PKG) /* end H5FA__dblock_alloc() */
@@ -172,70 +172,70 @@ END_FUNC(PKG) /* end H5FA__dblock_alloc() */
BEGIN_FUNC(PKG, ERR, haddr_t, HADDR_UNDEF, HADDR_UNDEF,
H5FA__dblock_create(H5FA_hdr_t *hdr, hbool_t *hdr_dirty))
-/* Local variables */
-H5FA_dblock_t *dblock = NULL; /* Fixed array data block */
-haddr_t dblock_addr; /* Fixed array data block address */
-hbool_t inserted = FALSE; /* Whether the header was inserted into cache */
-
-/* Sanity check */
-HDassert(hdr);
-HDassert(hdr_dirty);
-
-/* Allocate the data block */
-if (NULL == (dblock = H5FA__dblock_alloc(hdr)))
- H5E_THROW(H5E_CANTALLOC, "memory allocation failed for fixed array data block")
-
-/* Set size of data block on disk */
-hdr->stats.dblk_size = dblock->size = H5FA_DBLOCK_SIZE(dblock);
-
-/* Allocate space for the data block on disk */
-if (HADDR_UNDEF == (dblock_addr = H5MF_alloc(hdr->f, H5FD_MEM_FARRAY_DBLOCK, (hsize_t)dblock->size)))
- H5E_THROW(H5E_CANTALLOC, "file allocation failed for fixed 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)hdr->cparam.nelmts) < 0)
- H5E_THROW(H5E_CANTSET, "can't set fixed array data block elements to class's fill value")
-
-/* Cache the new fixed array data block */
-if (H5AC_insert_entry(hdr->f, H5AC_FARRAY_DBLOCK, dblock_addr, dblock, H5AC__NO_FLAGS_SET) < 0)
- H5E_THROW(H5E_CANTINSERT, "can't add fixed 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 fixed array entry as child of array proxy")
- dblock->top_proxy = hdr->top_proxy;
-} /* end if */
-
-/* Mark the header dirty (for updating statistics) */
-*hdr_dirty = TRUE;
-
-/* Set address of data block to return */
-ret_value = dblock_addr;
-
-CATCH
-
-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 fixed array data block from cache")
-
- /* Release data block's disk space */
- if (H5F_addr_defined(dblock->addr) &&
- H5MF_xfree(hdr->f, H5FD_MEM_FARRAY_DBLOCK, dblock->addr, (hsize_t)dblock->size) < 0)
- H5E_THROW(H5E_CANTFREE, "unable to release fixed array data block")
-
- /* Destroy data block */
- if (H5FA__dblock_dest(dblock) < 0)
- H5E_THROW(H5E_CANTFREE, "unable to destroy fixed array data block")
+ /* Local variables */
+ H5FA_dblock_t *dblock = NULL; /* Fixed array data block */
+ haddr_t dblock_addr; /* Fixed array data block address */
+ hbool_t inserted = FALSE; /* Whether the header was inserted into cache */
+
+ /* Sanity check */
+ HDassert(hdr);
+ HDassert(hdr_dirty);
+
+ /* Allocate the data block */
+ if (NULL == (dblock = H5FA__dblock_alloc(hdr)))
+ H5E_THROW(H5E_CANTALLOC, "memory allocation failed for fixed array data block")
+
+ /* Set size of data block on disk */
+ hdr->stats.dblk_size = dblock->size = H5FA_DBLOCK_SIZE(dblock);
+
+ /* Allocate space for the data block on disk */
+ if (HADDR_UNDEF == (dblock_addr = H5MF_alloc(hdr->f, H5FD_MEM_FARRAY_DBLOCK, (hsize_t)dblock->size)))
+ H5E_THROW(H5E_CANTALLOC, "file allocation failed for fixed 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)hdr->cparam.nelmts) < 0)
+ H5E_THROW(H5E_CANTSET, "can't set fixed array data block elements to class's fill value")
+
+ /* Cache the new fixed array data block */
+ if (H5AC_insert_entry(hdr->f, H5AC_FARRAY_DBLOCK, dblock_addr, dblock, H5AC__NO_FLAGS_SET) < 0)
+ H5E_THROW(H5E_CANTINSERT, "can't add fixed 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 fixed array entry as child of array proxy")
+ dblock->top_proxy = hdr->top_proxy;
} /* end if */
+ /* Mark the header dirty (for updating statistics) */
+ *hdr_dirty = TRUE;
+
+ /* Set address of data block to return */
+ ret_value = dblock_addr;
+
+ CATCH
+
+ 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 fixed array data block from cache")
+
+ /* Release data block's disk space */
+ if (H5F_addr_defined(dblock->addr) &&
+ H5MF_xfree(hdr->f, H5FD_MEM_FARRAY_DBLOCK, dblock->addr, (hsize_t)dblock->size) < 0)
+ H5E_THROW(H5E_CANTFREE, "unable to release fixed array data block")
+
+ /* Destroy data block */
+ if (H5FA__dblock_dest(dblock) < 0)
+ H5E_THROW(H5E_CANTFREE, "unable to destroy fixed array data block")
+ } /* end if */
+
END_FUNC(PKG) /* end H5FA__dblock_create() */
/*-------------------------------------------------------------------------
@@ -253,45 +253,47 @@ END_FUNC(PKG) /* end H5FA__dblock_create() */
BEGIN_FUNC(PKG, ERR, H5FA_dblock_t *, NULL, NULL,
H5FA__dblock_protect(H5FA_hdr_t *hdr, haddr_t dblk_addr, unsigned flags))
-/* Local variables */
-H5FA_dblock_t * dblock; /* Fixed array data block */
-H5FA_dblock_cache_ud_t udata; /* Information needed for loading data block */
-
-/* Sanity check */
-HDassert(hdr);
-HDassert(H5F_addr_defined(dblk_addr));
-
-/* only the H5AC__READ_ONLY_FLAG flag is permitted */
-HDassert((flags & (unsigned)(~H5AC__READ_ONLY_FLAG)) == 0);
-
-/* Set up user data */
-udata.hdr = hdr;
-udata.dblk_addr = dblk_addr;
-
-/* Protect the data block */
-if (NULL == (dblock = (H5FA_dblock_t *)H5AC_protect(hdr->f, H5AC_FARRAY_DBLOCK, dblk_addr, &udata, flags)))
- H5E_THROW(H5E_CANTPROTECT, "unable to protect fixed 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 fixed array entry as child of array proxy")
- dblock->top_proxy = hdr->top_proxy;
-} /* end if */
+ /* Local variables */
+ H5FA_dblock_t * dblock; /* Fixed array data block */
+ H5FA_dblock_cache_ud_t udata; /* Information needed for loading data block */
+
+ /* Sanity check */
+ HDassert(hdr);
+ HDassert(H5F_addr_defined(dblk_addr));
+
+ /* only the H5AC__READ_ONLY_FLAG flag is permitted */
+ HDassert((flags & (unsigned)(~H5AC__READ_ONLY_FLAG)) == 0);
+
+ /* Set up user data */
+ udata.hdr = hdr;
+ udata.dblk_addr = dblk_addr;
+
+ /* Protect the data block */
+ if (NULL ==
+ (dblock = (H5FA_dblock_t *)H5AC_protect(hdr->f, H5AC_FARRAY_DBLOCK, dblk_addr, &udata, flags)))
+ H5E_THROW(H5E_CANTPROTECT, "unable to protect fixed 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 fixed array entry as child of array proxy")
+ dblock->top_proxy = hdr->top_proxy;
+ } /* end if */
-/* Set return value */
-ret_value = dblock;
+ /* Set return value */
+ ret_value = dblock;
-CATCH
+ CATCH
-/* Clean up on error */
-if (!ret_value)
- /* Release the data block, if it was protected */
- if (dblock && H5AC_unprotect(hdr->f, H5AC_FARRAY_DBLOCK, dblock->addr, dblock, H5AC__NO_FLAGS_SET) < 0)
- H5E_THROW(H5E_CANTUNPROTECT, "unable to unprotect fixed array data block, address = %llu",
- (unsigned long long)dblock->addr)
+ /* Clean up on error */
+ if (!ret_value)
+ /* Release the data block, if it was protected */
+ if (dblock &&
+ H5AC_unprotect(hdr->f, H5AC_FARRAY_DBLOCK, dblock->addr, dblock, H5AC__NO_FLAGS_SET) < 0)
+ H5E_THROW(H5E_CANTUNPROTECT, "unable to unprotect fixed array data block, address = %llu",
+ (unsigned long long)dblock->addr)
END_FUNC(PKG) /* end H5FA__dblock_protect() */
@@ -310,17 +312,17 @@ END_FUNC(PKG) /* end H5FA__dblock_protect() */
BEGIN_FUNC(PKG, ERR, herr_t, SUCCEED, FAIL,
H5FA__dblock_unprotect(H5FA_dblock_t *dblock, unsigned cache_flags))
-/* Local variables */
+ /* Local variables */
-/* Sanity check */
-HDassert(dblock);
+ /* Sanity check */
+ HDassert(dblock);
-/* Unprotect the data block */
-if (H5AC_unprotect(dblock->hdr->f, H5AC_FARRAY_DBLOCK, dblock->addr, dblock, cache_flags) < 0)
- H5E_THROW(H5E_CANTUNPROTECT, "unable to unprotect fixed array data block, address = %llu",
- (unsigned long long)dblock->addr)
+ /* Unprotect the data block */
+ if (H5AC_unprotect(dblock->hdr->f, H5AC_FARRAY_DBLOCK, dblock->addr, dblock, cache_flags) < 0)
+ H5E_THROW(H5E_CANTUNPROTECT, "unable to unprotect fixed array data block, address = %llu",
+ (unsigned long long)dblock->addr)
-CATCH
+ CATCH
END_FUNC(PKG) /* end H5FA__dblock_unprotect() */
@@ -338,44 +340,44 @@ END_FUNC(PKG) /* end H5FA__dblock_unprotect() */
*/
BEGIN_FUNC(PKG, ERR, herr_t, SUCCEED, FAIL, H5FA__dblock_delete(H5FA_hdr_t *hdr, haddr_t dblk_addr))
-/* Local variables */
-H5FA_dblock_t *dblock = NULL; /* Pointer to data block */
+ /* Local variables */
+ H5FA_dblock_t *dblock = NULL; /* Pointer to data block */
-/* Sanity check */
-HDassert(hdr);
-HDassert(H5F_addr_defined(dblk_addr));
+ /* Sanity check */
+ HDassert(hdr);
+ HDassert(H5F_addr_defined(dblk_addr));
-/* Protect data block */
-if (NULL == (dblock = H5FA__dblock_protect(hdr, dblk_addr, H5AC__NO_FLAGS_SET)))
- H5E_THROW(H5E_CANTPROTECT, "unable to protect fixed array data block, address = %llu",
- (unsigned long long)dblk_addr)
+ /* Protect data block */
+ if (NULL == (dblock = H5FA__dblock_protect(hdr, dblk_addr, H5AC__NO_FLAGS_SET)))
+ H5E_THROW(H5E_CANTPROTECT, "unable to protect fixed array data block, address = %llu",
+ (unsigned long long)dblk_addr)
-/* Check if data block is paged */
-if (dblock->npages) {
- haddr_t dblk_page_addr; /* Address of each data block page */
- size_t u; /* Local index variable */
+ /* Check if data block is paged */
+ if (dblock->npages) {
+ haddr_t dblk_page_addr; /* Address of each data block page */
+ size_t u; /* Local index variable */
- /* Set up initial state */
- dblk_page_addr = dblk_addr + H5FA_DBLOCK_PREFIX_SIZE(dblock);
+ /* Set up initial state */
+ dblk_page_addr = dblk_addr + H5FA_DBLOCK_PREFIX_SIZE(dblock);
- /* Iterate over pages in data block */
- for (u = 0; u < dblock->npages; u++) {
- /* 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_FARRAY_DBLK_PAGE, dblk_page_addr, H5AC__NO_FLAGS_SET) < 0)
- H5E_THROW(H5E_CANTEXPUNGE, "unable to remove array data block page from metadata cache")
+ /* Iterate over pages in data block */
+ for (u = 0; u < dblock->npages; u++) {
+ /* 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_FARRAY_DBLK_PAGE, dblk_page_addr, H5AC__NO_FLAGS_SET) < 0)
+ H5E_THROW(H5E_CANTEXPUNGE, "unable to remove array data block page from metadata cache")
- /* Advance to next page address */
- dblk_page_addr += dblock->dblk_page_size;
- } /* end for */
-} /* end if */
+ /* Advance to next page address */
+ dblk_page_addr += dblock->dblk_page_size;
+ } /* end for */
+ } /* end if */
-CATCH
+ CATCH
-/* Finished deleting data block in metadata cache */
-if (dblock &&
- H5FA__dblock_unprotect(dblock, H5AC__DIRTIED_FLAG | H5AC__DELETED_FLAG | H5AC__FREE_FILE_SPACE_FLAG) < 0)
- H5E_THROW(H5E_CANTUNPROTECT, "unable to release fixed array data block")
+ /* Finished deleting data block in metadata cache */
+ if (dblock && H5FA__dblock_unprotect(dblock, H5AC__DIRTIED_FLAG | H5AC__DELETED_FLAG |
+ H5AC__FREE_FILE_SPACE_FLAG) < 0)
+ H5E_THROW(H5E_CANTUNPROTECT, "unable to release fixed array data block")
END_FUNC(PKG) /* end H5FA__dblock_delete() */
@@ -393,38 +395,38 @@ END_FUNC(PKG) /* end H5FA__dblock_delete() */
*/
BEGIN_FUNC(PKG, ERR, herr_t, SUCCEED, FAIL, H5FA__dblock_dest(H5FA_dblock_t *dblock))
-/* Sanity check */
-HDassert(dblock);
-
-/* Check if shared header field has been initialized */
-if (dblock->hdr) {
- /* Check if we've got elements in the data block */
- if (dblock->elmts && !dblock->npages) {
- /* Free buffer for data block elements */
- HDassert(dblock->hdr->cparam.nelmts > 0);
- dblock->elmts = H5FL_BLK_FREE(chunk_elmts, dblock->elmts);
+ /* Sanity check */
+ HDassert(dblock);
+
+ /* Check if shared header field has been initialized */
+ if (dblock->hdr) {
+ /* Check if we've got elements in the data block */
+ if (dblock->elmts && !dblock->npages) {
+ /* Free buffer for data block elements */
+ HDassert(dblock->hdr->cparam.nelmts > 0);
+ dblock->elmts = H5FL_BLK_FREE(chunk_elmts, dblock->elmts);
+ } /* end if */
+
+ /* Check if data block is paged */
+ if (dblock->npages) {
+ /* Free buffer for 'page init' bitmask, if there is one */
+ HDassert(dblock->dblk_page_init_size > 0);
+ if (dblock->dblk_page_init)
+ dblock->dblk_page_init = H5FL_BLK_FREE(fa_page_init, dblock->dblk_page_init);
+ } /* end if */
+
+ /* Decrement reference count on shared info */
+ if (H5FA__hdr_decr(dblock->hdr) < 0)
+ H5E_THROW(H5E_CANTDEC, "can't decrement reference count on shared array header")
+ dblock->hdr = NULL;
} /* end if */
- /* Check if data block is paged */
- if (dblock->npages) {
- /* Free buffer for 'page init' bitmask, if there is one */
- HDassert(dblock->dblk_page_init_size > 0);
- if (dblock->dblk_page_init)
- dblock->dblk_page_init = H5FL_BLK_FREE(fa_page_init, dblock->dblk_page_init);
- } /* end if */
-
- /* Decrement reference count on shared info */
- if (H5FA__hdr_decr(dblock->hdr) < 0)
- H5E_THROW(H5E_CANTDEC, "can't decrement reference count on shared array header")
- dblock->hdr = NULL;
-} /* end if */
-
-/* Sanity check */
-HDassert(NULL == dblock->top_proxy);
+ /* Sanity check */
+ HDassert(NULL == dblock->top_proxy);
-/* Free the data block itself */
-dblock = H5FL_FREE(H5FA_dblock_t, dblock);
+ /* Free the data block itself */
+ dblock = H5FL_FREE(H5FA_dblock_t, dblock);
-CATCH
+ CATCH
END_FUNC(PKG) /* end H5FA__dblock_dest() */
diff --git a/src/H5FAhdr.c b/src/H5FAhdr.c
index 9e9faee..f9049f8 100644
--- a/src/H5FAhdr.c
+++ b/src/H5FAhdr.c
@@ -84,33 +84,33 @@ H5FL_DEFINE_STATIC(H5FA_hdr_t);
*/
BEGIN_FUNC(PKG, ERR, H5FA_hdr_t *, NULL, NULL, H5FA__hdr_alloc(H5F_t *f))
-/* Local variables */
-H5FA_hdr_t *hdr = NULL; /* Shared Fixed Array header */
+ /* Local variables */
+ H5FA_hdr_t *hdr = NULL; /* Shared Fixed Array header */
-/* Check arguments */
-HDassert(f);
+ /* Check arguments */
+ HDassert(f);
-/* Allocate space for the shared information */
-if (NULL == (hdr = H5FL_CALLOC(H5FA_hdr_t)))
- H5E_THROW(H5E_CANTALLOC, "memory allocation failed for Fixed Array shared header")
+ /* Allocate space for the shared information */
+ if (NULL == (hdr = H5FL_CALLOC(H5FA_hdr_t)))
+ H5E_THROW(H5E_CANTALLOC, "memory allocation failed for Fixed Array shared header")
-/* Set non-zero internal fields */
-hdr->addr = HADDR_UNDEF;
+ /* Set non-zero internal fields */
+ hdr->addr = HADDR_UNDEF;
-/* Set the internal parameters for the array */
-hdr->f = f;
-hdr->swmr_write = (H5F_INTENT(f) & H5F_ACC_SWMR_WRITE) > 0;
-hdr->sizeof_addr = H5F_SIZEOF_ADDR(f);
-hdr->sizeof_size = H5F_SIZEOF_SIZE(f);
+ /* Set the internal parameters for the array */
+ hdr->f = f;
+ hdr->swmr_write = (H5F_INTENT(f) & H5F_ACC_SWMR_WRITE) > 0;
+ hdr->sizeof_addr = H5F_SIZEOF_ADDR(f);
+ hdr->sizeof_size = H5F_SIZEOF_SIZE(f);
-/* Set the return value */
-ret_value = hdr;
+ /* Set the return value */
+ ret_value = hdr;
-CATCH
+ CATCH
-if (!ret_value)
- if (hdr && H5FA__hdr_dest(hdr) < 0)
- H5E_THROW(H5E_CANTFREE, "unable to destroy fixed array header")
+ if (!ret_value)
+ if (hdr && H5FA__hdr_dest(hdr) < 0)
+ H5E_THROW(H5E_CANTFREE, "unable to destroy fixed array header")
END_FUNC(PKG) /* end H5FA__hdr_alloc() */
@@ -128,24 +128,24 @@ END_FUNC(PKG) /* end H5FA__hdr_alloc() */
*/
BEGIN_FUNC(PKG, ERR, herr_t, SUCCEED, FAIL, H5FA__hdr_init(H5FA_hdr_t *hdr, void *ctx_udata))
-/* Local variables */
+ /* Local variables */
-/* Check arguments */
-HDassert(hdr);
+ /* Check arguments */
+ HDassert(hdr);
-/* Set size of header on disk (locally and in statistics) */
-hdr->stats.hdr_size = hdr->size = H5FA_HEADER_SIZE_HDR(hdr);
+ /* Set size of header on disk (locally and in statistics) */
+ hdr->stats.hdr_size = hdr->size = H5FA_HEADER_SIZE_HDR(hdr);
-/* Set number of elements for Fixed Array in statistics */
-hdr->stats.nelmts = hdr->cparam.nelmts;
+ /* Set number of elements for Fixed Array in statistics */
+ hdr->stats.nelmts = hdr->cparam.nelmts;
-/* Create the callback context, if there's one */
-if (hdr->cparam.cls->crt_context) {
- if (NULL == (hdr->cb_ctx = (*hdr->cparam.cls->crt_context)(ctx_udata)))
- H5E_THROW(H5E_CANTCREATE, "unable to create fixed array client callback context")
-} /* end if */
+ /* Create the callback context, if there's one */
+ if (hdr->cparam.cls->crt_context) {
+ if (NULL == (hdr->cb_ctx = (*hdr->cparam.cls->crt_context)(ctx_udata)))
+ H5E_THROW(H5E_CANTCREATE, "unable to create fixed array client callback context")
+ } /* end if */
-CATCH
+ CATCH
END_FUNC(PKG) /* end H5FA__hdr_init() */
@@ -164,79 +164,79 @@ END_FUNC(PKG) /* end H5FA__hdr_init() */
BEGIN_FUNC(PKG, ERR, haddr_t, HADDR_UNDEF, HADDR_UNDEF,
H5FA__hdr_create(H5F_t *f, const H5FA_create_t *cparam, void *ctx_udata))
-/* Local variables */
-H5FA_hdr_t *hdr = NULL; /* Fixed array header */
-hbool_t inserted = FALSE; /* Whether the header was inserted into cache */
+ /* Local variables */
+ H5FA_hdr_t *hdr = NULL; /* Fixed array header */
+ hbool_t inserted = FALSE; /* Whether the header was inserted into cache */
-/* Check arguments */
-HDassert(f);
-HDassert(cparam);
+ /* Check arguments */
+ HDassert(f);
+ HDassert(cparam);
#ifndef NDEBUG
-{
- /* Check for valid parameters */
- if (cparam->raw_elmt_size == 0)
- H5E_THROW(H5E_BADVALUE, "element size must be greater than zero")
- if (cparam->max_dblk_page_nelmts_bits == 0)
- H5E_THROW(H5E_BADVALUE, "max. # of elements bits must be greater than zero")
- if (cparam->nelmts == 0)
- H5E_THROW(H5E_BADVALUE, "# of elements must be greater than zero")
-}
+ {
+ /* Check for valid parameters */
+ if (cparam->raw_elmt_size == 0)
+ H5E_THROW(H5E_BADVALUE, "element size must be greater than zero")
+ if (cparam->max_dblk_page_nelmts_bits == 0)
+ H5E_THROW(H5E_BADVALUE, "max. # of elements bits must be greater than zero")
+ if (cparam->nelmts == 0)
+ H5E_THROW(H5E_BADVALUE, "# of elements must be greater than zero")
+ }
#endif /* NDEBUG */
-/* Allocate space for the shared information */
-if (NULL == (hdr = H5FA__hdr_alloc(f)))
- H5E_THROW(H5E_CANTALLOC, "memory allocation failed for Fixed Array shared header")
+ /* Allocate space for the shared information */
+ if (NULL == (hdr = H5FA__hdr_alloc(f)))
+ H5E_THROW(H5E_CANTALLOC, "memory allocation failed for Fixed Array shared header")
-hdr->dblk_addr = HADDR_UNDEF;
+ hdr->dblk_addr = HADDR_UNDEF;
-/* Set the creation parameters for the array */
-H5MM_memcpy(&hdr->cparam, cparam, sizeof(hdr->cparam));
+ /* Set the creation parameters for the array */
+ H5MM_memcpy(&hdr->cparam, cparam, sizeof(hdr->cparam));
-/* Finish initializing fixed array header */
-if (H5FA__hdr_init(hdr, ctx_udata) < 0)
- H5E_THROW(H5E_CANTINIT, "initialization failed for fixed array header")
+ /* Finish initializing fixed array header */
+ if (H5FA__hdr_init(hdr, ctx_udata) < 0)
+ H5E_THROW(H5E_CANTINIT, "initialization failed for fixed array header")
-/* Allocate space for the header on disk */
-if (HADDR_UNDEF == (hdr->addr = H5MF_alloc(f, H5FD_MEM_FARRAY_HDR, (hsize_t)hdr->size)))
- H5E_THROW(H5E_CANTALLOC, "file allocation failed for Fixed Array header")
+ /* Allocate space for the header on disk */
+ if (HADDR_UNDEF == (hdr->addr = H5MF_alloc(f, H5FD_MEM_FARRAY_HDR, (hsize_t)hdr->size)))
+ H5E_THROW(H5E_CANTALLOC, "file allocation failed for Fixed Array header")
-/* Create 'top' proxy for extensible array entries */
-if (hdr->swmr_write)
- if (NULL == (hdr->top_proxy = H5AC_proxy_entry_create()))
- H5E_THROW(H5E_CANTCREATE, "can't create fixed array entry proxy")
+ /* Create 'top' proxy for extensible array entries */
+ if (hdr->swmr_write)
+ if (NULL == (hdr->top_proxy = H5AC_proxy_entry_create()))
+ H5E_THROW(H5E_CANTCREATE, "can't create fixed array entry proxy")
-/* Cache the new Fixed Array header */
-if (H5AC_insert_entry(f, H5AC_FARRAY_HDR, hdr->addr, hdr, H5AC__NO_FLAGS_SET) < 0)
- H5E_THROW(H5E_CANTINSERT, "can't add fixed array header to cache")
-inserted = TRUE;
+ /* Cache the new Fixed Array header */
+ if (H5AC_insert_entry(f, H5AC_FARRAY_HDR, hdr->addr, hdr, H5AC__NO_FLAGS_SET) < 0)
+ H5E_THROW(H5E_CANTINSERT, "can't add fixed array header to cache")
+ inserted = TRUE;
-/* Add header as child of 'top' proxy */
-if (hdr->top_proxy)
- if (H5AC_proxy_entry_add_child(hdr->top_proxy, f, hdr) < 0)
- H5E_THROW(H5E_CANTSET, "unable to add fixed array entry as child of array proxy")
+ /* Add header as child of 'top' proxy */
+ if (hdr->top_proxy)
+ if (H5AC_proxy_entry_add_child(hdr->top_proxy, f, hdr) < 0)
+ H5E_THROW(H5E_CANTSET, "unable to add fixed array entry as child of array proxy")
-/* Set address of array header to return */
-ret_value = hdr->addr;
+ /* Set address of array header to return */
+ ret_value = hdr->addr;
-CATCH
+ CATCH
-if (!H5F_addr_defined(ret_value))
- if (hdr) {
- /* Remove from cache, if inserted */
- if (inserted)
- if (H5AC_remove_entry(hdr) < 0)
- H5E_THROW(H5E_CANTREMOVE, "unable to remove fixed array header from cache")
+ if (!H5F_addr_defined(ret_value))
+ if (hdr) {
+ /* Remove from cache, if inserted */
+ if (inserted)
+ if (H5AC_remove_entry(hdr) < 0)
+ H5E_THROW(H5E_CANTREMOVE, "unable to remove fixed array header from cache")
- /* Release header's disk space */
- if (H5F_addr_defined(hdr->addr) &&
- H5MF_xfree(f, H5FD_MEM_FARRAY_HDR, hdr->addr, (hsize_t)hdr->size) < 0)
- H5E_THROW(H5E_CANTFREE, "unable to free Fixed Array header")
+ /* Release header's disk space */
+ if (H5F_addr_defined(hdr->addr) &&
+ H5MF_xfree(f, H5FD_MEM_FARRAY_HDR, hdr->addr, (hsize_t)hdr->size) < 0)
+ H5E_THROW(H5E_CANTFREE, "unable to free Fixed Array header")
- /* Destroy header */
- if (H5FA__hdr_dest(hdr) < 0)
- H5E_THROW(H5E_CANTFREE, "unable to destroy Fixed Array header")
- } /* end if */
+ /* Destroy header */
+ if (H5FA__hdr_dest(hdr) < 0)
+ H5E_THROW(H5E_CANTFREE, "unable to destroy Fixed Array header")
+ } /* end if */
END_FUNC(PKG) /* end H5FA__hdr_create() */
@@ -254,18 +254,18 @@ END_FUNC(PKG) /* end H5FA__hdr_create() */
*/
BEGIN_FUNC(PKG, ERR, herr_t, SUCCEED, FAIL, H5FA__hdr_incr(H5FA_hdr_t *hdr))
-/* Sanity check */
-HDassert(hdr);
+ /* Sanity check */
+ HDassert(hdr);
-/* Mark header as un-evictable when something is depending on it */
-if (hdr->rc == 0)
- if (H5AC_pin_protected_entry(hdr) < 0)
- H5E_THROW(H5E_CANTPIN, "unable to pin fixed array header")
+ /* Mark header as un-evictable when something is depending on it */
+ if (hdr->rc == 0)
+ if (H5AC_pin_protected_entry(hdr) < 0)
+ H5E_THROW(H5E_CANTPIN, "unable to pin fixed array header")
-/* Increment reference count on shared header */
-hdr->rc++;
+ /* Increment reference count on shared header */
+ hdr->rc++;
-CATCH
+ CATCH
END_FUNC(PKG) /* end H5FA__hdr_incr() */
@@ -283,21 +283,21 @@ END_FUNC(PKG) /* end H5FA__hdr_incr() */
*/
BEGIN_FUNC(PKG, ERR, herr_t, SUCCEED, FAIL, H5FA__hdr_decr(H5FA_hdr_t *hdr))
-/* Sanity check */
-HDassert(hdr);
-HDassert(hdr->rc);
+ /* Sanity check */
+ HDassert(hdr);
+ HDassert(hdr->rc);
-/* Decrement reference count on shared header */
-hdr->rc--;
+ /* Decrement reference count on shared header */
+ hdr->rc--;
-/* Mark header as evictable again when nothing depend on it */
-if (hdr->rc == 0) {
- HDassert(hdr->file_rc == 0);
- if (H5AC_unpin_entry(hdr) < 0)
- H5E_THROW(H5E_CANTUNPIN, "unable to unpin fixed array header")
-} /* end if */
+ /* Mark header as evictable again when nothing depend on it */
+ if (hdr->rc == 0) {
+ HDassert(hdr->file_rc == 0);
+ if (H5AC_unpin_entry(hdr) < 0)
+ H5E_THROW(H5E_CANTUNPIN, "unable to unpin fixed array header")
+ } /* end if */
-CATCH
+ CATCH
END_FUNC(PKG) /* end H5FA__hdr_decr() */
@@ -315,11 +315,11 @@ END_FUNC(PKG) /* end H5FA__hdr_decr() */
*/
BEGIN_FUNC(PKG, NOERR, herr_t, SUCCEED, -, H5FA__hdr_fuse_incr(H5FA_hdr_t *hdr))
-/* Sanity check */
-HDassert(hdr);
+ /* Sanity check */
+ HDassert(hdr);
-/* Increment file reference count on shared header */
-hdr->file_rc++;
+ /* Increment file reference count on shared header */
+ hdr->file_rc++;
END_FUNC(PKG) /* end H5FA__hdr_fuse_incr() */
@@ -337,15 +337,15 @@ END_FUNC(PKG) /* end H5FA__hdr_fuse_incr() */
*/
BEGIN_FUNC(PKG, NOERR, size_t, 0, -, H5FA__hdr_fuse_decr(H5FA_hdr_t *hdr))
-/* Sanity check */
-HDassert(hdr);
-HDassert(hdr->file_rc);
+ /* Sanity check */
+ HDassert(hdr);
+ HDassert(hdr->file_rc);
-/* Decrement file reference count on shared header */
-hdr->file_rc--;
+ /* Decrement file reference count on shared header */
+ hdr->file_rc--;
-/* Set return value */
-ret_value = hdr->file_rc;
+ /* Set return value */
+ ret_value = hdr->file_rc;
END_FUNC(PKG) /* end H5FA__hdr_fuse_decr() */
@@ -363,14 +363,14 @@ END_FUNC(PKG) /* end H5FA__hdr_fuse_decr() */
*/
BEGIN_FUNC(PKG, ERR, herr_t, SUCCEED, FAIL, H5FA__hdr_modified(H5FA_hdr_t *hdr))
-/* Sanity check */
-HDassert(hdr);
+ /* Sanity check */
+ HDassert(hdr);
-/* Mark header as dirty in cache */
-if (H5AC_mark_entry_dirty(hdr) < 0)
- H5E_THROW(H5E_CANTMARKDIRTY, "unable to mark fixed array header as dirty")
+ /* Mark header as dirty in cache */
+ if (H5AC_mark_entry_dirty(hdr) < 0)
+ H5E_THROW(H5E_CANTMARKDIRTY, "unable to mark fixed array header as dirty")
-CATCH
+ CATCH
END_FUNC(PKG) /* end H5FA__hdr_modified() */
@@ -389,43 +389,43 @@ END_FUNC(PKG) /* end H5FA__hdr_modified() */
BEGIN_FUNC(PKG, ERR, H5FA_hdr_t *, NULL, NULL,
H5FA__hdr_protect(H5F_t *f, haddr_t fa_addr, void *ctx_udata, unsigned flags))
-/* Local variables */
-H5FA_hdr_t * hdr; /* Fixed array header */
-H5FA_hdr_cache_ud_t udata; /* User data for cache callbacks */
-
-/* Sanity check */
-HDassert(f);
-HDassert(H5F_addr_defined(fa_addr));
-
-/* only the H5AC__READ_ONLY_FLAG is permitted */
-HDassert((flags & (unsigned)(~H5AC__READ_ONLY_FLAG)) == 0);
-
-/* Set up user data for cache callbacks */
-udata.f = f;
-udata.addr = fa_addr;
-udata.ctx_udata = ctx_udata;
-
-/* Protect the header */
-if (NULL == (hdr = (H5FA_hdr_t *)H5AC_protect(f, H5AC_FARRAY_HDR, fa_addr, &udata, flags)))
- H5E_THROW(H5E_CANTPROTECT, "unable to protect fixed array header, address = %llu",
- (unsigned long long)fa_addr)
-hdr->f = f; /* (Must be set again here, in case the header was already in the cache -QAK) */
-
-/* Create top proxy, if it doesn't exist */
-if (hdr->swmr_write && NULL == hdr->top_proxy) {
- /* Create 'top' proxy for fixed array entries */
- if (NULL == (hdr->top_proxy = H5AC_proxy_entry_create()))
- H5E_THROW(H5E_CANTCREATE, "can't create fixed array entry proxy")
-
- /* Add header as child of 'top' proxy */
- if (H5AC_proxy_entry_add_child(hdr->top_proxy, f, hdr) < 0)
- H5E_THROW(H5E_CANTSET, "unable to add fixed array entry as child of array proxy")
-} /* end if */
+ /* Local variables */
+ H5FA_hdr_t * hdr; /* Fixed array header */
+ H5FA_hdr_cache_ud_t udata; /* User data for cache callbacks */
+
+ /* Sanity check */
+ HDassert(f);
+ HDassert(H5F_addr_defined(fa_addr));
+
+ /* only the H5AC__READ_ONLY_FLAG is permitted */
+ HDassert((flags & (unsigned)(~H5AC__READ_ONLY_FLAG)) == 0);
+
+ /* Set up user data for cache callbacks */
+ udata.f = f;
+ udata.addr = fa_addr;
+ udata.ctx_udata = ctx_udata;
+
+ /* Protect the header */
+ if (NULL == (hdr = (H5FA_hdr_t *)H5AC_protect(f, H5AC_FARRAY_HDR, fa_addr, &udata, flags)))
+ H5E_THROW(H5E_CANTPROTECT, "unable to protect fixed array header, address = %llu",
+ (unsigned long long)fa_addr)
+ hdr->f = f; /* (Must be set again here, in case the header was already in the cache -QAK) */
+
+ /* Create top proxy, if it doesn't exist */
+ if (hdr->swmr_write && NULL == hdr->top_proxy) {
+ /* Create 'top' proxy for fixed array entries */
+ if (NULL == (hdr->top_proxy = H5AC_proxy_entry_create()))
+ H5E_THROW(H5E_CANTCREATE, "can't create fixed array entry proxy")
+
+ /* Add header as child of 'top' proxy */
+ if (H5AC_proxy_entry_add_child(hdr->top_proxy, f, hdr) < 0)
+ H5E_THROW(H5E_CANTSET, "unable to add fixed array entry as child of array proxy")
+ } /* end if */
-/* Set return value */
-ret_value = hdr;
+ /* Set return value */
+ ret_value = hdr;
-CATCH
+ CATCH
END_FUNC(PKG) /* end H5FA__hdr_protect() */
@@ -443,17 +443,17 @@ END_FUNC(PKG) /* end H5FA__hdr_protect() */
*/
BEGIN_FUNC(PKG, ERR, herr_t, SUCCEED, FAIL, H5FA__hdr_unprotect(H5FA_hdr_t *hdr, unsigned cache_flags))
-/* Local variables */
+ /* Local variables */
-/* Sanity check */
-HDassert(hdr);
+ /* Sanity check */
+ HDassert(hdr);
-/* Unprotect the header */
-if (H5AC_unprotect(hdr->f, H5AC_FARRAY_HDR, hdr->addr, hdr, cache_flags) < 0)
- H5E_THROW(H5E_CANTUNPROTECT, "unable to unprotect fixed array hdr, address = %llu",
- (unsigned long long)hdr->addr)
+ /* Unprotect the header */
+ if (H5AC_unprotect(hdr->f, H5AC_FARRAY_HDR, hdr->addr, hdr, cache_flags) < 0)
+ H5E_THROW(H5E_CANTUNPROTECT, "unable to unprotect fixed array hdr, address = %llu",
+ (unsigned long long)hdr->addr)
-CATCH
+ CATCH
END_FUNC(PKG) /* end H5FA__hdr_unprotect() */
@@ -471,42 +471,42 @@ END_FUNC(PKG) /* end H5FA__hdr_unprotect() */
*/
BEGIN_FUNC(PKG, ERR, herr_t, SUCCEED, FAIL, H5FA__hdr_delete(H5FA_hdr_t *hdr))
-/* Local variables */
-unsigned cache_flags = H5AC__NO_FLAGS_SET; /* Flags for unprotecting header */
+ /* Local variables */
+ unsigned cache_flags = H5AC__NO_FLAGS_SET; /* Flags for unprotecting header */
-/* Sanity check */
-HDassert(hdr);
-HDassert(!hdr->file_rc);
+ /* Sanity check */
+ HDassert(hdr);
+ HDassert(!hdr->file_rc);
#ifndef NDEBUG
-{
- unsigned hdr_status = 0; /* Array header's status in the metadata cache */
+ {
+ unsigned hdr_status = 0; /* Array header's status in the metadata cache */
- /* Check the array header's status in the metadata cache */
- if (H5AC_get_entry_status(hdr->f, hdr->addr, &hdr_status) < 0)
- H5E_THROW(H5E_CANTGET, "unable to check metadata cache status for array header")
+ /* Check the array header's status in the metadata cache */
+ if (H5AC_get_entry_status(hdr->f, hdr->addr, &hdr_status) < 0)
+ H5E_THROW(H5E_CANTGET, "unable to check metadata cache status for array header")
- /* Sanity checks on array header */
- HDassert(hdr_status & H5AC_ES__IN_CACHE);
- HDassert(hdr_status & H5AC_ES__IS_PROTECTED);
-} /* end block */
+ /* Sanity checks on array header */
+ HDassert(hdr_status & H5AC_ES__IN_CACHE);
+ HDassert(hdr_status & H5AC_ES__IS_PROTECTED);
+ } /* end block */
#endif /* NDEBUG */
-/* Check for Fixed Array Data block */
-if (H5F_addr_defined(hdr->dblk_addr)) {
- /* Delete Fixed Array Data block */
- if (H5FA__dblock_delete(hdr, hdr->dblk_addr) < 0)
- H5E_THROW(H5E_CANTDELETE, "unable to delete fixed array data block")
-} /* end if */
+ /* Check for Fixed Array Data block */
+ if (H5F_addr_defined(hdr->dblk_addr)) {
+ /* Delete Fixed Array Data block */
+ if (H5FA__dblock_delete(hdr, hdr->dblk_addr) < 0)
+ H5E_THROW(H5E_CANTDELETE, "unable to delete fixed array data block")
+ } /* end if */
-/* Set flags to finish deleting header on unprotect */
-cache_flags |= H5AC__DIRTIED_FLAG | H5AC__DELETED_FLAG | H5AC__FREE_FILE_SPACE_FLAG;
+ /* Set flags to finish deleting header on unprotect */
+ cache_flags |= H5AC__DIRTIED_FLAG | H5AC__DELETED_FLAG | H5AC__FREE_FILE_SPACE_FLAG;
-CATCH
+ CATCH
-/* Unprotect the header, deleting it if an error hasn't occurred */
-if (H5AC_unprotect(hdr->f, H5AC_FARRAY_HDR, hdr->addr, hdr, cache_flags) < 0)
- H5E_THROW(H5E_CANTUNPROTECT, "unable to release fixed array header")
+ /* Unprotect the header, deleting it if an error hasn't occurred */
+ if (H5AC_unprotect(hdr->f, H5AC_FARRAY_HDR, hdr->addr, hdr, cache_flags) < 0)
+ H5E_THROW(H5E_CANTUNPROTECT, "unable to release fixed array header")
END_FUNC(PKG) /* end H5FA__hdr_delete() */
@@ -524,27 +524,27 @@ END_FUNC(PKG) /* end H5FA__hdr_delete() */
*/
BEGIN_FUNC(PKG, ERR, herr_t, SUCCEED, FAIL, H5FA__hdr_dest(H5FA_hdr_t *hdr))
-/* Check arguments */
-HDassert(hdr);
-HDassert(hdr->rc == 0);
+ /* Check arguments */
+ HDassert(hdr);
+ HDassert(hdr->rc == 0);
-/* Destroy the callback context */
-if (hdr->cb_ctx) {
- if ((*hdr->cparam.cls->dst_context)(hdr->cb_ctx) < 0)
- H5E_THROW(H5E_CANTRELEASE, "unable to destroy fixed array client callback context")
-} /* end if */
-hdr->cb_ctx = NULL;
+ /* Destroy the callback context */
+ if (hdr->cb_ctx) {
+ if ((*hdr->cparam.cls->dst_context)(hdr->cb_ctx) < 0)
+ H5E_THROW(H5E_CANTRELEASE, "unable to destroy fixed array client callback context")
+ } /* end if */
+ hdr->cb_ctx = NULL;
-/* Destroy the 'top' proxy */
-if (hdr->top_proxy) {
- if (H5AC_proxy_entry_dest(hdr->top_proxy) < 0)
- H5E_THROW(H5E_CANTRELEASE, "unable to destroy fixed array 'top' proxy")
- hdr->top_proxy = NULL;
-} /* end if */
+ /* Destroy the 'top' proxy */
+ if (hdr->top_proxy) {
+ if (H5AC_proxy_entry_dest(hdr->top_proxy) < 0)
+ H5E_THROW(H5E_CANTRELEASE, "unable to destroy fixed array 'top' proxy")
+ hdr->top_proxy = NULL;
+ } /* end if */
-/* Free the shared info itself */
-hdr = H5FL_FREE(H5FA_hdr_t, hdr);
+ /* Free the shared info itself */
+ hdr = H5FL_FREE(H5FA_hdr_t, hdr);
-CATCH
+ CATCH
END_FUNC(PKG) /* end H5FA__hdr_dest() */
diff --git a/src/H5FAint.c b/src/H5FAint.c
index 7c357a9..c8e6826 100644
--- a/src/H5FAint.c
+++ b/src/H5FAint.c
@@ -82,15 +82,15 @@
BEGIN_FUNC(PKG, ERR, herr_t, SUCCEED, FAIL,
H5FA__create_flush_depend(H5AC_info_t *parent_entry, H5AC_info_t *child_entry))
-/* Sanity check */
-HDassert(parent_entry);
-HDassert(child_entry);
+ /* Sanity check */
+ HDassert(parent_entry);
+ HDassert(child_entry);
-/* Create a flush dependency between parent and child entry */
-if (H5AC_create_flush_dependency(parent_entry, child_entry) < 0)
- H5E_THROW(H5E_CANTDEPEND, "unable to create flush dependency")
+ /* Create a flush dependency between parent and child entry */
+ if (H5AC_create_flush_dependency(parent_entry, child_entry) < 0)
+ H5E_THROW(H5E_CANTDEPEND, "unable to create flush dependency")
-CATCH
+ CATCH
END_FUNC(PKG) /* end H5FA__create_flush_depend() */
@@ -109,14 +109,14 @@ END_FUNC(PKG) /* end H5FA__create_flush_depend() */
BEGIN_FUNC(PKG, ERR, herr_t, SUCCEED, FAIL,
H5FA__destroy_flush_depend(H5AC_info_t *parent_entry, H5AC_info_t *child_entry))
-/* Sanity check */
-HDassert(parent_entry);
-HDassert(child_entry);
+ /* Sanity check */
+ HDassert(parent_entry);
+ HDassert(child_entry);
-/* Destroy a flush dependency between parent and child entry */
-if (H5AC_destroy_flush_dependency(parent_entry, child_entry) < 0)
- H5E_THROW(H5E_CANTUNDEPEND, "unable to destroy flush dependency")
+ /* Destroy a flush dependency between parent and child entry */
+ if (H5AC_destroy_flush_dependency(parent_entry, child_entry) < 0)
+ H5E_THROW(H5E_CANTUNDEPEND, "unable to destroy flush dependency")
-CATCH
+ CATCH
END_FUNC(PKG) /* end H5FA__destroy_flush_depend() */
diff --git a/src/H5FAstat.c b/src/H5FAstat.c
index 775acbc..a625d3a 100644
--- a/src/H5FAstat.c
+++ b/src/H5FAstat.c
@@ -83,16 +83,16 @@ BEGIN_FUNC(PRIV, NOERR, herr_t, SUCCEED, -, H5FA_get_stats(const H5FA_t *fa, H5F
/* Local variables */
#ifdef H5FA_DEBUG
-HDfprintf(stderr, "%s: Called\n", FUNC);
+ HDfprintf(stderr, "%s: Called\n", FUNC);
#endif /* H5FA_DEBUG */
-/*
- * Check arguments.
- */
-HDassert(fa);
-HDassert(stats);
+ /*
+ * Check arguments.
+ */
+ HDassert(fa);
+ HDassert(stats);
-/* Copy fixed array statistics */
-H5MM_memcpy(stats, &fa->hdr->stats, sizeof(fa->hdr->stats));
+ /* Copy fixed array statistics */
+ H5MM_memcpy(stats, &fa->hdr->stats, sizeof(fa->hdr->stats));
END_FUNC(PRIV) /* end H5FA_get_stats() */
diff --git a/src/H5FAtest.c b/src/H5FAtest.c
index a6fd267..4da7d6f 100644
--- a/src/H5FAtest.c
+++ b/src/H5FAtest.c
@@ -114,20 +114,20 @@ H5FL_DEFINE_STATIC(H5FA__test_ctx_t);
*/
BEGIN_FUNC(STATIC, ERR, void *, NULL, NULL, H5FA__test_crt_context(void H5_ATTR_UNUSED *udata))
-/* Local variables */
-H5FA__test_ctx_t *ctx; /* Context for callbacks */
+ /* Local variables */
+ H5FA__test_ctx_t *ctx; /* Context for callbacks */
-/* Allocate new context structure */
-if (NULL == (ctx = H5FL_MALLOC(H5FA__test_ctx_t)))
- H5E_THROW(H5E_CANTALLOC, "can't allocate fixed array client callback context")
+ /* Allocate new context structure */
+ if (NULL == (ctx = H5FL_MALLOC(H5FA__test_ctx_t)))
+ H5E_THROW(H5E_CANTALLOC, "can't allocate fixed array client callback context")
-/* Initialize the context */
-ctx->bogus = H5FA__TEST_BOGUS_VAL;
+ /* Initialize the context */
+ ctx->bogus = H5FA__TEST_BOGUS_VAL;
-/* Set return value */
-ret_value = ctx;
+ /* Set return value */
+ ret_value = ctx;
-CATCH
+ CATCH
END_FUNC(STATIC) /* end H5FA__test_crt_context() */
@@ -145,14 +145,14 @@ END_FUNC(STATIC) /* end H5FA__test_crt_context() */
*/
BEGIN_FUNC(STATIC, NOERR, herr_t, SUCCEED, -, H5FA__test_dst_context(void *_ctx))
-/* Local variables */
-H5FA__test_ctx_t *ctx = (H5FA__test_ctx_t *)_ctx; /* Callback context to destroy */
+ /* Local variables */
+ H5FA__test_ctx_t *ctx = (H5FA__test_ctx_t *)_ctx; /* Callback context to destroy */
-/* Sanity checks */
-HDassert(H5FA__TEST_BOGUS_VAL == ctx->bogus);
+ /* Sanity checks */
+ HDassert(H5FA__TEST_BOGUS_VAL == ctx->bogus);
-/* Release context structure */
-ctx = H5FL_FREE(H5FA__test_ctx_t, ctx);
+ /* Release context structure */
+ ctx = H5FL_FREE(H5FA__test_ctx_t, ctx);
END_FUNC(STATIC) /* end H5FA__test_dst_context() */
@@ -170,14 +170,14 @@ END_FUNC(STATIC) /* end H5FA__test_dst_context() */
*/
BEGIN_FUNC(STATIC, NOERR, herr_t, SUCCEED, -, H5FA__test_fill(void *nat_blk, size_t nelmts))
-/* Local variables */
-uint64_t fill_val = H5FA_TEST_FILL; /* Value to fill elements with */
+ /* Local variables */
+ uint64_t fill_val = H5FA_TEST_FILL; /* Value to fill elements with */
-/* Sanity checks */
-HDassert(nat_blk);
-HDassert(nelmts);
+ /* Sanity checks */
+ HDassert(nat_blk);
+ HDassert(nelmts);
-H5VM_array_fill(nat_blk, &fill_val, sizeof(uint64_t), nelmts);
+ H5VM_array_fill(nat_blk, &fill_val, sizeof(uint64_t), nelmts);
END_FUNC(STATIC) /* end H5FA__test_fill() */
@@ -198,28 +198,28 @@ BEGIN_FUNC(STATIC, NOERR, herr_t, SUCCEED, -,
/* Local variables */
#ifndef NDEBUG
-H5FA__test_ctx_t *ctx = (H5FA__test_ctx_t *)_ctx; /* Callback context to destroy */
-#endif /* NDEBUG */
-const uint64_t *elmt = (const uint64_t *)_elmt; /* Convenience pointer to native elements */
+ H5FA__test_ctx_t *ctx = (H5FA__test_ctx_t *)_ctx; /* Callback context to destroy */
+#endif /* NDEBUG */
+ const uint64_t *elmt = (const uint64_t *)_elmt; /* Convenience pointer to native elements */
-/* Sanity checks */
-HDassert(raw);
-HDassert(elmt);
-HDassert(nelmts);
-HDassert(H5FA__TEST_BOGUS_VAL == ctx->bogus);
+ /* Sanity checks */
+ HDassert(raw);
+ HDassert(elmt);
+ HDassert(nelmts);
+ HDassert(H5FA__TEST_BOGUS_VAL == ctx->bogus);
-/* Encode native elements into raw elements */
-while (nelmts) {
- /* Encode element */
- /* (advances 'raw' pointer) */
- UINT64ENCODE(raw, *elmt);
+ /* Encode native elements into raw elements */
+ while (nelmts) {
+ /* Encode element */
+ /* (advances 'raw' pointer) */
+ UINT64ENCODE(raw, *elmt);
- /* Advance native element pointer */
- elmt++;
+ /* Advance native element pointer */
+ elmt++;
- /* Decrement # of elements to encode */
- nelmts--;
-} /* end while */
+ /* Decrement # of elements to encode */
+ nelmts--;
+ } /* end while */
END_FUNC(STATIC) /* end H5FA__test_encode() */
@@ -240,29 +240,29 @@ BEGIN_FUNC(STATIC, NOERR, herr_t, SUCCEED, -,
/* Local variables */
#ifndef NDEBUG
-H5FA__test_ctx_t *ctx = (H5FA__test_ctx_t *)_ctx; /* Callback context to destroy */
-#endif /* NDEBUG */
-uint64_t * elmt = (uint64_t *)_elmt; /* Convenience pointer to native elements */
-const uint8_t *raw = (const uint8_t *)_raw; /* Convenience pointer to raw elements */
-
-/* Sanity checks */
-HDassert(raw);
-HDassert(elmt);
-HDassert(nelmts);
-HDassert(H5FA__TEST_BOGUS_VAL == ctx->bogus);
-
-/* Decode raw elements into native elements */
-while (nelmts) {
- /* Decode element */
- /* (advances 'raw' pointer) */
- UINT64DECODE(raw, *elmt);
-
- /* Advance native element pointer */
- elmt++;
-
- /* Decrement # of elements to decode */
- nelmts--;
-} /* end while */
+ H5FA__test_ctx_t *ctx = (H5FA__test_ctx_t *)_ctx; /* Callback context to destroy */
+#endif /* NDEBUG */
+ uint64_t * elmt = (uint64_t *)_elmt; /* Convenience pointer to native elements */
+ const uint8_t *raw = (const uint8_t *)_raw; /* Convenience pointer to raw elements */
+
+ /* Sanity checks */
+ HDassert(raw);
+ HDassert(elmt);
+ HDassert(nelmts);
+ HDassert(H5FA__TEST_BOGUS_VAL == ctx->bogus);
+
+ /* Decode raw elements into native elements */
+ while (nelmts) {
+ /* Decode element */
+ /* (advances 'raw' pointer) */
+ UINT64DECODE(raw, *elmt);
+
+ /* Advance native element pointer */
+ elmt++;
+
+ /* Decrement # of elements to decode */
+ nelmts--;
+ } /* end while */
END_FUNC(STATIC) /* end H5FA__test_decode() */
@@ -281,17 +281,17 @@ END_FUNC(STATIC) /* end H5FA__test_decode() */
BEGIN_FUNC(STATIC, NOERR, herr_t, SUCCEED, -,
H5FA__test_debug(FILE *stream, int indent, int fwidth, hsize_t idx, const void *elmt))
-/* Local variables */
-char temp_str[128]; /* Temporary string, for formatting */
+ /* Local variables */
+ char temp_str[128]; /* Temporary string, for formatting */
-/* Sanity checks */
-HDassert(stream);
-HDassert(elmt);
+ /* Sanity checks */
+ HDassert(stream);
+ HDassert(elmt);
-/* Print element */
-HDsprintf(temp_str, "Element #%llu:", (unsigned long long)idx);
-HDfprintf(stream, "%*s%-*s %llu\n", indent, "", fwidth, temp_str,
- (unsigned long long)*(const uint64_t *)elmt);
+ /* Print element */
+ HDsprintf(temp_str, "Element #%llu:", (unsigned long long)idx);
+ HDfprintf(stream, "%*s%-*s %llu\n", indent, "", fwidth, temp_str,
+ (unsigned long long)*(const uint64_t *)elmt);
END_FUNC(STATIC) /* end H5FA__test_debug() */
@@ -311,20 +311,20 @@ END_FUNC(STATIC) /* end H5FA__test_debug() */
BEGIN_FUNC(STATIC, ERR, void *, NULL, NULL,
H5FA__test_crt_dbg_context(H5F_t H5_ATTR_UNUSED *f, haddr_t H5_ATTR_UNUSED obj_addr))
-/* Local variables */
-H5FA__test_ctx_t *ctx; /* Context for callbacks */
+ /* Local variables */
+ H5FA__test_ctx_t *ctx; /* Context for callbacks */
-/* Allocate new context structure */
-if (NULL == (ctx = H5FL_MALLOC(H5FA__test_ctx_t)))
- H5E_THROW(H5E_CANTALLOC, "can't allocate fixed array client callback context")
+ /* Allocate new context structure */
+ if (NULL == (ctx = H5FL_MALLOC(H5FA__test_ctx_t)))
+ H5E_THROW(H5E_CANTALLOC, "can't allocate fixed array client callback context")
-/* Initialize the context */
-ctx->bogus = H5FA__TEST_BOGUS_VAL;
+ /* Initialize the context */
+ ctx->bogus = H5FA__TEST_BOGUS_VAL;
-/* Set return value */
-ret_value = ctx;
+ /* Set return value */
+ ret_value = ctx;
-CATCH
+ CATCH
END_FUNC(STATIC) /* end H5FA__test_crt_dbg_context() */
@@ -342,13 +342,13 @@ END_FUNC(STATIC) /* end H5FA__test_crt_dbg_context() */
*/
BEGIN_FUNC(PKG, NOERR, herr_t, SUCCEED, -, H5FA__get_cparam_test(const H5FA_t *fa, H5FA_create_t *cparam))
-/* Check arguments. */
-HDassert(fa);
-HDassert(cparam);
+ /* Check arguments. */
+ HDassert(fa);
+ HDassert(cparam);
-/* Get fixed array creation parameters */
-cparam->raw_elmt_size = fa->hdr->cparam.raw_elmt_size;
-cparam->nelmts = fa->hdr->cparam.nelmts;
+ /* Get fixed array creation parameters */
+ cparam->raw_elmt_size = fa->hdr->cparam.raw_elmt_size;
+ cparam->nelmts = fa->hdr->cparam.nelmts;
END_FUNC(PKG) /* end H5FA__get_cparam_test() */
@@ -367,16 +367,16 @@ END_FUNC(PKG) /* end H5FA__get_cparam_test() */
BEGIN_FUNC(PKG, ERRCATCH, int, 0, -,
H5FA__cmp_cparam_test(const H5FA_create_t *cparam1, const H5FA_create_t *cparam2))
-/* Check arguments. */
-HDassert(cparam1);
-HDassert(cparam2);
+ /* Check arguments. */
+ HDassert(cparam1);
+ HDassert(cparam2);
-/* Compare creation parameters for array */
-if (cparam1->raw_elmt_size < cparam2->raw_elmt_size)
- H5_LEAVE(-1)
-else if (cparam1->raw_elmt_size > cparam2->raw_elmt_size)
- H5_LEAVE(1)
+ /* Compare creation parameters for array */
+ if (cparam1->raw_elmt_size < cparam2->raw_elmt_size)
+ H5_LEAVE(-1)
+ else if (cparam1->raw_elmt_size > cparam2->raw_elmt_size)
+ H5_LEAVE(1)
-CATCH
+ CATCH
END_FUNC(PKG) /* end H5FA__cmp_cparam_test() */
diff --git a/src/H5FDfamily.c b/src/H5FDfamily.c
index 50a135d..cf89f26 100644
--- a/src/H5FDfamily.c
+++ b/src/H5FDfamily.c
@@ -35,7 +35,7 @@
#include "H5FDdrvr_module.h" /* This source code file is part of the H5FD driver module */
#include "H5private.h" /* Generic Functions */
-#include "H5CXprivate.h" /* API Contexts */
+#include "H5CXprivate.h" /* API Contexts */
#include "H5Eprivate.h" /* Error handling */
#include "H5Fprivate.h" /* File access */
#include "H5FDprivate.h" /* File drivers */
@@ -313,7 +313,7 @@ done:
* Function: H5FD__family_fapl_get
*
* Purpose: Gets a file access property list which could be used to
- * create an identical file.
+ * create an identical file.
*
* Return: Success: Ptr to new file access property list.
*
diff --git a/src/H5FDhdfs.c b/src/H5FDhdfs.c
index 9323c4f..569b889 100644
--- a/src/H5FDhdfs.c
+++ b/src/H5FDhdfs.c
@@ -20,15 +20,6 @@
* File System (HDFS).
*/
-#ifdef H5_HAVE_LIBHDFS
-/* This source code file is part of the H5FD driver module
- * NOTE: If we're just building the binary compatibility stubs,
- * we're never going to really initialize the package, so we
- * don't include this.
- */
-#include "H5FDdrvr_module.h"
-#endif /* H5_HAVE_LIBHDFS */
-
#include "H5private.h" /* Generic Functions */
#include "H5Eprivate.h" /* Error handling */
#include "H5FDprivate.h" /* File drivers */
@@ -39,19 +30,11 @@
#ifdef H5_HAVE_LIBHDFS
-/* HDFS routines
- * Have to turn off -Wstrict-prototypes as this header contains functions
- * defined as foo() instead of foo(void), which triggers warnings that HDF5
- * then interprets as errors.
- * -Wundef isn't interpreted as an error by HDF5, but the header does do
- * some bad symbol interpretation that raises a warning that is out of our
- * control.
- */
-H5_GCC_DIAG_OFF(strict - prototypes)
-H5_GCC_DIAG_OFF(undef)
-#include <hdfs.h>
-H5_GCC_DIAG_ON(strict - prototypes)
-H5_GCC_DIAG_ON(undef)
+/* This source code file is part of the H5FD driver module */
+#include "H5FDdrvr_module.h"
+
+/* HDFS routines */
+#include "hdfs.h"
/* toggle function call prints: 1 turns on */
#define HDFS_DEBUG 0
@@ -374,12 +357,12 @@ done:
hid_t
H5FD_hdfs_init(void)
{
+ hid_t ret_value = H5I_INVALID_HID; /* Return value */
#if HDFS_STATS
unsigned int bin_i;
#endif
- hid_t ret_value = H5I_INVALID_HID; /* Return value */
- FUNC_ENTER_NOAPI(H5I_INVALID_HID)
+ FUNC_ENTER_NOAPI(FAIL)
#if HDFS_DEBUG
HDfprintf(stdout, "called %s.\n", FUNC);
@@ -1716,48 +1699,4 @@ H5FD__hdfs_unlock(H5FD_t H5_ATTR_UNUSED *_file)
FUNC_LEAVE_NOAPI(SUCCEED)
} /* end H5FD__hdfs_unlock() */
-
-#else /* H5_HAVE_LIBHDFS */
-
-/* No-op stubs to avoid binary compatibility problems with previous
- * HDF5 1.10 versions. Non-functional versions of these API calls were
- * erroneously included in the library even when the HDFS VFD was not
- * configured.
- */
-hid_t
-H5FD_hdfs_init(void)
-{
- /* This should never be called since the header doesn't invoke it */
- FUNC_ENTER_NOAPI_NOINIT_NOERR
- FUNC_LEAVE_NOAPI(H5I_INVALID_HID)
-}
-
-herr_t
-H5Pget_fapl_hdfs(hid_t fapl_id, H5FD_hdfs_fapl_t *fa_out)
-{
- herr_t ret_value = FAIL;
-
- FUNC_ENTER_API_NOINIT
- H5TRACE2("e", "i*x", fapl_id, fa_out);
-
- HGOTO_ERROR(H5E_VFL, H5E_UNSUPPORTED, FAIL, "HDFS VFD not included in the HDF5 library")
-
-done:
- FUNC_LEAVE_API_NOINIT(ret_value)
-}
-
-herr_t
-H5Pset_fapl_hdfs(hid_t fapl_id, H5FD_hdfs_fapl_t *fa)
-{
- herr_t ret_value = FAIL;
-
- FUNC_ENTER_API_NOINIT
- H5TRACE2("e", "i*x", fapl_id, fa);
-
- HGOTO_ERROR(H5E_VFL, H5E_UNSUPPORTED, FAIL, "HDFS VFD not included in the HDF5 library")
-
-done:
- FUNC_LEAVE_API_NOINIT(ret_value)
-}
-
#endif /* H5_HAVE_LIBHDFS */
diff --git a/src/H5FDhdfs.h b/src/H5FDhdfs.h
index 5cc578a..05506d4 100644
--- a/src/H5FDhdfs.h
+++ b/src/H5FDhdfs.h
@@ -28,6 +28,11 @@
#define H5FD_HDFS (-1)
#endif /* H5_HAVE_LIBHDFS */
+#ifdef H5_HAVE_LIBHDFS
+#ifdef __cplusplus
+extern "C" {
+#endif
+
/****************************************************************************
*
* Structure: H5FD_hdfs_fapl_t
@@ -107,10 +112,6 @@ typedef struct H5FD_hdfs_fapl_t {
int32_t stream_buffer_size;
} H5FD_hdfs_fapl_t;
-#ifdef __cplusplus
-extern "C" {
-#endif
-
H5_DLL hid_t H5FD_hdfs_init(void);
H5_DLL herr_t H5Pget_fapl_hdfs(hid_t fapl_id, H5FD_hdfs_fapl_t *fa_out);
H5_DLL herr_t H5Pset_fapl_hdfs(hid_t fapl_id, H5FD_hdfs_fapl_t *fa);
@@ -118,5 +119,6 @@ H5_DLL herr_t H5Pset_fapl_hdfs(hid_t fapl_id, H5FD_hdfs_fapl_t *fa);
#ifdef __cplusplus
}
#endif
+#endif /* H5_HAVE_LIBHDFS */
#endif /* ifndef H5FDhdfs_H */
diff --git a/src/H5FDlog.c b/src/H5FDlog.c
index e238871..929cd9c 100644
--- a/src/H5FDlog.c
+++ b/src/H5FDlog.c
@@ -717,15 +717,17 @@ H5FD__log_close(H5FD_t *_file)
addr = 1;
while (addr < file->eoa) {
if (file->nwrite[addr] != last_val) {
- HDfprintf(file->logfp, "\tAddr %10a-%10a (%10lu bytes) written to %3d times\n", last_addr,
- (addr - 1), (unsigned long)(addr - last_addr), (int)last_val);
+ HDfprintf(file->logfp,
+ "\tAddr %10" PRIuHADDR "-%10" PRIuHADDR " (%10lu bytes) written to %3d times\n",
+ last_addr, (addr - 1), (unsigned long)(addr - last_addr), (int)last_val);
last_val = file->nwrite[addr];
last_addr = addr;
} /* end if */
addr++;
} /* end while */
- HDfprintf(file->logfp, "\tAddr %10a-%10a (%10lu bytes) written to %3d times\n", last_addr,
- (addr - 1), (unsigned long)(addr - last_addr), (int)last_val);
+ HDfprintf(file->logfp,
+ "\tAddr %10" PRIuHADDR "-%10" PRIuHADDR " (%10lu bytes) written to %3d times\n",
+ last_addr, (addr - 1), (unsigned long)(addr - last_addr), (int)last_val);
} /* end if */
/* Dump the read I/O information */
@@ -736,15 +738,17 @@ H5FD__log_close(H5FD_t *_file)
addr = 1;
while (addr < file->eoa) {
if (file->nread[addr] != last_val) {
- HDfprintf(file->logfp, "\tAddr %10a-%10a (%10lu bytes) read from %3d times\n", last_addr,
- (addr - 1), (unsigned long)(addr - last_addr), (int)last_val);
+ HDfprintf(file->logfp,
+ "\tAddr %10" PRIuHADDR "-%10" PRIuHADDR " (%10lu bytes) read from %3d times\n",
+ last_addr, (addr - 1), (unsigned long)(addr - last_addr), (int)last_val);
last_val = file->nread[addr];
last_addr = addr;
} /* end if */
addr++;
} /* end while */
- HDfprintf(file->logfp, "\tAddr %10a-%10a (%10lu bytes) read from %3d times\n", last_addr,
- (addr - 1), (unsigned long)(addr - last_addr), (int)last_val);
+ HDfprintf(file->logfp,
+ "\tAddr %10" PRIuHADDR "-%10" PRIuHADDR " (%10lu bytes) read from %3d times\n",
+ last_addr, (addr - 1), (unsigned long)(addr - last_addr), (int)last_val);
} /* end if */
/* Dump the I/O flavor information */
@@ -755,15 +759,16 @@ H5FD__log_close(H5FD_t *_file)
addr = 1;
while (addr < file->eoa) {
if (file->flavor[addr] != last_val) {
- HDfprintf(file->logfp, "\tAddr %10a-%10a (%10lu bytes) flavor is %s\n", last_addr,
- (addr - 1), (unsigned long)(addr - last_addr), flavors[last_val]);
+ HDfprintf(file->logfp,
+ "\tAddr %10" PRIuHADDR "-%10" PRIuHADDR " (%10lu bytes) flavor is %s\n",
+ last_addr, (addr - 1), (unsigned long)(addr - last_addr), flavors[last_val]);
last_val = file->flavor[addr];
last_addr = addr;
} /* end if */
addr++;
} /* end while */
- HDfprintf(file->logfp, "\tAddr %10a-%10a (%10lu bytes) flavor is %s\n", last_addr, (addr - 1),
- (unsigned long)(addr - last_addr), flavors[last_val]);
+ HDfprintf(file->logfp, "\tAddr %10" PRIuHADDR "-%10" PRIuHADDR " (%10lu bytes) flavor is %s\n",
+ last_addr, (addr - 1), (unsigned long)(addr - last_addr), flavors[last_val]);
} /* end if */
/* Free the logging information */
@@ -933,8 +938,9 @@ H5FD__log_alloc(H5FD_t *_file, H5FD_mem_t type, hid_t H5_ATTR_UNUSED dxpl_id, hs
} /* end if */
if (file->fa.flags & H5FD_LOG_ALLOC)
- HDfprintf(file->logfp, "%10a-%10a (%10Hu bytes) (%s) Allocated\n", addr, (addr + size) - 1, size,
- flavors[type]);
+ HDfprintf(file->logfp,
+ "%10" PRIuHADDR "-%10" PRIuHADDR " (%10" PRIuHSIZE " bytes) (%s) Allocated\n", addr,
+ (haddr_t)((addr + size) - 1), size, flavors[type]);
} /* end if */
/* Set return value */
@@ -972,8 +978,8 @@ H5FD__log_free(H5FD_t *_file, H5FD_mem_t type, hid_t H5_ATTR_UNUSED dxpl_id, had
/* Log the file memory freed */
if (file->fa.flags & H5FD_LOG_FREE)
- HDfprintf(file->logfp, "%10a-%10a (%10Hu bytes) (%s) Freed\n", addr, (addr + size) - 1, size,
- flavors[type]);
+ HDfprintf(file->logfp, "%10" PRIuHADDR "-%10" PRIuHADDR " (%10" PRIuHSIZE " bytes) (%s) Freed\n",
+ addr, (haddr_t)((addr + size) - 1), size, flavors[type]);
} /* end if */
FUNC_LEAVE_NOAPI(SUCCEED)
@@ -1039,8 +1045,9 @@ H5FD__log_set_eoa(H5FD_t *_file, H5FD_mem_t type, haddr_t addr)
/* Log the extension like an allocation */
if (file->fa.flags & H5FD_LOG_ALLOC)
- HDfprintf(file->logfp, "%10a-%10a (%10Hu bytes) (%s) Allocated\n", file->eoa, addr, size,
- flavors[type]);
+ HDfprintf(file->logfp,
+ "%10" PRIuHADDR "-%10" PRIuHADDR " (%10" PRIuHSIZE " bytes) (%s) Allocated\n",
+ file->eoa, addr, size, flavors[type]);
} /* end if */
/* Check for decreasing file size */
@@ -1056,8 +1063,9 @@ H5FD__log_set_eoa(H5FD_t *_file, H5FD_mem_t type, haddr_t addr)
/* Log the shrink like a free */
if (file->fa.flags & H5FD_LOG_FREE)
- HDfprintf(file->logfp, "%10a-%10a (%10Hu bytes) (%s) Freed\n", file->eoa, addr, size,
- flavors[type]);
+ HDfprintf(file->logfp,
+ "%10" PRIuHADDR "-%10" PRIuHADDR " (%10" PRIuHSIZE " bytes) (%s) Freed\n",
+ file->eoa, addr, size, flavors[type]);
} /* end if */
} /* end if */
@@ -1206,7 +1214,7 @@ H5FD__log_read(H5FD_t *_file, H5FD_mem_t type, hid_t H5_ATTR_UNUSED dxpl_id, had
/* Emit log string if we're tracking individual seek events. */
if (file->fa.flags & H5FD_LOG_LOC_SEEK) {
- HDfprintf(file->logfp, "Seek: From %10a To %10a", file->pos, addr);
+ HDfprintf(file->logfp, "Seek: From %10" PRIuHADDR " To %10" PRIuHADDR, file->pos, addr);
/* Add the seek time, if we're tracking that.
* Note that the seek time is NOT emitted for when just H5FD_LOG_TIME_SEEK
@@ -1259,8 +1267,8 @@ H5FD__log_read(H5FD_t *_file, H5FD_mem_t type, hid_t H5_ATTR_UNUSED dxpl_id, had
offset = HDlseek(file->fd, (HDoff_t)0, SEEK_CUR);
if (file->fa.flags & H5FD_LOG_LOC_READ)
- HDfprintf(file->logfp, "Error! Reading: %10a-%10a (%10Zu bytes)\n", orig_addr,
- (orig_addr + orig_size) - 1, orig_size);
+ HDfprintf(file->logfp, "Error! Reading: %10" PRIuHADDR "-%10" PRIuHADDR " (%10zu bytes)\n",
+ orig_addr, (orig_addr + orig_size) - 1, orig_size);
HGOTO_ERROR(H5E_IO, H5E_READERROR, FAIL,
"file read failed: time = %s, filename = '%s', file descriptor = %d, errno = %d, "
@@ -1302,8 +1310,8 @@ H5FD__log_read(H5FD_t *_file, H5FD_mem_t type, hid_t H5_ATTR_UNUSED dxpl_id, had
/* Log information about the read */
if (file->fa.flags & H5FD_LOG_LOC_READ) {
- HDfprintf(file->logfp, "%10a-%10a (%10Zu bytes) (%s) Read", orig_addr, (orig_addr + orig_size) - 1,
- orig_size, flavors[type]);
+ HDfprintf(file->logfp, "%10" PRIuHADDR "-%10" PRIuHADDR " (%10zu bytes) (%s) Read", orig_addr,
+ (orig_addr + orig_size) - 1, orig_size, flavors[type]);
/* Verify that we are reading in the type of data we allocated in this location */
if (file->flavor) {
@@ -1428,7 +1436,7 @@ H5FD__log_write(H5FD_t *_file, H5FD_mem_t type, hid_t H5_ATTR_UNUSED dxpl_id, ha
/* Emit log string if we're tracking individual seek events. */
if (file->fa.flags & H5FD_LOG_LOC_SEEK) {
- HDfprintf(file->logfp, "Seek: From %10a To %10a", file->pos, addr);
+ HDfprintf(file->logfp, "Seek: From %10" PRIuHADDR " To %10" PRIuHADDR, file->pos, addr);
/* Add the seek time, if we're tracking that.
* Note that the seek time is NOT emitted for when just H5FD_LOG_TIME_SEEK
@@ -1481,8 +1489,8 @@ H5FD__log_write(H5FD_t *_file, H5FD_mem_t type, hid_t H5_ATTR_UNUSED dxpl_id, ha
offset = HDlseek(file->fd, (HDoff_t)0, SEEK_CUR);
if (file->fa.flags & H5FD_LOG_LOC_WRITE)
- HDfprintf(file->logfp, "Error! Writing: %10a-%10a (%10Zu bytes)\n", orig_addr,
- (orig_addr + orig_size) - 1, orig_size);
+ HDfprintf(file->logfp, "Error! Writing: %10" PRIuHADDR "-%10" PRIuHADDR " (%10zu bytes)\n",
+ orig_addr, (orig_addr + orig_size) - 1, orig_size);
HGOTO_ERROR(H5E_IO, H5E_WRITEERROR, FAIL,
"file write failed: time = %s, filename = '%s', file descriptor = %d, errno = %d, "
@@ -1517,8 +1525,8 @@ H5FD__log_write(H5FD_t *_file, H5FD_mem_t type, hid_t H5_ATTR_UNUSED dxpl_id, ha
/* Log information about the write */
if (file->fa.flags & H5FD_LOG_LOC_WRITE) {
- HDfprintf(file->logfp, "%10a-%10a (%10Zu bytes) (%s) Written", orig_addr, (orig_addr + orig_size) - 1,
- orig_size, flavors[type]);
+ HDfprintf(file->logfp, "%10" PRIuHADDR "-%10" PRIuHADDR " (%10zu bytes) (%s) Written", orig_addr,
+ (orig_addr + orig_size) - 1, orig_size, flavors[type]);
/* Check if this is the first write into a "default" section, grabbed by the metadata agregation
* algorithm */
@@ -1638,7 +1646,7 @@ H5FD__log_truncate(H5FD_t *_file, hid_t H5_ATTR_UNUSED dxpl_id, hbool_t H5_ATTR_
/* Emit log string if we're tracking individual truncate events. */
if (file->fa.flags & H5FD_LOG_TRUNCATE) {
- HDfprintf(file->logfp, "Truncate: To %10a", file->eoa);
+ HDfprintf(file->logfp, "Truncate: To %10" PRIuHADDR, file->eoa);
/* Add the truncate time, if we're tracking that.
* Note that the truncate time is NOT emitted for when just H5FD_LOG_TIME_TRUNCATE
diff --git a/src/H5FDs3comms.c b/src/H5FDs3comms.c
index 0745acf..2ac27d0 100644
--- a/src/H5FDs3comms.c
+++ b/src/H5FDs3comms.c
@@ -1267,8 +1267,8 @@ H5FD_s3comms_s3r_read(s3r_t *handle, haddr_t offset, size_t len, void *dest)
rangebytesstr = (char *)H5MM_malloc(sizeof(char) * (S3COMMS_MAX_RANGE_STRING_SIZE + 1));
if (rangebytesstr == NULL)
HGOTO_ERROR(H5E_ARGS, H5E_CANTALLOC, FAIL, "could not malloc range format string.");
- ret = HDsnprintf(rangebytesstr, (S3COMMS_MAX_RANGE_STRING_SIZE),
- "bytes=" H5_PRINTF_HADDR_FMT "-" H5_PRINTF_HADDR_FMT, offset, offset + len - 1);
+ ret = HDsnprintf(rangebytesstr, (S3COMMS_MAX_RANGE_STRING_SIZE), "bytes=%" PRIuHADDR "-%" PRIuHADDR,
+ offset, offset + len - 1);
if (ret <= 0 || ret >= S3COMMS_MAX_RANGE_STRING_SIZE)
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "unable to format HTTP Range value");
}
@@ -1276,8 +1276,7 @@ H5FD_s3comms_s3r_read(s3r_t *handle, haddr_t offset, size_t len, void *dest)
rangebytesstr = (char *)H5MM_malloc(sizeof(char) * (S3COMMS_MAX_RANGE_STRING_SIZE + 1));
if (rangebytesstr == NULL)
HGOTO_ERROR(H5E_ARGS, H5E_CANTALLOC, FAIL, "could not malloc range format string.");
- ret = HDsnprintf(rangebytesstr, (S3COMMS_MAX_RANGE_STRING_SIZE), "bytes=" H5_PRINTF_HADDR_FMT "-",
- offset);
+ ret = HDsnprintf(rangebytesstr, (S3COMMS_MAX_RANGE_STRING_SIZE), "bytes=%" PRIuHADDR "-", offset);
if (ret <= 0 || ret >= S3COMMS_MAX_RANGE_STRING_SIZE)
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "unable to format HTTP Range value");
}
diff --git a/src/H5FDstdio.c b/src/H5FDstdio.c
index c0836c2..45ea503 100644
--- a/src/H5FDstdio.c
+++ b/src/H5FDstdio.c
@@ -235,6 +235,7 @@ H5FD_stdio_init(void)
if (H5I_VFL != H5Iget_type(H5FD_STDIO_g))
H5FD_STDIO_g = H5FDregister(&H5FD_stdio_g);
+
return H5FD_STDIO_g;
} /* end H5FD_stdio_init() */
@@ -314,7 +315,7 @@ H5Pset_fapl_stdio(hid_t fapl_id)
*-------------------------------------------------------------------------
*/
static H5FD_t *
-H5FD_stdio_open(const char *name, unsigned flags, hid_t /*UNUSED*/ fapl_id, haddr_t maxaddr)
+H5FD_stdio_open(const char *name, unsigned flags, hid_t fapl_id, haddr_t maxaddr)
{
FILE * f = NULL;
unsigned write_access = 0; /* File opened with write access? */
diff --git a/src/H5FSdbg.c b/src/H5FSdbg.c
index 549cc3d..8082c02 100644
--- a/src/H5FSdbg.c
+++ b/src/H5FSdbg.c
@@ -121,12 +121,13 @@ H5FS_debug(H5F_t *f, haddr_t addr, FILE *stream, int indent, int fwidth)
(fspace->client == H5FS_CLIENT_FHEAP_ID
? "Fractal heap"
: (fspace->client == H5FS_CLIENT_FILE_ID ? "File" : "Unknown")));
- HDfprintf(stream, "%*s%-*s %Hu\n", indent, "", fwidth, "Total free space tracked:", fspace->tot_space);
- HDfprintf(stream, "%*s%-*s %Hu\n", indent, "", fwidth,
+ HDfprintf(stream, "%*s%-*s %" PRIuHSIZE "\n", indent, "", fwidth,
+ "Total free space tracked:", fspace->tot_space);
+ HDfprintf(stream, "%*s%-*s %" PRIuHSIZE "\n", indent, "", fwidth,
"Total number of free space sections tracked:", fspace->tot_sect_count);
- HDfprintf(stream, "%*s%-*s %Hu\n", indent, "", fwidth,
+ HDfprintf(stream, "%*s%-*s %" PRIuHSIZE "\n", indent, "", fwidth,
"Number of serializable free space sections tracked:", fspace->serial_sect_count);
- HDfprintf(stream, "%*s%-*s %Hu\n", indent, "", fwidth,
+ HDfprintf(stream, "%*s%-*s %" PRIuHSIZE "\n", indent, "", fwidth,
"Number of ghost free space sections tracked:", fspace->ghost_sect_count);
HDfprintf(stream, "%*s%-*s %u\n", indent, "", fwidth,
"Number of free space section classes:", (unsigned)fspace->nclasses);
@@ -134,11 +135,13 @@ H5FS_debug(H5F_t *f, haddr_t addr, FILE *stream, int indent, int fwidth)
HDfprintf(stream, "%*s%-*s %u%%\n", indent, "", fwidth, "Expand percent:", fspace->expand_percent);
HDfprintf(stream, "%*s%-*s %u\n", indent, "", fwidth,
"# of bits for section address space:", fspace->max_sect_addr);
- HDfprintf(stream, "%*s%-*s %Hu\n", indent, "", fwidth, "Maximum section size:", fspace->max_sect_size);
- HDfprintf(stream, "%*s%-*s %a\n", indent, "", fwidth, "Serialized sections address:", fspace->sect_addr);
- HDfprintf(stream, "%*s%-*s %Hu\n", indent, "", fwidth,
+ HDfprintf(stream, "%*s%-*s %" PRIuHSIZE "\n", indent, "", fwidth,
+ "Maximum section size:", fspace->max_sect_size);
+ HDfprintf(stream, "%*s%-*s %" PRIuHADDR "\n", indent, "", fwidth,
+ "Serialized sections address:", fspace->sect_addr);
+ HDfprintf(stream, "%*s%-*s %" PRIuHSIZE "\n", indent, "", fwidth,
"Serialized sections size used:", fspace->sect_size);
- HDfprintf(stream, "%*s%-*s %Hu\n", indent, "", fwidth,
+ HDfprintf(stream, "%*s%-*s %" PRIuHSIZE "\n", indent, "", fwidth,
"Serialized sections size allocated:", fspace->alloc_sect_size);
done:
diff --git a/src/H5Fdbg.c b/src/H5Fdbg.c
index 08ec535..8a7f114 100644
--- a/src/H5Fdbg.c
+++ b/src/H5Fdbg.c
@@ -72,9 +72,10 @@ H5F_debug(H5F_t *f, FILE *stream, int indent, int fwidth)
"File name (after resolving symlinks):", H5F_ACTUAL_NAME(f));
HDfprintf(stream, "%*s%-*s 0x%08x\n", indent, "", fwidth, "File access flags", f->shared->flags);
HDfprintf(stream, "%*s%-*s %u\n", indent, "", fwidth, "File open reference count:", f->shared->nrefs);
- HDfprintf(stream, "%*s%-*s %a (abs)\n", indent, "", fwidth,
+ HDfprintf(stream, "%*s%-*s %" PRIuHADDR " (abs)\n", indent, "", fwidth,
"Address of super block:", f->shared->sblock->base_addr);
- HDfprintf(stream, "%*s%-*s %Hu bytes\n", indent, "", fwidth, "Size of userblock:", userblock_size);
+ HDfprintf(stream, "%*s%-*s %" PRIuHSIZE " bytes\n", indent, "", fwidth,
+ "Size of userblock:", userblock_size);
HDfprintf(stream, "%*s%-*s %u\n", indent, "", fwidth,
"Superblock version number:", f->shared->sblock->super_vers);
@@ -99,16 +100,16 @@ H5F_debug(H5F_t *f, FILE *stream, int indent, int fwidth)
"Indexed storage internal node 1/2 rank:", f->shared->sblock->btree_k[H5B_CHUNK_ID]);
HDfprintf(stream, "%*s%-*s 0x%02x\n", indent, "", fwidth,
"File status flags:", (unsigned)(f->shared->sblock->status_flags));
- HDfprintf(stream, "%*s%-*s %a (rel)\n", indent, "", fwidth,
+ HDfprintf(stream, "%*s%-*s %" PRIuHADDR " (rel)\n", indent, "", fwidth,
"Superblock extension address:", f->shared->sblock->ext_addr);
- HDfprintf(stream, "%*s%-*s %a (rel)\n", indent, "", fwidth,
+ HDfprintf(stream, "%*s%-*s %" PRIuHADDR " (rel)\n", indent, "", fwidth,
"Shared object header message table address:", f->shared->sohm_addr);
HDfprintf(stream, "%*s%-*s %u\n", indent, "", fwidth,
"Shared object header message version number:", (unsigned)f->shared->sohm_vers);
HDfprintf(stream, "%*s%-*s %u\n", indent, "", fwidth,
"Number of shared object header message indexes:", (unsigned)f->shared->sohm_nindexes);
- HDfprintf(stream, "%*s%-*s %a (rel)\n", indent, "", fwidth,
+ HDfprintf(stream, "%*s%-*s %" PRIuHADDR " (rel)\n", indent, "", fwidth,
"Address of driver information block:", f->shared->sblock->driver_addr);
HDfprintf(stream, "%*s%-*s %s\n", indent, "", fwidth,
diff --git a/src/H5Fint.c b/src/H5Fint.c
index 8dc92fe..d364a04 100644
--- a/src/H5Fint.c
+++ b/src/H5Fint.c
@@ -72,6 +72,7 @@ typedef struct H5F_olist_t {
/* Local Prototypes */
/********************/
+static herr_t H5F__close_cb(H5VL_object_t *file_vol_obj);
static herr_t H5F__set_vol_conn(H5F_t *file);
static herr_t H5F__get_objects(const H5F_t *f, unsigned types, size_t max_index, hid_t *obj_id_list,
hbool_t app_ref, size_t *obj_id_count_ptr);
@@ -88,6 +89,9 @@ static herr_t H5F__flush_phase2(H5F_t *f, hbool_t closing);
/* Package Variables */
/*********************/
+/* Package initialization variable */
+hbool_t H5_PKG_INIT_VAR = FALSE;
+
/*****************************/
/* Library Private Variables */
/*****************************/
@@ -102,6 +106,146 @@ H5FL_DEFINE(H5F_t);
/* Declare a free list to manage the H5F_shared_t struct */
H5FL_DEFINE(H5F_shared_t);
+/* File ID class */
+static const H5I_class_t H5I_FILE_CLS[1] = {{
+ H5I_FILE, /* ID class value */
+ 0, /* Class flags */
+ 0, /* # of reserved IDs for class */
+ (H5I_free_t)H5F__close_cb /* Callback routine for closing objects of this class */
+}};
+
+/*-------------------------------------------------------------------------
+ * Function: H5F_init
+ *
+ * Purpose: Initialize the interface from some other layer.
+ *
+ * Return: Success: non-negative
+ *
+ * Failure: negative
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5F_init(void)
+{
+ herr_t ret_value = SUCCEED; /* Return value */
+
+ FUNC_ENTER_NOAPI(FAIL)
+ /* FUNC_ENTER() does all the work */
+
+done:
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5F_init() */
+
+/*--------------------------------------------------------------------------
+NAME
+ H5F__init_package -- Initialize interface-specific information
+USAGE
+ herr_t H5F__init_package()
+RETURNS
+ Non-negative on success/Negative on failure
+DESCRIPTION
+ Initializes any interface-specific data or routines.
+
+--------------------------------------------------------------------------*/
+herr_t
+H5F__init_package(void)
+{
+ herr_t ret_value = SUCCEED; /* Return value */
+
+ FUNC_ENTER_PACKAGE
+
+ /*
+ * Initialize the atom group for the file IDs.
+ */
+ if (H5I_register_type(H5I_FILE_CLS) < 0)
+ HGOTO_ERROR(H5E_FILE, H5E_CANTINIT, FAIL, "unable to initialize interface")
+
+done:
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* H5F__init_package() */
+
+/*-------------------------------------------------------------------------
+ * Function: H5F_term_package
+ *
+ * Purpose: Terminate this interface: free all memory and reset global
+ * variables to their initial values. Release all ID groups
+ * associated with this interface.
+ *
+ * Return: Success: Positive if anything was done that might
+ * have affected other interfaces;
+ * zero otherwise.
+ *
+ * Failure: Never fails
+ *
+ *-------------------------------------------------------------------------
+ */
+int
+H5F_term_package(void)
+{
+ int n = 0;
+
+ FUNC_ENTER_NOAPI_NOINIT_NOERR
+
+ if (H5_PKG_INIT_VAR) {
+ if (H5I_nmembers(H5I_FILE) > 0) {
+ (void)H5I_clear_type(H5I_FILE, FALSE, FALSE);
+ n++; /*H5I*/
+ } /* end if */
+ else {
+ /* Make certain we've cleaned up all the shared file objects */
+ H5F_sfile_assert_num(0);
+
+ /* Destroy the file object id group */
+ n += (H5I_dec_type_ref(H5I_FILE) > 0);
+
+ /* Mark closed */
+ if (0 == n)
+ H5_PKG_INIT_VAR = FALSE;
+ } /* end else */
+ } /* end if */
+
+ FUNC_LEAVE_NOAPI(n)
+} /* end H5F_term_package() */
+
+/*-------------------------------------------------------------------------
+ * Function: H5F__close_cb
+ *
+ * Purpose: Closes a file or causes the close operation to be pended.
+ * This function is called from the API and gets called
+ * by H5Fclose->H5I_dec_ref->H5F__close_cb when H5I_dec_ref()
+ * decrements the file ID reference count to zero. The file ID
+ * is removed from the H5I_FILE group by H5I_dec_ref() just
+ * before H5F__close_cb() is called. If there are open object
+ * headers then the close is pended by moving the file to the
+ * H5I_FILE_CLOSING ID group (the f->closing contains the ID
+ * assigned to file).
+ *
+ * Return: SUCCEED/FAIL
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5F__close_cb(H5VL_object_t *file_vol_obj)
+{
+ herr_t ret_value = SUCCEED; /* Return value */
+
+ FUNC_ENTER_STATIC
+
+ /* Sanity check */
+ HDassert(file_vol_obj);
+
+ /* Close the file */
+ if (H5VL_file_close(file_vol_obj, H5P_DATASET_XFER_DEFAULT, H5_REQUEST_NULL) < 0)
+ HGOTO_ERROR(H5E_FILE, H5E_CANTCLOSEFILE, FAIL, "unable to close file")
+
+ /* Free the VOL object */
+ if (H5VL_free_object(file_vol_obj) < 0)
+ HGOTO_ERROR(H5E_FILE, H5E_CANTDEC, FAIL, "unable to free VOL object")
+
+done:
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5F__close_cb() */
+
/*-------------------------------------------------------------------------
* Function: H5F__set_vol_conn
*
diff --git a/src/H5Gent.c b/src/H5Gent.c
index 10c9499..12a2caf 100644
--- a/src/H5Gent.c
+++ b/src/H5Gent.c
@@ -526,7 +526,7 @@ H5G__ent_debug(const H5G_entry_t *ent, FILE *stream, int indent, int fwidth, con
HDfprintf(stream, "%*s%-*s %lu\n", indent, "", fwidth,
"Name offset into private heap:", (unsigned long)(ent->name_off));
- HDfprintf(stream, "%*s%-*s %a\n", indent, "", fwidth, "Object header address:", ent->header);
+ HDfprintf(stream, "%*s%-*s %" PRIuHADDR "\n", indent, "", fwidth, "Object header address:", ent->header);
HDfprintf(stream, "%*s%-*s ", indent, "", fwidth, "Cache info type:");
switch (ent->type) {
@@ -538,10 +538,10 @@ H5G__ent_debug(const H5G_entry_t *ent, FILE *stream, int indent, int fwidth, con
HDfprintf(stream, "Symbol Table\n");
HDfprintf(stream, "%*s%-*s\n", indent, "", fwidth, "Cached entry information:");
- HDfprintf(stream, "%*s%-*s %a\n", nested_indent, "", nested_fwidth,
+ HDfprintf(stream, "%*s%-*s %" PRIuHADDR "\n", nested_indent, "", nested_fwidth,
"B-tree address:", ent->cache.stab.btree_addr);
- HDfprintf(stream, "%*s%-*s %a\n", nested_indent, "", nested_fwidth,
+ HDfprintf(stream, "%*s%-*s %" PRIuHADDR "\n", nested_indent, "", nested_fwidth,
"Heap address:", ent->cache.stab.heap_addr);
break;
diff --git a/src/H5Gobj.c b/src/H5Gobj.c
index a20b8c6..40ed72c 100644
--- a/src/H5Gobj.c
+++ b/src/H5Gobj.c
@@ -370,7 +370,7 @@ H5G__obj_compact_to_dense_cb(const void *_mesg, unsigned H5_ATTR_UNUSED idx, voi
done:
FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5G_obj_compact_to_dense_cb() */
+} /* end H5G__obj_compact_to_dense_cb() */
/*-------------------------------------------------------------------------
* Function: H5G__obj_stab_to_new_cb
diff --git a/src/H5HFbtree2.c b/src/H5HFbtree2.c
index 51eb480..c34289c 100644
--- a/src/H5HFbtree2.c
+++ b/src/H5HFbtree2.c
@@ -434,8 +434,8 @@ H5HF__huge_bt2_indir_debug(FILE *stream, int indent, int fwidth, const void *_nr
FUNC_ENTER_STATIC_NOERR
- HDfprintf(stream, "%*s%-*s {%a, %Hu, %Hu}\n", indent, "", fwidth, "Record:", nrecord->addr, nrecord->len,
- nrecord->id);
+ HDfprintf(stream, "%*s%-*s {%" PRIuHADDR ", %" PRIuHSIZE ", %" PRIuHSIZE "}\n", indent, "", fwidth,
+ "Record:", nrecord->addr, nrecord->len, nrecord->id);
FUNC_LEAVE_NOAPI(SUCCEED)
} /* H5HF__huge_bt2_indir_debug() */
@@ -636,8 +636,9 @@ H5HF__huge_bt2_filt_indir_debug(FILE *stream, int indent, int fwidth, const void
FUNC_ENTER_STATIC_NOERR
- HDfprintf(stream, "%*s%-*s {%a, %Hu, %x, %Hu, %Hu}\n", indent, "", fwidth, "Record:", nrecord->addr,
- nrecord->len, nrecord->filter_mask, nrecord->obj_size, nrecord->id);
+ HDfprintf(stream, "%*s%-*s {%" PRIuHADDR ", %" PRIuHSIZE ", %x, %" PRIuHSIZE ", %" PRIuHSIZE "}\n",
+ indent, "", fwidth, "Record:", nrecord->addr, nrecord->len, nrecord->filter_mask,
+ nrecord->obj_size, nrecord->id);
FUNC_LEAVE_NOAPI(SUCCEED)
} /* H5HF__huge_bt2_filt_indir_debug() */
@@ -818,7 +819,8 @@ H5HF__huge_bt2_dir_debug(FILE *stream, int indent, int fwidth, const void *_nrec
FUNC_ENTER_STATIC_NOERR
- HDfprintf(stream, "%*s%-*s {%a, %Hu}\n", indent, "", fwidth, "Record:", nrecord->addr, nrecord->len);
+ HDfprintf(stream, "%*s%-*s {%" PRIuHADDR ", %" PRIuHSIZE "}\n", indent, "", fwidth,
+ "Record:", nrecord->addr, nrecord->len);
FUNC_LEAVE_NOAPI(SUCCEED)
} /* H5HF__huge_bt2_dir_debug() */
@@ -1028,8 +1030,8 @@ H5HF__huge_bt2_filt_dir_debug(FILE *stream, int indent, int fwidth, const void *
FUNC_ENTER_STATIC_NOERR
- HDfprintf(stream, "%*s%-*s {%a, %Hu, %x, %Hu}\n", indent, "", fwidth, "Record:", nrecord->addr,
- nrecord->len, nrecord->filter_mask, nrecord->obj_size);
+ HDfprintf(stream, "%*s%-*s {%" PRIuHADDR ", %" PRIuHSIZE ", %x, %" PRIuHSIZE "}\n", indent, "", fwidth,
+ "Record:", nrecord->addr, nrecord->len, nrecord->filter_mask, nrecord->obj_size);
FUNC_LEAVE_NOAPI(SUCCEED)
} /* H5HF__huge_bt2_filt_dir_debug() */
diff --git a/src/H5HFdbg.c b/src/H5HFdbg.c
index 76c20e1..9d1adb1 100644
--- a/src/H5HFdbg.c
+++ b/src/H5HFdbg.c
@@ -153,8 +153,8 @@ H5HF_id_print(H5HF_t *fh, const void *_id, FILE *stream, int indent, int fwidth)
HGOTO_ERROR(H5E_HEAP, H5E_CANTGET, FAIL, "can't retrieve heap ID length")
/* Display the heap ID */
- HDfprintf(stream, "%*s%-*s (%c, %Hu, %Zu)\n", indent, "", fwidth, "Heap ID info: (type, offset, length)",
- id_type, obj_off, obj_len);
+ HDfprintf(stream, "%*s%-*s (%c, %" PRIuHSIZE " , %zu)\n", indent, "", fwidth,
+ "Heap ID info: (type, offset, length)", id_type, obj_off, obj_len);
done:
FUNC_LEAVE_NOAPI(ret_value)
@@ -190,9 +190,9 @@ H5HF__dtable_debug(const H5HF_dtable_t *dtable, FILE *stream, int indent, int fw
*/
/* Creation parameter values */
HDfprintf(stream, "%*s%-*s %u\n", indent, "", fwidth, "Doubling table width:", dtable->cparam.width);
- HDfprintf(stream, "%*s%-*s %Zu\n", indent, "", fwidth,
+ HDfprintf(stream, "%*s%-*s %zu\n", indent, "", fwidth,
"Starting block size:", dtable->cparam.start_block_size);
- HDfprintf(stream, "%*s%-*s %Zu\n", indent, "", fwidth,
+ HDfprintf(stream, "%*s%-*s %zu\n", indent, "", fwidth,
"Max. direct block size:", dtable->cparam.max_direct_size);
HDfprintf(stream, "%*s%-*s %u (bits)\n", indent, "", fwidth,
"Max. index size:", dtable->cparam.max_index);
@@ -200,7 +200,8 @@ H5HF__dtable_debug(const H5HF_dtable_t *dtable, FILE *stream, int indent, int fw
"Starting # of rows in root indirect block:", dtable->cparam.start_root_rows);
/* Run-time varying parameter values */
- HDfprintf(stream, "%*s%-*s %a\n", indent, "", fwidth, "Table's root address:", dtable->table_addr);
+ HDfprintf(stream, "%*s%-*s %" PRIuHADDR "\n", indent, "", fwidth,
+ "Table's root address:", dtable->table_addr);
HDfprintf(stream, "%*s%-*s %u\n", indent, "", fwidth,
"Current # of rows in root indirect block:", dtable->curr_root_rows);
@@ -211,7 +212,7 @@ H5HF__dtable_debug(const H5HF_dtable_t *dtable, FILE *stream, int indent, int fw
"Max. # of direct rows in any indirect block:", dtable->max_direct_rows);
HDfprintf(stream, "%*s%-*s %u\n", indent, "", fwidth,
"# of bits for IDs in first row:", dtable->first_row_bits);
- HDfprintf(stream, "%*s%-*s %Hu\n", indent, "", fwidth,
+ HDfprintf(stream, "%*s%-*s %" PRIuHSIZE " \n", indent, "", fwidth,
"# of IDs in first row:", dtable->num_id_first_row);
FUNC_LEAVE_NOAPI(SUCCEED)
@@ -250,32 +251,37 @@ H5HF_hdr_print(const H5HF_hdr_t *hdr, hbool_t dump_internal, FILE *stream, int i
*/
HDfprintf(stream, "%*s%-*s %s\n", indent, "", fwidth,
"Heap is:", hdr->man_dtable.curr_root_rows > 0 ? "Indirect" : "Direct");
- HDfprintf(stream, "%*s%-*s %t\n", indent, "", fwidth,
- "Objects stored in 'debugging' format:", hdr->debug_objs);
- HDfprintf(stream, "%*s%-*s %t\n", indent, "", fwidth, "'Write once' flag:", hdr->write_once);
- HDfprintf(stream, "%*s%-*s %t\n", indent, "", fwidth,
- "'Huge' object IDs have wrapped:", hdr->huge_ids_wrapped);
- HDfprintf(stream, "%*s%-*s %Hu\n", indent, "", fwidth,
+ HDfprintf(stream, "%*s%-*s %s\n", indent, "", fwidth,
+ "Objects stored in 'debugging' format:", hdr->debug_objs ? "TRUE" : "FALSE");
+ HDfprintf(stream, "%*s%-*s %s\n", indent, "", fwidth,
+ "'Write once' flag:", hdr->write_once ? "TRUE" : "FALSE");
+ HDfprintf(stream, "%*s%-*s %s\n", indent, "", fwidth,
+ "'Huge' object IDs have wrapped:", hdr->huge_ids_wrapped ? "TRUE" : "FALSE");
+ HDfprintf(stream, "%*s%-*s %" PRIuHSIZE " \n", indent, "", fwidth,
"Free space in managed blocks:", hdr->total_man_free);
- HDfprintf(stream, "%*s%-*s %Hu\n", indent, "", fwidth, "Managed space data block size:", hdr->man_size);
- HDfprintf(stream, "%*s%-*s %Hu\n", indent, "", fwidth,
+ HDfprintf(stream, "%*s%-*s %" PRIuHSIZE " \n", indent, "", fwidth,
+ "Managed space data block size:", hdr->man_size);
+ HDfprintf(stream, "%*s%-*s %" PRIuHSIZE " \n", indent, "", fwidth,
"Total managed space allocated:", hdr->man_alloc_size);
- HDfprintf(stream, "%*s%-*s %Hu\n", indent, "", fwidth,
+ HDfprintf(stream, "%*s%-*s %" PRIuHSIZE " \n", indent, "", fwidth,
"Offset of managed space iterator:", hdr->man_iter_off);
- HDfprintf(stream, "%*s%-*s %Hu\n", indent, "", fwidth,
+ HDfprintf(stream, "%*s%-*s %" PRIuHSIZE " \n", indent, "", fwidth,
"Number of managed objects in heap:", hdr->man_nobjs);
- HDfprintf(stream, "%*s%-*s %a\n", indent, "", fwidth,
+ HDfprintf(stream, "%*s%-*s %" PRIuHADDR "\n", indent, "", fwidth,
"Address of free space manager for managed blocks:", hdr->fs_addr);
HDfprintf(stream, "%*s%-*s %lu\n", indent, "", fwidth,
"Max. size of managed object:", (unsigned long)hdr->max_man_size);
- HDfprintf(stream, "%*s%-*s %Hu\n", indent, "", fwidth, "'Huge' object space used:", hdr->huge_size);
- HDfprintf(stream, "%*s%-*s %Hu\n", indent, "", fwidth,
+ HDfprintf(stream, "%*s%-*s %" PRIuHSIZE " \n", indent, "", fwidth,
+ "'Huge' object space used:", hdr->huge_size);
+ HDfprintf(stream, "%*s%-*s %" PRIuHSIZE " \n", indent, "", fwidth,
"Number of 'huge' objects in heap:", hdr->huge_nobjs);
- HDfprintf(stream, "%*s%-*s %Hu\n", indent, "", fwidth, "ID of next 'huge' object:", hdr->huge_next_id);
- HDfprintf(stream, "%*s%-*s %a\n", indent, "", fwidth,
+ HDfprintf(stream, "%*s%-*s %" PRIuHSIZE " \n", indent, "", fwidth,
+ "ID of next 'huge' object:", hdr->huge_next_id);
+ HDfprintf(stream, "%*s%-*s %" PRIuHADDR "\n", indent, "", fwidth,
"Address of v2 B-tree for 'huge' objects:", hdr->huge_bt2_addr);
- HDfprintf(stream, "%*s%-*s %Hu\n", indent, "", fwidth, "'Tiny' object space used:", hdr->tiny_size);
- HDfprintf(stream, "%*s%-*s %Hu\n", indent, "", fwidth,
+ HDfprintf(stream, "%*s%-*s %" PRIuHSIZE " \n", indent, "", fwidth,
+ "'Tiny' object space used:", hdr->tiny_size);
+ HDfprintf(stream, "%*s%-*s %" PRIuHSIZE " \n", indent, "", fwidth,
"Number of 'tiny' objects in heap:", hdr->tiny_nobjs);
HDfprintf(stream, "%*sManaged Objects Doubling-Table Info...\n", indent, "");
@@ -285,7 +291,7 @@ H5HF_hdr_print(const H5HF_hdr_t *hdr, hbool_t dump_internal, FILE *stream, int i
if (hdr->filter_len > 0) {
HDfprintf(stream, "%*sI/O filter Info...\n", indent, "");
if (hdr->man_dtable.curr_root_rows == 0) {
- HDfprintf(stream, "%*s%-*s %Zu\n", indent + 3, "", MAX(0, fwidth - 3),
+ HDfprintf(stream, "%*s%-*s %zu\n", indent + 3, "", MAX(0, fwidth - 3),
"Compressed size of root direct block:", hdr->pline_root_direct_size);
HDfprintf(stream, "%*s%-*s %x\n", indent + 3, "", MAX(0, fwidth - 3),
"Filter mask for root direct block:", hdr->pline_root_direct_filter_mask);
@@ -301,7 +307,7 @@ H5HF_hdr_print(const H5HF_hdr_t *hdr, hbool_t dump_internal, FILE *stream, int i
HDfprintf(stream, "%*s%-*s %x\n", indent + 3, "", MAX(0, fwidth - 3),
"Root indirect block flags:", hdr->root_iblock_flags);
HDfprintf(stream, "%*s%-*s %p\n", indent + 3, "", MAX(0, fwidth - 3),
- "Root indirect block pointer:", hdr->root_iblock);
+ "Root indirect block pointer:", (void *)hdr->root_iblock);
if (hdr->root_iblock)
H5HF_iblock_print(hdr->root_iblock, dump_internal, stream, indent + 3, fwidth);
} /* end if */
@@ -412,7 +418,7 @@ H5HF_dblock_debug_cb(H5FS_section_info_t *_sect, void *_udata)
len = end - start;
HDsnprintf(temp_str, sizeof(temp_str), "Section #%u:", (unsigned)udata->sect_count);
- HDfprintf(udata->stream, "%*s%-*s %8Zu, %8Zu\n", udata->indent + 3, "", MAX(0, udata->fwidth - 9),
+ HDfprintf(udata->stream, "%*s%-*s %8zu, %8zu\n", udata->indent + 3, "", MAX(0, udata->fwidth - 9),
temp_str, start, len);
udata->sect_count++;
@@ -486,12 +492,12 @@ H5HF_dblock_debug(H5F_t *f, haddr_t addr, FILE *stream, int indent, int fwidth,
/*
* Print the values.
*/
- HDfprintf(stream, "%*s%-*s %a\n", indent, "", fwidth,
+ HDfprintf(stream, "%*s%-*s %" PRIuHADDR "\n", indent, "", fwidth,
"Address of fractal heap that owns this block:", hdr->heap_addr);
- HDfprintf(stream, "%*s%-*s %Hu\n", indent, "", fwidth,
+ HDfprintf(stream, "%*s%-*s %" PRIuHSIZE " \n", indent, "", fwidth,
"Offset of direct block in heap:", dblock->block_off);
blk_prefix_size = H5HF_MAN_ABS_DIRECT_OVERHEAD(hdr);
- HDfprintf(stream, "%*s%-*s %Zu\n", indent, "", fwidth, "Size of block header:", blk_prefix_size);
+ HDfprintf(stream, "%*s%-*s %zu\n", indent, "", fwidth, "Size of block header:", blk_prefix_size);
/* Allocate space for the free space markers */
if (NULL == (marker = (uint8_t *)H5MM_calloc(dblock->size)))
@@ -594,11 +600,11 @@ H5HF_iblock_print(const H5HF_indirect_t *iblock, hbool_t dump_internal, FILE *st
/*
* Print the values.
*/
- HDfprintf(stream, "%*s%-*s %a\n", indent, "", fwidth,
+ HDfprintf(stream, "%*s%-*s %" PRIuHADDR "\n", indent, "", fwidth,
"Address of fractal heap that owns this block:", hdr->heap_addr);
- HDfprintf(stream, "%*s%-*s %Hu\n", indent, "", fwidth,
+ HDfprintf(stream, "%*s%-*s %" PRIuHSIZE " \n", indent, "", fwidth,
"Offset of indirect block in heap:", iblock->block_off);
- HDfprintf(stream, "%*s%-*s %Zu\n", indent, "", fwidth, "Size of indirect block:", iblock->size);
+ HDfprintf(stream, "%*s%-*s %zu\n", indent, "", fwidth, "Size of indirect block:", iblock->size);
HDfprintf(stream, "%*s%-*s %u\n", indent, "", fwidth, "Current # of rows:", iblock->nrows);
HDfprintf(stream, "%*s%-*s %u\n", indent, "", fwidth, "Max. # of rows:", iblock->max_rows);
HDfprintf(stream, "%*s%-*s %u\n", indent, "", fwidth,
@@ -618,11 +624,11 @@ H5HF_iblock_print(const H5HF_indirect_t *iblock, hbool_t dump_internal, FILE *st
HDsnprintf(temp_str, sizeof(temp_str), "Col #%u:", (unsigned)v);
if (hdr->filter_len > 0)
- HDfprintf(stream, "%*s%-*s %9a/%6Zu/%x\n", indent + 6, "", MAX(0, fwidth - 6), temp_str,
- iblock->ents[off].addr, iblock->filt_ents[off].size,
+ HDfprintf(stream, "%*s%-*s %9" PRIuHADDR "/%6zu/%x\n", indent + 6, "", MAX(0, fwidth - 6),
+ temp_str, iblock->ents[off].addr, iblock->filt_ents[off].size,
iblock->filt_ents[off].filter_mask);
else
- HDfprintf(stream, "%*s%-*s %9a\n", indent + 6, "", MAX(0, fwidth - 6), temp_str,
+ HDfprintf(stream, "%*s%-*s %9" PRIuHADDR "\n", indent + 6, "", MAX(0, fwidth - 6), temp_str,
iblock->ents[off].addr);
} /* end for */
} /* end for */
@@ -642,7 +648,7 @@ H5HF_iblock_print(const H5HF_indirect_t *iblock, hbool_t dump_internal, FILE *st
size_t off = (u * hdr->man_dtable.cparam.width) + v;
HDsnprintf(temp_str, sizeof(temp_str), "Col #%u:", (unsigned)v);
- HDfprintf(stream, "%*s%-*s %9a\n", indent + 6, "", MAX(0, fwidth - 6), temp_str,
+ HDfprintf(stream, "%*s%-*s %9" PRIuHADDR "\n", indent + 6, "", MAX(0, fwidth - 6), temp_str,
iblock->ents[off].addr);
} /* end for */
} /* end for */
@@ -655,12 +661,12 @@ H5HF_iblock_print(const H5HF_indirect_t *iblock, hbool_t dump_internal, FILE *st
HDfprintf(stream, "%*sFractal Indirect Block Internal Information:\n", indent, "");
/* Print general information */
- HDfprintf(stream, "%*s%-*s %Zu\n", indent + 3, "", MAX(0, fwidth - 3),
+ HDfprintf(stream, "%*s%-*s %zu\n", indent + 3, "", MAX(0, fwidth - 3),
"Reference count:", iblock->rc);
/* Print parent's information */
HDfprintf(stream, "%*s%-*s %p\n", indent + 3, "", MAX(0, fwidth - 3),
- "Parent indirect block address:", iblock->parent);
+ "Parent indirect block address:", (void *)iblock->parent);
if (iblock->parent)
H5HF_iblock_print(iblock->parent, TRUE, stream, indent + 6, fwidth);
} /* end if */
@@ -760,9 +766,9 @@ H5HF_sects_debug_cb(H5FS_section_info_t *_sect, void *_udata)
: (sect->sect_info.type == H5HF_FSPACE_SECT_FIRST_ROW
? "first row"
: (sect->sect_info.type == H5HF_FSPACE_SECT_NORMAL_ROW ? "normal row" : "unknown"))));
- HDfprintf(udata->stream, "%*s%-*s %a\n", udata->indent, "", udata->fwidth,
+ HDfprintf(udata->stream, "%*s%-*s %" PRIuHADDR "\n", udata->indent, "", udata->fwidth,
"Section address:", sect->sect_info.addr);
- HDfprintf(udata->stream, "%*s%-*s %Hu\n", udata->indent, "", udata->fwidth,
+ HDfprintf(udata->stream, "%*s%-*s %" PRIuHSIZE "\n", udata->indent, "", udata->fwidth,
"Section size:", sect->sect_info.size);
/* Dump section-specific debugging information */
diff --git a/src/H5HFdblock.c b/src/H5HFdblock.c
index 341b83b..ad2c833 100644
--- a/src/H5HFdblock.c
+++ b/src/H5HFdblock.c
@@ -396,7 +396,7 @@ H5HF__man_dblock_new(H5HF_hdr_t *hdr, size_t request, H5HF_free_section_t **ret_
if (min_dblock_size > next_size) {
HDfprintf(
stderr,
- "%s: Skipping direct block sizes not supported, min_dblock_size = %Zu, next_size = %Zu\n",
+ "%s: Skipping direct block sizes not supported, min_dblock_size = %zu, next_size = %zu\n",
FUNC, min_dblock_size, next_size);
HGOTO_ERROR(H5E_HEAP, H5E_UNSUPPORTED, FAIL, "skipping direct block sizes not supported yet")
} /* end if */
diff --git a/src/H5HL.c b/src/H5HL.c
index a12194b..4186d2a 100644
--- a/src/H5HL.c
+++ b/src/H5HL.c
@@ -100,78 +100,78 @@ H5FL_BLK_DEFINE(lheap_chunk);
*/
BEGIN_FUNC(PRIV, ERR, herr_t, SUCCEED, FAIL, H5HL_create(H5F_t *f, 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 = 0; /* Total heap size on disk */
-
-/* check arguments */
-HDassert(f);
-HDassert(addr_p);
-
-/* Adjust size hint as necessary */
-if (size_hint && 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))))
- 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, total_size)))
- H5E_THROW(H5E_CANTALLOC, "unable to allocate file memory");
-
-/* Initialize info */
-heap->single_cache_obj = TRUE;
-heap->dblk_addr = heap->prfx_addr + (hsize_t)heap->prfx_size;
-heap->dblk_size = size_hint;
-if (size_hint)
- if (NULL == (heap->dblk_image = H5FL_BLK_CALLOC(lheap_chunk, size_hint)))
- H5E_THROW(H5E_CANTALLOC, "memory allocation failed");
-
-/* free list */
-if (size_hint) {
- 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->free_block = H5HL_FREE_NULL;
-} /* end else */
-
-/* Allocate the heap prefix */
-if (NULL == (prfx = H5HL__prfx_new(heap)))
- H5E_THROW(H5E_CANTALLOC, "memory allocation failed");
-
-/* Add to cache */
-if (FAIL == H5AC_insert_entry(f, 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;
-
-CATCH
-if (ret_value < 0) {
- *addr_p = HADDR_UNDEF;
- if (prfx) {
- if (FAIL == H5HL__prfx_dest(prfx))
- H5E_THROW(H5E_CANTFREE, "unable to destroy local heap prefix");
+ H5HL_t * heap = NULL; /* Heap created */
+ H5HL_prfx_t *prfx = NULL; /* Heap prefix */
+ hsize_t total_size = 0; /* Total heap size on disk */
+
+ /* check arguments */
+ HDassert(f);
+ HDassert(addr_p);
+
+ /* Adjust size hint as necessary */
+ if (size_hint && 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))))
+ 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, total_size)))
+ H5E_THROW(H5E_CANTALLOC, "unable to allocate file memory");
+
+ /* Initialize info */
+ heap->single_cache_obj = TRUE;
+ heap->dblk_addr = heap->prfx_addr + (hsize_t)heap->prfx_size;
+ heap->dblk_size = size_hint;
+ if (size_hint)
+ if (NULL == (heap->dblk_image = H5FL_BLK_CALLOC(lheap_chunk, size_hint)))
+ H5E_THROW(H5E_CANTALLOC, "memory allocation failed");
+
+ /* free list */
+ if (size_hint) {
+ 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 {
- if (heap) {
- if (H5F_addr_defined(heap->prfx_addr))
- if (FAIL == H5MF_xfree(f, H5FD_MEM_LHEAP, 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");
+ heap->freelist = NULL;
+ heap->free_block = H5HL_FREE_NULL;
+ } /* end else */
+
+ /* Allocate the heap prefix */
+ if (NULL == (prfx = H5HL__prfx_new(heap)))
+ H5E_THROW(H5E_CANTALLOC, "memory allocation failed");
+
+ /* Add to cache */
+ if (FAIL == H5AC_insert_entry(f, 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;
+
+ CATCH
+ if (ret_value < 0) {
+ *addr_p = HADDR_UNDEF;
+ if (prfx) {
+ if (FAIL == H5HL__prfx_dest(prfx))
+ H5E_THROW(H5E_CANTFREE, "unable to destroy local heap prefix");
} /* end if */
- } /* end else */
-} /* end if */
+ else {
+ if (heap) {
+ if (H5F_addr_defined(heap->prfx_addr))
+ if (FAIL == H5MF_xfree(f, H5FD_MEM_LHEAP, 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 */
END_FUNC(PRIV) /* end H5HL_create() */
@@ -190,103 +190,104 @@ END_FUNC(PRIV) /* end H5HL_create() */
*/
BEGIN_FUNC(STATIC, ERR, herr_t, SUCCEED, FAIL, H5HL__minimize_heap_space(H5F_t *f, H5HL_t *heap))
-size_t new_heap_size = heap->dblk_size; /* New size of heap */
-
-/* check args */
-HDassert(f);
-HDassert(heap);
+ size_t new_heap_size = heap->dblk_size; /* New size of heap */
-/*
- * Check to see if we can reduce the size of the heap in memory by
- * eliminating free blocks at the tail of the buffer before flushing the
- * buffer out.
- */
-if (heap->freelist) {
- H5HL_free_t *tmp_fl;
- H5HL_free_t *last_fl = NULL;
-
- /* Search for a free block at the end of the buffer */
- for (tmp_fl = heap->freelist; tmp_fl; tmp_fl = tmp_fl->next)
- /* Check if the end of this free block is at the end of the buffer */
- if (tmp_fl->offset + tmp_fl->size == heap->dblk_size) {
- last_fl = tmp_fl;
- break;
- } /* end if */
+ /* check args */
+ HDassert(f);
+ HDassert(heap);
/*
- * Found free block at the end of the buffer, decide what to do
- * about it
+ * Check to see if we can reduce the size of the heap in memory by
+ * eliminating free blocks at the tail of the buffer before flushing the
+ * buffer out.
*/
- if (last_fl) {
+ if (heap->freelist) {
+ H5HL_free_t *tmp_fl;
+ H5HL_free_t *last_fl = NULL;
+
+ /* Search for a free block at the end of the buffer */
+ for (tmp_fl = heap->freelist; tmp_fl; tmp_fl = tmp_fl->next)
+ /* Check if the end of this free block is at the end of the buffer */
+ if (tmp_fl->offset + tmp_fl->size == heap->dblk_size) {
+ last_fl = tmp_fl;
+ break;
+ } /* end if */
+
/*
- * If the last free block's size is more than half the memory
- * buffer size (and the memory buffer is larger than the
- * minimum size), reduce or eliminate it.
+ * Found free block at the end of the buffer, decide what to do
+ * about it
*/
- if (last_fl->size >= (heap->dblk_size / 2) && heap->dblk_size > H5HL_MIN_HEAP) {
- /*
- * Reduce size of buffer until it's too small or would
- * eliminate the free block
- */
- while (new_heap_size > H5HL_MIN_HEAP && new_heap_size >= (last_fl->offset + H5HL_SIZEOF_FREE(f)))
- new_heap_size /= 2;
-
+ if (last_fl) {
/*
- * Check if reducing the memory buffer size would
- * eliminate the free block
+ * If the last free block's size is more than half the memory
+ * buffer size (and the memory buffer is larger than the
+ * minimum size), reduce or eliminate it.
*/
- if (new_heap_size < (last_fl->offset + H5HL_SIZEOF_FREE(f))) {
- /* Check if this is the only block on the free list */
- if (last_fl->prev == NULL && last_fl->next == NULL) {
- /* Double the new memory size */
- new_heap_size *= 2;
-
+ if (last_fl->size >= (heap->dblk_size / 2) && heap->dblk_size > H5HL_MIN_HEAP) {
+ /*
+ * Reduce size of buffer until it's too small or would
+ * eliminate the free block
+ */
+ while (new_heap_size > H5HL_MIN_HEAP &&
+ new_heap_size >= (last_fl->offset + H5HL_SIZEOF_FREE(f)))
+ new_heap_size /= 2;
+
+ /*
+ * Check if reducing the memory buffer size would
+ * eliminate the free block
+ */
+ if (new_heap_size < (last_fl->offset + H5HL_SIZEOF_FREE(f))) {
+ /* Check if this is the only block on the free list */
+ if (last_fl->prev == NULL && last_fl->next == NULL) {
+ /* Double the new memory size */
+ new_heap_size *= 2;
+
+ /* Truncate the free block */
+ last_fl->size = H5HL_ALIGN(new_heap_size - last_fl->offset);
+ new_heap_size = last_fl->offset + last_fl->size;
+ HDassert(last_fl->size >= H5HL_SIZEOF_FREE(f));
+ } /* end if */
+ else {
+ /*
+ * Set the size of the memory buffer to the start
+ * of the free list
+ */
+ new_heap_size = last_fl->offset;
+
+ /* Eliminate the free block from the list */
+ last_fl = H5HL__remove_free(heap, last_fl);
+ } /* end else */
+ } /* end if */
+ else {
/* Truncate the free block */
last_fl->size = H5HL_ALIGN(new_heap_size - last_fl->offset);
new_heap_size = last_fl->offset + last_fl->size;
HDassert(last_fl->size >= H5HL_SIZEOF_FREE(f));
- } /* end if */
- else {
- /*
- * Set the size of the memory buffer to the start
- * of the free list
- */
- new_heap_size = last_fl->offset;
-
- /* Eliminate the free block from the list */
- last_fl = H5HL__remove_free(heap, last_fl);
+ HDassert(last_fl->size == H5HL_ALIGN(last_fl->size));
} /* end else */
} /* end if */
- else {
- /* Truncate the free block */
- last_fl->size = H5HL_ALIGN(new_heap_size - last_fl->offset);
- new_heap_size = last_fl->offset + last_fl->size;
- HDassert(last_fl->size >= H5HL_SIZEOF_FREE(f));
- HDassert(last_fl->size == H5HL_ALIGN(last_fl->size));
- } /* end else */
- } /* end if */
- } /* end if */
-} /* end if */
+ } /* end if */
+ } /* end if */
-/*
- * If the heap grew smaller than disk storage then move the
- * data segment of the heap to another contiguous block of disk
- * storage.
- */
-if (new_heap_size != heap->dblk_size) {
- HDassert(new_heap_size < heap->dblk_size);
+ /*
+ * If the heap grew smaller than disk storage then move the
+ * data segment of the heap to another contiguous block of disk
+ * storage.
+ */
+ if (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)))
- H5E_THROW(H5E_CANTALLOC, "memory allocation failed");
+ /* Resize the memory buffer */
+ if (NULL == (heap->dblk_image = H5FL_BLK_REALLOC(lheap_chunk, heap->dblk_image, new_heap_size)))
+ H5E_THROW(H5E_CANTALLOC, "memory allocation failed");
- /* Reallocate data block in file */
- if (FAIL == H5HL__dblk_realloc(f, heap, new_heap_size))
- H5E_THROW(H5E_CANTRESIZE, "reallocating data block failed");
-} /* end if */
+ /* Reallocate data block in file */
+ if (FAIL == H5HL__dblk_realloc(f, heap, new_heap_size))
+ H5E_THROW(H5E_CANTRESIZE, "reallocating data block failed");
+ } /* end if */
-CATCH
-/* No special processing on errors */
+ CATCH
+ /* No special processing on errors */
END_FUNC(STATIC) /* H5HL__minimize_heap_space() */
@@ -305,64 +306,65 @@ END_FUNC(STATIC) /* H5HL__minimize_heap_space() */
*/
BEGIN_FUNC(PRIV, ERR, H5HL_t *, NULL, NULL, H5HL_protect(H5F_t *f, haddr_t addr, unsigned flags))
-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 = NULL; /* 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);
-HDassert(H5F_addr_defined(addr));
-
-/* only the H5AC__READ_ONLY_FLAG may appear in flags */
-HDassert((flags & (unsigned)(~H5AC__READ_ONLY_FLAG)) == 0);
-
-/* Construct the user data for protect callback */
-prfx_udata.sizeof_size = H5F_SIZEOF_SIZE(f);
-prfx_udata.sizeof_addr = H5F_SIZEOF_ADDR(f);
-prfx_udata.prfx_addr = addr;
-prfx_udata.sizeof_prfx = H5HL_SIZEOF_HDR(f);
-
-/* Protect the local heap prefix */
-if (NULL == (prfx = (H5HL_prfx_t *)H5AC_protect(f, H5AC_LHEAP_PRFX, addr, &prfx_udata, flags)))
- H5E_THROW(H5E_CANTPROTECT, "unable to load heap prefix");
-
-/* Get the pointer to the heap */
-heap = prfx->heap;
-
-/* Check if the heap is already pinned in memory */
-/* (for re-entrant situation) */
-if (heap->prots == 0) {
- /* Check if heap has separate data block */
- if (heap->single_cache_obj)
- /* Set the flag for pinning the prefix when unprotecting it */
- prfx_cache_flags |= H5AC__PIN_ENTRY_FLAG;
- else {
- /* Protect the local heap data block */
- if (NULL == (dblk = (H5HL_dblk_t *)H5AC_protect(f, H5AC_LHEAP_DBLK, heap->dblk_addr, heap, flags)))
- H5E_THROW(H5E_CANTPROTECT, "unable to load heap data block");
+ 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 = NULL; /* 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);
+ HDassert(H5F_addr_defined(addr));
+
+ /* only the H5AC__READ_ONLY_FLAG may appear in flags */
+ HDassert((flags & (unsigned)(~H5AC__READ_ONLY_FLAG)) == 0);
+
+ /* Construct the user data for protect callback */
+ prfx_udata.sizeof_size = H5F_SIZEOF_SIZE(f);
+ prfx_udata.sizeof_addr = H5F_SIZEOF_ADDR(f);
+ prfx_udata.prfx_addr = addr;
+ prfx_udata.sizeof_prfx = H5HL_SIZEOF_HDR(f);
+
+ /* Protect the local heap prefix */
+ if (NULL == (prfx = (H5HL_prfx_t *)H5AC_protect(f, H5AC_LHEAP_PRFX, addr, &prfx_udata, flags)))
+ H5E_THROW(H5E_CANTPROTECT, "unable to load heap prefix");
+
+ /* Get the pointer to the heap */
+ heap = prfx->heap;
+
+ /* Check if the heap is already pinned in memory */
+ /* (for re-entrant situation) */
+ if (heap->prots == 0) {
+ /* Check if heap has separate data block */
+ if (heap->single_cache_obj)
+ /* Set the flag for pinning the prefix when unprotecting it */
+ prfx_cache_flags |= H5AC__PIN_ENTRY_FLAG;
+ else {
+ /* Protect the local heap data block */
+ if (NULL ==
+ (dblk = (H5HL_dblk_t *)H5AC_protect(f, H5AC_LHEAP_DBLK, heap->dblk_addr, heap, flags)))
+ H5E_THROW(H5E_CANTPROTECT, "unable to load heap data block");
- /* Set the flag for pinning the data block when unprotecting it */
- dblk_cache_flags |= H5AC__PIN_ENTRY_FLAG;
- } /* end if */
-} /* end if */
+ /* Set the flag for pinning the data block when unprotecting it */
+ dblk_cache_flags |= H5AC__PIN_ENTRY_FLAG;
+ } /* end if */
+ } /* end if */
-/* Increment # of times heap is protected */
-heap->prots++;
+ /* Increment # of times heap is protected */
+ heap->prots++;
-/* Set return value */
-ret_value = heap;
+ /* Set return value */
+ ret_value = heap;
-CATCH
-/* Release the prefix from the cache, now pinned */
-if (prfx && heap && H5AC_unprotect(f, H5AC_LHEAP_PRFX, heap->prfx_addr, prfx, prfx_cache_flags) < 0)
- H5E_THROW(H5E_CANTUNPROTECT, "unable to release local heap prefix");
+ CATCH
+ /* Release the prefix from the cache, now pinned */
+ if (prfx && heap && H5AC_unprotect(f, H5AC_LHEAP_PRFX, heap->prfx_addr, prfx, prfx_cache_flags) < 0)
+ H5E_THROW(H5E_CANTUNPROTECT, "unable to release local heap prefix");
-/* Release the data block from the cache, now pinned */
-if (dblk && heap && H5AC_unprotect(f, H5AC_LHEAP_DBLK, heap->dblk_addr, dblk, dblk_cache_flags) < 0)
- H5E_THROW(H5E_CANTUNPROTECT, "unable to release local heap data block");
+ /* Release the data block from the cache, now pinned */
+ if (dblk && heap && H5AC_unprotect(f, H5AC_LHEAP_DBLK, heap->dblk_addr, dblk, dblk_cache_flags) < 0)
+ H5E_THROW(H5E_CANTUNPROTECT, "unable to release local heap data block");
END_FUNC(PRIV) /* end H5HL_protect() */
@@ -382,14 +384,14 @@ END_FUNC(PRIV) /* end H5HL_protect() */
*/
BEGIN_FUNC(PRIV, ERR, void *, NULL, NULL, H5HL_offset_into(const H5HL_t *heap, size_t offset))
-/* Sanity check */
-HDassert(heap);
-if (offset >= heap->dblk_size)
- H5E_THROW(H5E_CANTGET, "unable to offset into local heap data block");
+ /* Sanity check */
+ HDassert(heap);
+ if (offset >= heap->dblk_size)
+ H5E_THROW(H5E_CANTGET, "unable to offset into local heap data block");
-ret_value = heap->dblk_image + offset;
+ ret_value = heap->dblk_image + offset;
-CATCH
+ CATCH
/* No special processing on errors */
END_FUNC(PRIV) /* end H5HL_offset_into() */
@@ -407,33 +409,33 @@ END_FUNC(PRIV) /* end H5HL_offset_into() */
*/
BEGIN_FUNC(PRIV, ERR, herr_t, SUCCEED, FAIL, H5HL_unprotect(H5HL_t *heap))
-/* check arguments */
-HDassert(heap);
+ /* check arguments */
+ HDassert(heap);
-/* Decrement # of times heap is protected */
-heap->prots--;
+ /* Decrement # of times heap is protected */
+ heap->prots--;
-/* Check for last unprotection of heap */
-if (heap->prots == 0) {
- /* Check for separate heap data block */
- if (heap->single_cache_obj) {
- /* Mark local heap prefix as evictable again */
- if (FAIL == H5AC_unpin_entry(heap->prfx))
- H5E_THROW(H5E_CANTUNPIN, "unable to unpin local heap data block");
- } /* end if */
- else {
- /* Sanity check */
- HDassert(heap->dblk);
+ /* Check for last unprotection of heap */
+ if (heap->prots == 0) {
+ /* Check for separate heap data block */
+ if (heap->single_cache_obj) {
+ /* Mark local heap prefix as evictable again */
+ if (FAIL == H5AC_unpin_entry(heap->prfx))
+ H5E_THROW(H5E_CANTUNPIN, "unable to unpin local heap data block");
+ } /* end if */
+ else {
+ /* Sanity check */
+ HDassert(heap->dblk);
- /* Mark local heap data block as evictable again */
- /* (data block still pins prefix) */
- if (FAIL == H5AC_unpin_entry(heap->dblk))
- H5E_THROW(H5E_CANTUNPIN, "unable to unpin local heap data block");
- } /* end else */
-} /* end if */
+ /* Mark local heap data block as evictable again */
+ /* (data block still pins prefix) */
+ if (FAIL == H5AC_unpin_entry(heap->dblk))
+ H5E_THROW(H5E_CANTUNPIN, "unable to unpin local heap data block");
+ } /* end else */
+ } /* end if */
-CATCH
-/* No special processing on errors */
+ CATCH
+ /* No special processing on errors */
END_FUNC(PRIV) /* end H5HL_unprotect() */
@@ -452,16 +454,16 @@ END_FUNC(PRIV) /* end H5HL_unprotect() */
*/
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;
-if (fl->next)
- fl->next->prev = fl->prev;
+ if (fl->prev)
+ fl->prev->next = fl->next;
+ if (fl->next)
+ fl->next->prev = fl->prev;
-if (!fl->prev)
- heap->freelist = fl->next;
+ if (!fl->prev)
+ heap->freelist = fl->next;
-/* H5FL_FREE always returns NULL so we can't check for errors */
-ret_value = (H5HL_free_t *)H5FL_FREE(H5HL_free_t, fl);
+ /* 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() */
@@ -479,25 +481,25 @@ END_FUNC(STATIC) /* end H5HL__remove_free() */
*/
BEGIN_FUNC(STATIC, ERR, herr_t, SUCCEED, FAIL, H5HL__dirty(H5HL_t *heap))
-/* check arguments */
-HDassert(heap);
-HDassert(heap->prfx);
+ /* check arguments */
+ HDassert(heap);
+ HDassert(heap->prfx);
-/* Mark heap data block as dirty, if there is one */
-if (!heap->single_cache_obj) {
- /* Sanity check */
- HDassert(heap->dblk);
+ /* Mark heap data block as dirty, if there is one */
+ if (!heap->single_cache_obj) {
+ /* Sanity check */
+ HDassert(heap->dblk);
- if (FAIL == H5AC_mark_entry_dirty(heap->dblk))
- H5E_THROW(H5E_CANTMARKDIRTY, "unable to mark heap data block as dirty");
-} /* end if */
+ 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 (FAIL == H5AC_mark_entry_dirty(heap->prfx))
- H5E_THROW(H5E_CANTMARKDIRTY, "unable to mark heap prefix as dirty");
+ /* Mark heap prefix as dirty */
+ if (FAIL == H5AC_mark_entry_dirty(heap->prfx))
+ H5E_THROW(H5E_CANTMARKDIRTY, "unable to mark heap prefix as dirty");
-CATCH
-/* No special processing on errors */
+ CATCH
+ /* No special processing on errors */
END_FUNC(STATIC) /* end H5HL__dirty() */
@@ -517,192 +519,192 @@ END_FUNC(STATIC) /* end H5HL__dirty() */
BEGIN_FUNC(PRIV, ERR, size_t, UFAIL, UFAIL,
H5HL_insert(H5F_t *f, 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;
-
-/* check arguments */
-HDassert(f);
-HDassert(heap);
-HDassert(buf_size > 0);
-HDassert(buf);
-
-/* Mark heap as dirty in cache */
-/* (A bit early in the process, but it's difficult to determine in the
- * code below where to mark the heap as dirty, especially in error cases,
- * so we just accept that an extra flush of the heap info could occur
- * if an error occurs -QAK)
- */
-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,
- * whatever that might mean, we round the size up to the next multiple of
- * a word.
- */
-need_size = H5HL_ALIGN(buf_size);
+ H5HL_free_t *fl = NULL, *last_fl = NULL;
+ size_t offset = 0;
+ size_t need_size;
+ hbool_t found;
+
+ /* check arguments */
+ HDassert(f);
+ HDassert(heap);
+ HDassert(buf_size > 0);
+ HDassert(buf);
+
+ /* Mark heap as dirty in cache */
+ /* (A bit early in the process, but it's difficult to determine in the
+ * code below where to mark the heap as dirty, especially in error cases,
+ * so we just accept that an extra flush of the heap info could occur
+ * if an error occurs -QAK)
+ */
+ if (FAIL == H5HL__dirty(heap))
+ H5E_THROW(H5E_CANTMARKDIRTY, "unable to mark heap as dirty");
-/*
- * Look for a free slot large enough for this object and which would
- * 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;
- }
-} /* end for */
-
-/*
- * If no free chunk was large enough, then allocate more space and
- * add it to the free list. If the heap ends with a free chunk, we
- * can extend that free chunk. Otherwise we'll have to make another
- * 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 was_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);
-
- /* 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
- * least the new object and a free-list info, trim down the amount of
- * space requested to just the amount of space needed. (Generally
- * speaking, this only occurs when the heap is small -QAK)
+ /*
+ * In order to keep the free list descriptors aligned on word boundaries,
+ * whatever that might mean, we round the size up to the next multiple of
+ * a word.
*/
- 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);
- 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);
-
- /* Extend current heap if possible */
- was_extended =
- H5MF_try_extend(f, H5FD_MEM_LHEAP, heap->dblk_addr, (hsize_t)(heap->dblk_size), (hsize_t)need_more);
- if (FAIL == was_extended)
- H5E_THROW(H5E_CANTEXTEND, "error trying to extend heap");
-
- /* Check if we extended the heap data block in file */
- if (was_extended == TRUE) {
- /* Check for prefix & data block contiguous */
- if (heap->single_cache_obj) {
- /* Resize prefix+data block */
- 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 (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 */
+ need_size = H5HL_ALIGN(buf_size);
- /* Note new size */
- heap->dblk_size = new_dblk_size;
- } /* end if */
- else { /* ...if we can't, allocate a new chunk & release the old */
- /* Reallocate data block in file */
- if (FAIL == H5HL__dblk_realloc(f, heap, new_dblk_size))
- H5E_THROW(H5E_CANTRESIZE, "reallocating data block failed");
- } /* end if */
+ /*
+ * Look for a free slot large enough for this object and which would
+ * 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;
+ }
+ } /* end for */
- /* 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.
+ /*
+ * If no free chunk was large enough, then allocate more space and
+ * add it to the free list. If the heap ends with a free chunk, we
+ * can extend that free chunk. Otherwise we'll have to make another
+ * 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 was_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);
+
+ /* 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
+ * least the new object and a free-list info, trim down the amount of
+ * space requested to just the amount of space needed. (Generally
+ * speaking, this only occurs when the heap is small -QAK)
*/
- 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 && 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);
+ 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);
+
+ /* Extend current heap if possible */
+ was_extended = H5MF_try_extend(f, H5FD_MEM_LHEAP, heap->dblk_addr, (hsize_t)(heap->dblk_size),
+ (hsize_t)need_more);
+ if (FAIL == was_extended)
+ H5E_THROW(H5E_CANTEXTEND, "error trying to extend heap");
+
+ /* Check if we extended the heap data block in file */
+ if (was_extended == TRUE) {
+ /* Check for prefix & data block contiguous */
+ if (heap->single_cache_obj) {
+ /* Resize prefix+data block */
+ 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 (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 */
+ else { /* ...if we can't, allocate a new chunk & release the old */
+ /* Reallocate data block in file */
+ if (FAIL == H5HL__dblk_realloc(f, heap, new_dblk_size))
+ H5E_THROW(H5E_CANTRESIZE, "reallocating data block failed");
+ } /* end if */
- if (last_fl->size < H5HL_SIZEOF_FREE(f)) {
+ /* 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)) {
#ifdef H5HL_DEBUG
- if (H5DEBUG(HL) && last_fl->size) {
- HDfprintf(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 */
- 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)))
- 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;
+ 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)))
+ 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;
#ifdef H5HL_DEBUG
- }
- 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__);
+ }
+ 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)) {
- 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));
- }
+ 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)))
- H5E_THROW(H5E_CANTALLOC, "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 */
- /* (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)));
-} /* end if */
+ /* 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)));
+ } /* end if */
-/* Copy the data into the heap */
-H5MM_memcpy(heap->dblk_image + offset, buf, buf_size);
+ /* Copy the data into the heap */
+ H5MM_memcpy(heap->dblk_image + offset, buf, buf_size);
-/* Set return value */
-ret_value = offset;
+ /* Set return value */
+ ret_value = offset;
-CATCH
-/* No special processing on errors */
+ CATCH
+ /* No special processing on errors */
END_FUNC(PRIV) /* H5HL_insert() */
@@ -731,125 +733,125 @@ END_FUNC(PRIV) /* H5HL_insert() */
*/
BEGIN_FUNC(PRIV, ERR, herr_t, SUCCEED, FAIL, H5HL_remove(H5F_t *f, H5HL_t *heap, size_t offset, size_t size))
-H5HL_free_t *fl = NULL;
+ H5HL_free_t *fl = NULL;
-/* check arguments */
-HDassert(f);
-HDassert(heap);
-HDassert(size > 0);
-HDassert(offset == H5HL_ALIGN(offset));
+ /* check arguments */
+ HDassert(f);
+ HDassert(heap);
+ HDassert(size > 0);
+ HDassert(offset == H5HL_ALIGN(offset));
-size = H5HL_ALIGN(size);
+ size = H5HL_ALIGN(size);
-HDassert(offset < heap->dblk_size);
-HDassert(offset + size <= heap->dblk_size);
+ HDassert(offset < heap->dblk_size);
+ HDassert(offset + size <= heap->dblk_size);
-/* Mark heap as dirty in cache */
-/* (A bit early in the process, but it's difficult to determine in the
- * code below where to mark the heap as dirty, especially in error cases,
- * so we just accept that an extra flush of the heap info could occur
- * if an error occurs -QAK)
- */
-if (FAIL == H5HL__dirty(heap))
- H5E_THROW(H5E_CANTMARKDIRTY, "unable to mark heap as dirty");
+ /* Mark heap as dirty in cache */
+ /* (A bit early in the process, but it's difficult to determine in the
+ * code below where to mark the heap as dirty, especially in error cases,
+ * so we just accept that an extra flush of the heap info could occur
+ * if an error occurs -QAK)
+ */
+ 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
- * free chunk. It might also fall between two chunks in such a way
- * that all three chunks can be combined into one.
- */
-fl = heap->freelist;
-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) && ((2 * fl->size) > heap->dblk_size)) {
- if (FAIL == H5HL__minimize_heap_space(f, heap))
- H5E_THROW(H5E_CANTFREE, "heap size minimization failed");
+ /*
+ * Check if this chunk can be prepended or appended to an already
+ * free chunk. It might also fall between two chunks in such a way
+ * that all three chunks can be combined into one.
+ */
+ fl = heap->freelist;
+ 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) && ((2 * fl->size) > heap->dblk_size)) {
+ if (FAIL == H5HL__minimize_heap_space(f, heap))
+ H5E_THROW(H5E_CANTFREE, "heap size minimization failed");
+ }
+ H5_LEAVE(SUCCEED);
}
- H5_LEAVE(SUCCEED);
+ fl2 = fl2->next;
}
- fl2 = fl2->next;
- }
- if (((fl->offset + fl->size) == heap->dblk_size) && ((2 * fl->size) > heap->dblk_size)) {
- if (FAIL == H5HL__minimize_heap_space(f, heap))
- H5E_THROW(H5E_CANTFREE, "heap size minimization failed");
+ if (((fl->offset + fl->size) == heap->dblk_size) && ((2 * fl->size) > heap->dblk_size)) {
+ if (FAIL == H5HL__minimize_heap_space(f, heap))
+ H5E_THROW(H5E_CANTFREE, "heap size minimization failed");
+ }
+ H5_LEAVE(SUCCEED);
}
- 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, heap))
- H5E_THROW(H5E_CANTFREE, "heap size minimization failed");
+ 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, heap))
+ H5E_THROW(H5E_CANTFREE, "heap size minimization failed");
+ } /* end if */
+ H5_LEAVE(SUCCEED);
} /* end if */
- H5_LEAVE(SUCCEED);
+ fl2 = fl2->next;
+ } /* end while */
+ if (((fl->offset + fl->size) == heap->dblk_size) && ((2 * fl->size) > heap->dblk_size)) {
+ if (FAIL == H5HL__minimize_heap_space(f, heap))
+ H5E_THROW(H5E_CANTFREE, "heap size minimization failed");
} /* end if */
- fl2 = fl2->next;
- } /* end while */
- if (((fl->offset + fl->size) == heap->dblk_size) && ((2 * fl->size) > heap->dblk_size)) {
- if (FAIL == H5HL__minimize_heap_space(f, heap))
- H5E_THROW(H5E_CANTFREE, "heap size minimization failed");
+ H5_LEAVE(SUCCEED);
} /* end if */
- H5_LEAVE(SUCCEED);
- } /* end if */
- fl = fl->next;
-} /* end while */
+ fl = fl->next;
+ } /* end while */
-/*
- * The amount which is being removed must be large enough to
- * hold the free list data. If not, the freed chunk is forever
- * lost.
- */
-if (size < H5HL_SIZEOF_FREE(f)) {
+ /*
+ * The amount which is being removed must be large enough to
+ * hold the free list data. If not, the freed chunk is forever
+ * lost.
+ */
+ if (size < H5HL_SIZEOF_FREE(f)) {
#ifdef H5HL_DEBUG
- if (H5DEBUG(HL)) {
- HDfprintf(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
- H5_LEAVE(SUCCEED);
-} /* end if */
+ H5_LEAVE(SUCCEED);
+ } /* end if */
-/*
- * Add an entry to the free list.
- */
-if (NULL == (fl = H5FL_MALLOC(H5HL_free_t)))
- H5E_THROW(H5E_CANTALLOC, "memory allocation failed");
-fl->offset = offset;
-fl->size = 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;
-
-if (((fl->offset + fl->size) == heap->dblk_size) && ((2 * fl->size) > heap->dblk_size))
- if (FAIL == H5HL__minimize_heap_space(f, heap))
- H5E_THROW(H5E_CANTFREE, "heap size minimization failed");
-
-CATCH
-/* No special processing on exit */
+ /*
+ * Add an entry to the free list.
+ */
+ if (NULL == (fl = H5FL_MALLOC(H5HL_free_t)))
+ H5E_THROW(H5E_CANTALLOC, "memory allocation failed");
+ fl->offset = offset;
+ fl->size = 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;
+
+ if (((fl->offset + fl->size) == heap->dblk_size) && ((2 * fl->size) > heap->dblk_size))
+ if (FAIL == H5HL__minimize_heap_space(f, heap))
+ H5E_THROW(H5E_CANTFREE, "heap size minimization failed");
+
+ CATCH
+ /* No special processing on exit */
END_FUNC(PRIV) /* end H5HL_remove() */
@@ -867,47 +869,48 @@ END_FUNC(PRIV) /* end H5HL_remove() */
*/
BEGIN_FUNC(PRIV, ERR, herr_t, SUCCEED, FAIL, H5HL_delete(H5F_t *f, haddr_t addr))
-H5HL_t * heap = NULL; /* 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 */
+ H5HL_t * heap = NULL; /* 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 */
-/* check arguments */
-HDassert(f);
-HDassert(H5F_addr_defined(addr));
+ /* check arguments */
+ HDassert(f);
+ HDassert(H5F_addr_defined(addr));
-/* Construct the user data for protect callback */
-prfx_udata.sizeof_size = H5F_SIZEOF_SIZE(f);
-prfx_udata.sizeof_addr = H5F_SIZEOF_ADDR(f);
-prfx_udata.prfx_addr = addr;
-prfx_udata.sizeof_prfx = H5HL_SIZEOF_HDR(f);
+ /* Construct the user data for protect callback */
+ prfx_udata.sizeof_size = H5F_SIZEOF_SIZE(f);
+ prfx_udata.sizeof_addr = H5F_SIZEOF_ADDR(f);
+ prfx_udata.prfx_addr = addr;
+ prfx_udata.sizeof_prfx = H5HL_SIZEOF_HDR(f);
-/* Protect the local heap prefix */
-if (NULL == (prfx = (H5HL_prfx_t *)H5AC_protect(f, H5AC_LHEAP_PRFX, addr, &prfx_udata, H5AC__NO_FLAGS_SET)))
- H5E_THROW(H5E_CANTPROTECT, "unable to load heap prefix");
+ /* Protect the local heap prefix */
+ if (NULL ==
+ (prfx = (H5HL_prfx_t *)H5AC_protect(f, H5AC_LHEAP_PRFX, addr, &prfx_udata, H5AC__NO_FLAGS_SET)))
+ H5E_THROW(H5E_CANTPROTECT, "unable to load heap prefix");
-/* Get the pointer to the heap */
-heap = prfx->heap;
+ /* Get the pointer to the heap */
+ heap = prfx->heap;
-/* Check if heap has separate data block */
-if (!heap->single_cache_obj)
- /* Protect the local heap data block */
- if (NULL ==
- (dblk = (H5HL_dblk_t *)H5AC_protect(f, H5AC_LHEAP_DBLK, heap->dblk_addr, heap, H5AC__NO_FLAGS_SET)))
- H5E_THROW(H5E_CANTPROTECT, "unable to load heap data block");
+ /* Check if heap has separate data block */
+ if (!heap->single_cache_obj)
+ /* Protect the local heap data block */
+ if (NULL == (dblk = (H5HL_dblk_t *)H5AC_protect(f, H5AC_LHEAP_DBLK, heap->dblk_addr, heap,
+ H5AC__NO_FLAGS_SET)))
+ H5E_THROW(H5E_CANTPROTECT, "unable to load heap data block");
-/* Set the flags for releasing the prefix and data block */
-cache_flags |= H5AC__DIRTIED_FLAG | H5AC__DELETED_FLAG | H5AC__FREE_FILE_SPACE_FLAG;
+ /* Set the flags for releasing the prefix and data block */
+ cache_flags |= H5AC__DIRTIED_FLAG | H5AC__DELETED_FLAG | H5AC__FREE_FILE_SPACE_FLAG;
-CATCH
-/* Release the data block from the cache, now deleted */
-if (dblk && heap && H5AC_unprotect(f, H5AC_LHEAP_DBLK, heap->dblk_addr, dblk, cache_flags) < 0)
- H5E_THROW(H5E_CANTUNPROTECT, "unable to release local heap data block");
+ CATCH
+ /* Release the data block from the cache, now deleted */
+ if (dblk && heap && H5AC_unprotect(f, H5AC_LHEAP_DBLK, heap->dblk_addr, dblk, cache_flags) < 0)
+ H5E_THROW(H5E_CANTUNPROTECT, "unable to release local heap data block");
-/* Release the prefix from the cache, now deleted */
-if (prfx && heap && H5AC_unprotect(f, H5AC_LHEAP_PRFX, heap->prfx_addr, prfx, cache_flags) < 0)
- H5E_THROW(H5E_CANTUNPROTECT, "unable to release local heap prefix");
+ /* Release the prefix from the cache, now deleted */
+ if (prfx && heap && H5AC_unprotect(f, H5AC_LHEAP_PRFX, heap->prfx_addr, prfx, cache_flags) < 0)
+ H5E_THROW(H5E_CANTUNPROTECT, "unable to release local heap prefix");
END_FUNC(PRIV) /* end H5HL_delete() */
@@ -925,34 +928,35 @@ END_FUNC(PRIV) /* end H5HL_delete() */
*/
BEGIN_FUNC(PRIV, ERR, herr_t, SUCCEED, FAIL, H5HL_get_size(H5F_t *f, 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 */
+ 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);
-HDassert(H5F_addr_defined(addr));
-HDassert(size);
+ /* check arguments */
+ HDassert(f);
+ HDassert(H5F_addr_defined(addr));
+ HDassert(size);
-/* Construct the user data for protect callback */
-prfx_udata.sizeof_size = H5F_SIZEOF_SIZE(f);
-prfx_udata.sizeof_addr = H5F_SIZEOF_ADDR(f);
-prfx_udata.prfx_addr = addr;
-prfx_udata.sizeof_prfx = H5HL_SIZEOF_HDR(f);
+ /* Construct the user data for protect callback */
+ prfx_udata.sizeof_size = H5F_SIZEOF_SIZE(f);
+ prfx_udata.sizeof_addr = H5F_SIZEOF_ADDR(f);
+ prfx_udata.prfx_addr = addr;
+ prfx_udata.sizeof_prfx = H5HL_SIZEOF_HDR(f);
-/* Protect the local heap prefix */
-if (NULL == (prfx = (H5HL_prfx_t *)H5AC_protect(f, H5AC_LHEAP_PRFX, addr, &prfx_udata, H5AC__READ_ONLY_FLAG)))
- H5E_THROW(H5E_CANTPROTECT, "unable to load heap prefix");
+ /* Protect the local heap prefix */
+ if (NULL ==
+ (prfx = (H5HL_prfx_t *)H5AC_protect(f, H5AC_LHEAP_PRFX, addr, &prfx_udata, H5AC__READ_ONLY_FLAG)))
+ H5E_THROW(H5E_CANTPROTECT, "unable to load heap prefix");
-/* Get the pointer to the heap */
-heap = prfx->heap;
+ /* Get the pointer to the heap */
+ heap = prfx->heap;
-/* Set the size to return */
-*size = heap->dblk_size;
+ /* Set the size to return */
+ *size = heap->dblk_size;
-CATCH
-if (prfx && FAIL == H5AC_unprotect(f, H5AC_LHEAP_PRFX, heap->prfx_addr, prfx, H5AC__NO_FLAGS_SET))
- H5E_THROW(H5E_CANTUNPROTECT, "unable to release local heap prefix");
+ CATCH
+ if (prfx && FAIL == H5AC_unprotect(f, 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_get_size() */
@@ -971,33 +975,34 @@ END_FUNC(PRIV) /* end H5HL_get_size() */
*/
BEGIN_FUNC(PRIV, ERR, herr_t, SUCCEED, FAIL, H5HL_heapsize(H5F_t *f, 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 */
+ 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);
-HDassert(H5F_addr_defined(addr));
-HDassert(heap_size);
+ /* check arguments */
+ HDassert(f);
+ HDassert(H5F_addr_defined(addr));
+ HDassert(heap_size);
-/* Construct the user data for protect callback */
-prfx_udata.sizeof_size = H5F_SIZEOF_SIZE(f);
-prfx_udata.sizeof_addr = H5F_SIZEOF_ADDR(f);
-prfx_udata.prfx_addr = addr;
-prfx_udata.sizeof_prfx = H5HL_SIZEOF_HDR(f);
+ /* Construct the user data for protect callback */
+ prfx_udata.sizeof_size = H5F_SIZEOF_SIZE(f);
+ prfx_udata.sizeof_addr = H5F_SIZEOF_ADDR(f);
+ prfx_udata.prfx_addr = addr;
+ prfx_udata.sizeof_prfx = H5HL_SIZEOF_HDR(f);
-/* Protect the local heap prefix */
-if (NULL == (prfx = (H5HL_prfx_t *)H5AC_protect(f, H5AC_LHEAP_PRFX, addr, &prfx_udata, H5AC__READ_ONLY_FLAG)))
- H5E_THROW(H5E_CANTPROTECT, "unable to load heap prefix");
+ /* Protect the local heap prefix */
+ if (NULL ==
+ (prfx = (H5HL_prfx_t *)H5AC_protect(f, H5AC_LHEAP_PRFX, addr, &prfx_udata, H5AC__READ_ONLY_FLAG)))
+ H5E_THROW(H5E_CANTPROTECT, "unable to load heap prefix");
-/* Get the pointer to the heap */
-heap = prfx->heap;
+ /* Get the pointer to the heap */
+ heap = prfx->heap;
-/* Accumulate the size of the local heap */
-*heap_size += (hsize_t)(heap->prfx_size + heap->dblk_size);
+ /* Accumulate the size of the local heap */
+ *heap_size += (hsize_t)(heap->prfx_size + heap->dblk_size);
-CATCH
-if (prfx && FAIL == H5AC_unprotect(f, H5AC_LHEAP_PRFX, heap->prfx_addr, prfx, H5AC__NO_FLAGS_SET))
- H5E_THROW(H5E_CANTUNPROTECT, "unable to release local heap prefix");
+ CATCH
+ if (prfx && FAIL == H5AC_unprotect(f, 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/H5HLdbg.c b/src/H5HLdbg.c
index 4638543..bca7855 100644
--- a/src/H5HLdbg.c
+++ b/src/H5HLdbg.c
@@ -47,72 +47,71 @@
BEGIN_FUNC(PRIV, ERR, herr_t, SUCCEED, FAIL,
H5HL_debug(H5F_t *f, haddr_t addr, FILE *stream, int indent, int fwidth))
-H5HL_t * h = NULL;
-int free_block;
-H5HL_free_t *freelist;
-uint8_t * marker = NULL;
-size_t amount_free = 0;
-
-/* check arguments */
-HDassert(f);
-HDassert(H5F_addr_defined(addr));
-HDassert(stream);
-HDassert(indent >= 0);
-HDassert(fwidth >= 0);
-
-if (NULL == (h = (H5HL_t *)H5HL_protect(f, addr, H5AC__READ_ONLY_FLAG)))
- H5E_THROW(H5E_CANTPROTECT, "unable to load/protect local heap");
-
-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);
-HDfprintf(stream, "%*s%-*s %Zu\n", indent, "", fwidth, "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)))
- H5E_THROW(H5E_CANTALLOC, "memory allocation failed");
-
-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];
-
- HDsnprintf(temp_str, sizeof(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)
- HDfprintf(stream, "***THAT FREE BLOCK IS OUT OF BOUNDS!\n");
- else {
- int overlap = 0;
- size_t i;
-
- for (i = 0; i < 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)
- HDfprintf(stream, "%*s%-*s %.2f%%\n", indent, "", fwidth, "Percent of heap used:",
- ((double)100.0f * (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);
-
-CATCH
-if (h && FAIL == H5HL_unprotect(h))
- H5E_THROW(H5E_CANTUNPROTECT, "unable to release/unprotect local heap");
-
-if (marker && NULL != (marker = (uint8_t *)H5MM_xfree(marker)))
- H5E_THROW(H5E_CANTFREE, "can't free marker buffer");
+ H5HL_t * h = NULL;
+ int free_block;
+ H5HL_free_t *freelist;
+ uint8_t * marker = NULL;
+ size_t amount_free = 0;
+
+ /* check arguments */
+ HDassert(f);
+ HDassert(H5F_addr_defined(addr));
+ HDassert(stream);
+ HDassert(indent >= 0);
+ HDassert(fwidth >= 0);
+
+ if (NULL == (h = (H5HL_t *)H5HL_protect(f, addr, H5AC__READ_ONLY_FLAG)))
+ H5E_THROW(H5E_CANTPROTECT, "unable to load/protect local heap");
+
+ HDfprintf(stream, "%*sLocal Heap...\n", indent, "");
+ HDfprintf(stream, "%*s%-*s %zu\n", indent, "", fwidth, "Header size (in bytes):", h->prfx_size);
+ HDfprintf(stream, "%*s%-*s %" PRIuHADDR "\n", indent, "", fwidth, "Address of heap data:", h->dblk_addr);
+ HDfprintf(stream, "%*s%-*s %zu\n", indent, "", fwidth, "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)))
+ H5E_THROW(H5E_CANTALLOC, "memory allocation failed");
+
+ 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];
+
+ HDsnprintf(temp_str, sizeof(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)
+ HDfprintf(stream, "***THAT FREE BLOCK IS OUT OF BOUNDS!\n");
+ else {
+ int overlap = 0;
+ size_t i;
+
+ for (i = 0; i < 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)
+ HDfprintf(stream, "%*s%-*s %.2f%%\n", indent, "", fwidth, "Percent of heap used:",
+ ((double)100.0f * (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);
+
+ CATCH
+ if (h && FAIL == H5HL_unprotect(h))
+ H5E_THROW(H5E_CANTUNPROTECT, "unable to release/unprotect local heap");
+
+ if (marker && NULL != (marker = (uint8_t *)H5MM_xfree(marker)))
+ H5E_THROW(H5E_CANTFREE, "can't free marker buffer");
END_FUNC(PRIV) /* end H5HL_debug() */
diff --git a/src/H5HLdblk.c b/src/H5HLdblk.c
index 8c4f447..0081a47 100644
--- a/src/H5HLdblk.c
+++ b/src/H5HLdblk.c
@@ -83,31 +83,31 @@ H5FL_DEFINE_STATIC(H5HL_dblk_t);
*/
BEGIN_FUNC(PKG, ERR, H5HL_dblk_t *, NULL, NULL, H5HL__dblk_new(H5HL_t *heap))
-H5HL_dblk_t *dblk = NULL; /* New local heap data block */
+ H5HL_dblk_t *dblk = NULL; /* New local heap data block */
-/* check arguments */
-HDassert(heap);
+ /* check arguments */
+ HDassert(heap);
-/* Allocate new local heap data block */
-if (NULL == (dblk = H5FL_CALLOC(H5HL_dblk_t)))
- H5E_THROW(H5E_CANTALLOC, "memory allocation failed for local heap data block")
+ /* Allocate new local heap data block */
+ if (NULL == (dblk = H5FL_CALLOC(H5HL_dblk_t)))
+ H5E_THROW(H5E_CANTALLOC, "memory allocation failed for local heap data block")
-/* Increment ref. count on heap data structure */
-if (FAIL == H5HL__inc_rc(heap))
- H5E_THROW(H5E_CANTINC, "can't increment heap ref. count")
+ /* Increment ref. count on heap data structure */
+ if (FAIL == H5HL__inc_rc(heap))
+ H5E_THROW(H5E_CANTINC, "can't increment heap ref. count")
-/* Link the heap & the data block */
-dblk->heap = heap;
-heap->dblk = dblk;
+ /* Link the heap & the data block */
+ dblk->heap = heap;
+ heap->dblk = dblk;
-/* Set the return value */
-ret_value = dblk;
+ /* Set the return value */
+ ret_value = dblk;
-CATCH
-/* Ensure that the data block memory is deallocated on errors */
-if (!ret_value && dblk != NULL)
- /* H5FL_FREE always returns NULL so we can't check for errors */
- dblk = H5FL_FREE(H5HL_dblk_t, dblk);
+ CATCH
+ /* Ensure that the data block memory is deallocated on errors */
+ if (!ret_value && dblk != NULL)
+ /* H5FL_FREE always returns NULL so we can't check for errors */
+ dblk = H5FL_FREE(H5HL_dblk_t, dblk);
END_FUNC(PKG) /* end H5HL__dblk_new() */
@@ -125,26 +125,26 @@ END_FUNC(PKG) /* end H5HL__dblk_new() */
*/
BEGIN_FUNC(PKG, ERR, herr_t, SUCCEED, FAIL, H5HL__dblk_dest(H5HL_dblk_t *dblk))
-/* check arguments */
-HDassert(dblk);
+ /* check arguments */
+ HDassert(dblk);
-/* Check if data block was initialized */
-if (dblk->heap) {
- /* Unlink data block from heap */
- dblk->heap->dblk = NULL;
+ /* Check if data block was initialized */
+ if (dblk->heap) {
+ /* Unlink data block from heap */
+ dblk->heap->dblk = NULL;
- /* Decrement ref. count on heap data structure */
- if (FAIL == H5HL__dec_rc(dblk->heap))
- H5E_THROW(H5E_CANTDEC, "can't decrement heap ref. count")
+ /* Decrement ref. count on heap data structure */
+ if (FAIL == H5HL__dec_rc(dblk->heap))
+ H5E_THROW(H5E_CANTDEC, "can't decrement heap ref. count")
- /* Unlink heap from data block */
- dblk->heap = NULL;
-} /* end if */
+ /* Unlink heap from data block */
+ dblk->heap = NULL;
+ } /* end if */
-CATCH
-/* Free local heap data block */
-/* H5FL_FREE always returns NULL so we can't check for errors */
-dblk = H5FL_FREE(H5HL_dblk_t, dblk);
+ CATCH
+ /* Free local heap data block */
+ /* H5FL_FREE always returns NULL so we can't check for errors */
+ dblk = H5FL_FREE(H5HL_dblk_t, dblk);
END_FUNC(PKG) /* end H5HL__dblk_dest() */
@@ -162,94 +162,94 @@ END_FUNC(PKG) /* end H5HL__dblk_dest() */
*/
BEGIN_FUNC(PKG, ERR, herr_t, SUCCEED, FAIL, H5HL__dblk_realloc(H5F_t *f, 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 */
-
-/* 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 (FAIL == H5MF_xfree(f, H5FD_MEM_LHEAP, old_addr, (hsize_t)old_heap_size))
- H5E_THROW(H5E_CANTFREE, "can't free old local 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, (hsize_t)new_heap_size)))
- H5E_THROW(H5E_CANTALLOC, "unable to allocate file space for local 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 (FAIL == H5AC_resize_entry(heap->prfx, (size_t)(heap->prfx_size + new_heap_size)))
- H5E_THROW(H5E_CANTRESIZE, "unable to resize heap in cache");
- } /* end if */
+ 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 */
+
+ /* 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 (FAIL == H5MF_xfree(f, H5FD_MEM_LHEAP, old_addr, (hsize_t)old_heap_size))
+ H5E_THROW(H5E_CANTFREE, "can't free old local 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, (hsize_t)new_heap_size)))
+ H5E_THROW(H5E_CANTALLOC, "unable to allocate file space for local 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 (FAIL == H5AC_resize_entry(heap->prfx, (size_t)(heap->prfx_size + new_heap_size)))
+ H5E_THROW(H5E_CANTRESIZE, "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)
+ H5E_THROW(H5E_CANTRESIZE, "unable to resize heap (data block) in cache");
+ } /* end else */
+ } /* 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)
- H5E_THROW(H5E_CANTRESIZE, "unable to resize heap (data block) 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)))
- H5E_THROW(H5E_CANTALLOC, "unable to allocate local heap data block");
-
- /* Resize current heap prefix */
- heap->prfx_size = H5HL_SIZEOF_HDR(f);
- if (FAIL == H5AC_resize_entry(heap->prfx, (size_t)heap->prfx_size))
- H5E_THROW(H5E_CANTRESIZE, "unable to resize heap prefix in cache");
-
- /* Insert data block into cache (pinned) */
- if (FAIL == H5AC_insert_entry(f, H5AC_LHEAP_DBLK, new_addr, dblk, H5AC__PIN_ENTRY_FLAG))
- H5E_THROW(H5E_CANTINIT, "unable to cache local heap data block");
-
- dblk = NULL;
-
- /* Reset 'single cache object' flag */
- heap->single_cache_obj = FALSE;
+ /* 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)))
+ H5E_THROW(H5E_CANTALLOC, "unable to allocate local heap data block");
+
+ /* Resize current heap prefix */
+ heap->prfx_size = H5HL_SIZEOF_HDR(f);
+ if (FAIL == H5AC_resize_entry(heap->prfx, (size_t)heap->prfx_size))
+ H5E_THROW(H5E_CANTRESIZE, "unable to resize heap prefix in cache");
+
+ /* Insert data block into cache (pinned) */
+ if (FAIL == H5AC_insert_entry(f, H5AC_LHEAP_DBLK, new_addr, dblk, H5AC__PIN_ENTRY_FLAG))
+ H5E_THROW(H5E_CANTINIT, "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 (FAIL == H5AC_resize_entry(heap->dblk, (size_t)new_heap_size))
+ H5E_THROW(H5E_CANTRESIZE, "unable to resize heap data block in cache");
+
+ /* Relocate the heap data block in the cache */
+ if (FAIL == H5AC_move_entry(f, H5AC_LHEAP_DBLK, old_addr, new_addr))
+ H5E_THROW(H5E_CANTMOVE, "unable to move heap data block in cache");
+
+ } /* end else */
+ } /* end else */
+
+ CATCH
+ /* Restore old heap address & size on errors */
+ if (FAIL == ret_value) {
+ heap->dblk_addr = old_addr;
+ heap->dblk_size = old_heap_size;
} /* 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 (FAIL == H5AC_resize_entry(heap->dblk, (size_t)new_heap_size))
- H5E_THROW(H5E_CANTRESIZE, "unable to resize heap data block in cache");
-
- /* Relocate the heap data block in the cache */
- if (FAIL == H5AC_move_entry(f, H5AC_LHEAP_DBLK, old_addr, new_addr))
- H5E_THROW(H5E_CANTMOVE, "unable to move heap data block in cache");
-
- } /* end else */
-} /* end else */
-
-CATCH
-/* Restore old heap address & size on errors */
-if (FAIL == ret_value) {
- heap->dblk_addr = old_addr;
- heap->dblk_size = old_heap_size;
-} /* end if */
END_FUNC(PKG) /* end H5HL__dblk_realloc() */
diff --git a/src/H5HLint.c b/src/H5HLint.c
index 9b6667f..ef5c712 100644
--- a/src/H5HLint.c
+++ b/src/H5HLint.c
@@ -83,29 +83,29 @@ 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 *heap = NULL; /* New local heap */
+ H5HL_t *heap = NULL; /* New local heap */
-/* check arguments */
-HDassert(sizeof_size > 0);
-HDassert(sizeof_addr > 0);
-HDassert(prfx_size > 0);
+ /* check arguments */
+ HDassert(sizeof_size > 0);
+ HDassert(sizeof_addr > 0);
+ HDassert(prfx_size > 0);
-/* Allocate new local heap structure */
-if (NULL == (heap = H5FL_CALLOC(H5HL_t)))
- H5E_THROW(H5E_CANTALLOC, "memory allocation failed");
+ /* Allocate new local heap structure */
+ if (NULL == (heap = H5FL_CALLOC(H5HL_t)))
+ H5E_THROW(H5E_CANTALLOC, "memory allocation failed");
-/* Initialize non-zero fields */
-heap->sizeof_size = sizeof_size;
-heap->sizeof_addr = sizeof_addr;
-heap->prfx_size = prfx_size;
+ /* Initialize non-zero fields */
+ heap->sizeof_size = sizeof_size;
+ heap->sizeof_addr = sizeof_addr;
+ heap->prfx_size = prfx_size;
-/* Set the return value */
-ret_value = heap;
+ /* Set the return value */
+ ret_value = heap;
-CATCH
-if (!ret_value && heap != NULL)
- if (NULL == (heap = H5FL_FREE(H5HL_t, heap)))
- H5E_THROW(H5E_CANTFREE, "can't free heap memory");
+ 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() */
@@ -123,11 +123,11 @@ END_FUNC(PKG) /* end H5HL__new() */
*/
BEGIN_FUNC(PKG, NOERR, herr_t, SUCCEED, -, H5HL__inc_rc(H5HL_t *heap))
-/* check arguments */
-HDassert(heap);
+ /* check arguments */
+ HDassert(heap);
-/* Increment heap's ref. count */
-heap->rc++;
+ /* Increment heap's ref. count */
+ heap->rc++;
END_FUNC(PKG) /* end H5HL__inc_rc() */
@@ -145,16 +145,16 @@ END_FUNC(PKG) /* end H5HL__inc_rc() */
*/
BEGIN_FUNC(PKG, ERR, herr_t, SUCCEED, FAIL, H5HL__dec_rc(H5HL_t *heap))
-/* check arguments */
-HDassert(heap);
+ /* check arguments */
+ HDassert(heap);
-/* Decrement heap's ref. count */
-heap->rc--;
+ /* 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");
+ 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");
END_FUNC(PKG) /* end H5HL__dec_rc() */
@@ -172,29 +172,29 @@ END_FUNC(PKG) /* end H5HL__dec_rc() */
*/
BEGIN_FUNC(PKG, ERR, herr_t, SUCCEED, FAIL, H5HL__dest(H5HL_t *heap))
-/* check arguments */
-HDassert(heap);
-
-/* Verify that node is unused */
-HDassert(heap->prots == 0);
-HDassert(heap->rc == 0);
-HDassert(heap->prfx == NULL);
-HDassert(heap->dblk == NULL);
-
-CATCH
-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");
-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 */
-
-if (NULL != (heap = H5FL_FREE(H5HL_t, heap)))
- H5E_THROW(H5E_CANTFREE, "unable to free local heap");
+ /* check arguments */
+ HDassert(heap);
+
+ /* Verify that node is unused */
+ HDassert(heap->prots == 0);
+ HDassert(heap->rc == 0);
+ HDassert(heap->prfx == NULL);
+ HDassert(heap->dblk == NULL);
+
+ CATCH
+ 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");
+ 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 */
+
+ 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/H5HLprfx.c b/src/H5HLprfx.c
index d17e558..fedc11b 100644
--- a/src/H5HLprfx.c
+++ b/src/H5HLprfx.c
@@ -82,31 +82,31 @@ H5FL_DEFINE_STATIC(H5HL_prfx_t);
*/
BEGIN_FUNC(PKG, ERR, H5HL_prfx_t *, NULL, NULL, H5HL__prfx_new(H5HL_t *heap))
-H5HL_prfx_t *prfx = NULL; /* New local heap prefix */
+ H5HL_prfx_t *prfx = NULL; /* New local heap prefix */
-/* check arguments */
-HDassert(heap);
+ /* check arguments */
+ HDassert(heap);
-/* Allocate new local heap prefix */
-if (NULL == (prfx = H5FL_CALLOC(H5HL_prfx_t)))
- H5E_THROW(H5E_CANTALLOC, "memory allocation failed for local heap prefix")
+ /* Allocate new local heap prefix */
+ if (NULL == (prfx = H5FL_CALLOC(H5HL_prfx_t)))
+ H5E_THROW(H5E_CANTALLOC, "memory allocation failed for local heap prefix")
-/* Increment ref. count on heap data structure */
-if (FAIL == H5HL__inc_rc(heap))
- H5E_THROW(H5E_CANTINC, "can't increment heap ref. count")
+ /* Increment ref. count on heap data structure */
+ if (FAIL == H5HL__inc_rc(heap))
+ H5E_THROW(H5E_CANTINC, "can't increment heap ref. count")
-/* Link the heap & the prefix */
-prfx->heap = heap;
-heap->prfx = prfx;
+ /* Link the heap & the prefix */
+ prfx->heap = heap;
+ heap->prfx = prfx;
-/* Set the return value */
-ret_value = prfx;
+ /* Set the return value */
+ ret_value = prfx;
-CATCH
-/* Ensure that the prefix memory is deallocated on errors */
-if (!ret_value && prfx != NULL)
- /* H5FL_FREE always returns NULL so we can't check for errors */
- prfx = H5FL_FREE(H5HL_prfx_t, prfx);
+ CATCH
+ /* Ensure that the prefix memory is deallocated on errors */
+ if (!ret_value && prfx != NULL)
+ /* H5FL_FREE always returns NULL so we can't check for errors */
+ prfx = H5FL_FREE(H5HL_prfx_t, prfx);
END_FUNC(PKG) /* end H5HL__prfx_new() */
@@ -124,25 +124,25 @@ END_FUNC(PKG) /* end H5HL__prfx_new() */
*/
BEGIN_FUNC(PKG, ERR, herr_t, SUCCEED, FAIL, H5HL__prfx_dest(H5HL_prfx_t *prfx))
-/* check arguments */
-HDassert(prfx);
+ /* check arguments */
+ HDassert(prfx);
-/* Check if prefix was initialized */
-if (prfx->heap) {
- /* Unlink prefix from heap */
- prfx->heap->prfx = NULL;
+ /* Check if prefix was initialized */
+ if (prfx->heap) {
+ /* Unlink prefix from heap */
+ prfx->heap->prfx = NULL;
- /* Decrement ref. count on heap data structure */
- if (FAIL == H5HL__dec_rc(prfx->heap))
- H5E_THROW(H5E_CANTDEC, "can't decrement heap ref. count")
+ /* Decrement ref. count on heap data structure */
+ if (FAIL == H5HL__dec_rc(prfx->heap))
+ H5E_THROW(H5E_CANTDEC, "can't decrement heap ref. count")
- /* Unlink heap from prefix */
- prfx->heap = NULL;
-} /* end if */
+ /* Unlink heap from prefix */
+ prfx->heap = NULL;
+ } /* end if */
-CATCH
-/* Free prefix memory */
-/* H5FL_FREE always returns NULL so we can't check for errors */
-prfx = H5FL_FREE(H5HL_prfx_t, prfx);
+ CATCH
+ /* Free prefix memory */
+ /* H5FL_FREE always returns NULL so we can't check for errors */
+ prfx = H5FL_FREE(H5HL_prfx_t, prfx);
END_FUNC(PKG) /* end H5HL__prfx_dest() */
diff --git a/src/H5I.c b/src/H5I.c
index 6fca3c6..18ba809 100644
--- a/src/H5I.c
+++ b/src/H5I.c
@@ -2358,9 +2358,9 @@ H5I__id_dump_cb(void *_item, void H5_ATTR_UNUSED *_key, void *_udata)
FUNC_ENTER_STATIC_NOERR
- HDfprintf(stderr, " id = %lu\n", (unsigned long)(item->id));
+ HDfprintf(stderr, " id = %" PRIdHID "\n", item->id);
HDfprintf(stderr, " count = %u\n", item->count);
- HDfprintf(stderr, " obj = 0x%08p\n", item->obj_ptr);
+ HDfprintf(stderr, " obj = 0x%8p\n", item->obj_ptr);
/* Get the group location, so we get get the name */
switch (type) {
diff --git a/src/H5Ipublic.h b/src/H5Ipublic.h
index 433671b..697777c 100644
--- a/src/H5Ipublic.h
+++ b/src/H5Ipublic.h
@@ -53,6 +53,12 @@ typedef enum H5I_type_t {
/* Type of atoms to return to users */
typedef int64_t hid_t;
+
+#define PRIdHID PRId64
+#define PRIxHID PRIx64
+#define PRIXHID PRIX64
+#define PRIoHID PRIo64
+
#define H5_SIZEOF_HID_T H5_SIZEOF_INT64_T
/* An invalid object ID. This is also negative for error return. */
diff --git a/src/H5MF.c b/src/H5MF.c
index 6e9f3a8..2fe78a3 100644
--- a/src/H5MF.c
+++ b/src/H5MF.c
@@ -2630,6 +2630,10 @@ H5MF_settle_raw_data_fsm(H5F_t *f, hbool_t *fsm_settled)
HDassert(f->shared);
HDassert(fsm_settled);
+ /* Initialize structs */
+ HDmemset(&fsinfo, 0, sizeof(fsinfo));
+ HDmemset(&fs_stat, 0, sizeof(fs_stat));
+
/*
* Only need to settle things if we are persisting free space and
* the private property in f->shared->null_fsm_addr is not enabled.
diff --git a/src/H5MFdbg.c b/src/H5MFdbg.c
index da25d55..3c6d91e 100644
--- a/src/H5MFdbg.c
+++ b/src/H5MFdbg.c
@@ -110,11 +110,11 @@ H5MF__sects_debug_cb(H5FS_section_info_t *_sect, void *_udata)
: (sect->sect_info.type == H5MF_FSPACE_SECT_SMALL
? "small"
: (sect->sect_info.type == H5MF_FSPACE_SECT_LARGE ? "large" : "unknown"))));
- HDfprintf(udata->stream, "%*s%-*s %a\n", udata->indent, "", udata->fwidth,
+ HDfprintf(udata->stream, "%*s%-*s %" PRIuHADDR "\n", udata->indent, "", udata->fwidth,
"Section address:", sect->sect_info.addr);
- HDfprintf(udata->stream, "%*s%-*s %Hu\n", udata->indent, "", udata->fwidth,
+ HDfprintf(udata->stream, "%*s%-*s %" PRIuHSIZE "\n", udata->indent, "", udata->fwidth,
"Section size:", sect->sect_info.size);
- HDfprintf(udata->stream, "%*s%-*s %Hu\n", udata->indent, "", udata->fwidth,
+ HDfprintf(udata->stream, "%*s%-*s %" PRIuHADDR "\n", udata->indent, "", udata->fwidth,
"End of section:", (haddr_t)((sect->sect_info.addr + sect->sect_info.size) - 1));
HDfprintf(udata->stream, "%*s%-*s %s\n", udata->indent, "", udata->fwidth,
"Section state:", (sect->sect_info.state == H5FS_SECT_LIVE ? "live" : "serialized"));
@@ -223,7 +223,7 @@ H5MF__sects_dump(H5F_t *f, FILE *stream)
if (HADDR_UNDEF == (eoa = H5F_get_eoa(f, H5FD_MEM_DEFAULT)))
HGOTO_ERROR(H5E_RESOURCE, H5E_CANTGET, FAIL, "driver get_eoa request failed")
#ifdef H5MF_ALLOC_DEBUG
- HDfprintf(stderr, "%s: for type = H5FD_MEM_DEFAULT, eoa = %a\n", FUNC, eoa);
+ HDfprintf(stderr, "%s: for type = H5FD_MEM_DEFAULT, eoa = %" PRIuHADDR "\n", FUNC, eoa);
#endif /* H5MF_ALLOC_DEBUG */
if (H5F_PAGED_AGGR(f)) { /* File space paging */
@@ -265,15 +265,17 @@ H5MF__sects_dump(H5F_t *f, FILE *stream)
/* Retrieve metadata aggregator info, if available */
H5MF__aggr_query(f, &(f->shared->meta_aggr), &ma_addr, &ma_size);
#ifdef H5MF_ALLOC_DEBUG
- HDfprintf(stderr, "%s: ma_addr = %a, ma_size = %Hu, end of ma = %a\n", FUNC, ma_addr, ma_size,
- (haddr_t)((ma_addr + ma_size) - 1));
+ HDfprintf(stderr,
+ "%s: ma_addr = %" PRIuHADDR ", ma_size = %" PRIuHSIZE ", end of ma = %" PRIuHADDR "\n",
+ FUNC, ma_addr, ma_size, (haddr_t)((ma_addr + ma_size) - 1));
#endif /* H5MF_ALLOC_DEBUG */
/* Retrieve 'small data' aggregator info, if available */
H5MF__aggr_query(f, &(f->shared->sdata_aggr), &sda_addr, &sda_size);
#ifdef H5MF_ALLOC_DEBUG
- HDfprintf(stderr, "%s: sda_addr = %a, sda_size = %Hu, end of sda = %a\n", FUNC, sda_addr, sda_size,
- (haddr_t)((sda_addr + sda_size) - 1));
+ HDfprintf(stderr,
+ "%s: sda_addr = %" PRIuHADDR ", sda_size = %" PRIuHSIZE ", end of sda = %" PRIuHADDR "\n",
+ FUNC, sda_addr, sda_size, (haddr_t)((sda_addr + sda_size) - 1));
#endif /* H5MF_ALLOC_DEBUG */
/* Iterate over all the free space types that have managers and dump each free list's space */
@@ -286,7 +288,8 @@ H5MF__sects_dump(H5F_t *f, FILE *stream)
/* Retrieve the 'eoa' for this file memory type */
if (HADDR_UNDEF == (eoa = H5F_get_eoa(f, atype)))
HGOTO_ERROR(H5E_RESOURCE, H5E_CANTGET, FAIL, "driver get_eoa request failed")
- HDfprintf(stream, "%*s%-*s %a\n", indent + 3, "", MAX(0, fwidth - 3), "eoa:", eoa);
+ HDfprintf(stream, "%*s%-*s %" PRIuHADDR "\n", indent + 3, "", MAX(0, fwidth - 3),
+ "eoa:", eoa);
/* Print header for sections */
HDfprintf(stream, "%*sSections:\n", indent + 3, "");
diff --git a/src/H5Oainfo.c b/src/H5Oainfo.c
index 59a5755..a426089 100644
--- a/src/H5Oainfo.c
+++ b/src/H5Oainfo.c
@@ -500,18 +500,18 @@ H5O__ainfo_debug(H5F_t H5_ATTR_UNUSED *f, const void *_mesg, FILE *stream, int i
HDassert(indent >= 0);
HDassert(fwidth >= 0);
- HDfprintf(stream, "%*s%-*s %Hu\n", indent, "", fwidth, "Number of attributes:", ainfo->nattrs);
- HDfprintf(stream, "%*s%-*s %t\n", indent, "", fwidth,
- "Track creation order of attributes:", ainfo->track_corder);
- HDfprintf(stream, "%*s%-*s %t\n", indent, "", fwidth,
- "Index creation order of attributes:", ainfo->index_corder);
+ HDfprintf(stream, "%*s%-*s %" PRIuHSIZE "\n", indent, "", fwidth, "Number of attributes:", ainfo->nattrs);
+ HDfprintf(stream, "%*s%-*s %s\n", indent, "", fwidth,
+ "Track creation order of attributes:", ainfo->track_corder ? "TRUE" : "FALSE");
+ HDfprintf(stream, "%*s%-*s %s\n", indent, "", fwidth,
+ "Index creation order of attributes:", ainfo->index_corder ? "TRUE" : "FALSE");
HDfprintf(stream, "%*s%-*s %u\n", indent, "", fwidth,
"Max. creation index value:", (unsigned)ainfo->max_crt_idx);
- HDfprintf(stream, "%*s%-*s %a\n", indent, "", fwidth,
+ HDfprintf(stream, "%*s%-*s %" PRIuHADDR "\n", indent, "", fwidth,
"'Dense' attribute storage fractal heap address:", ainfo->fheap_addr);
- HDfprintf(stream, "%*s%-*s %a\n", indent, "", fwidth,
+ HDfprintf(stream, "%*s%-*s %" PRIuHADDR "\n", indent, "", fwidth,
"'Dense' attribute storage name index v2 B-tree address:", ainfo->name_bt2_addr);
- HDfprintf(stream, "%*s%-*s %a\n", indent, "", fwidth,
+ HDfprintf(stream, "%*s%-*s %" PRIuHADDR "\n", indent, "", fwidth,
"'Dense' attribute storage creation order index v2 B-tree address:", ainfo->corder_bt2_addr);
FUNC_LEAVE_NOAPI(SUCCEED)
diff --git a/src/H5Oattr.c b/src/H5Oattr.c
index d9f117d..052b73c 100644
--- a/src/H5Oattr.c
+++ b/src/H5Oattr.c
@@ -103,8 +103,11 @@ H5FL_EXTERN(H5S_extent_t);
with the decoded information
USAGE
void *H5O__attr_decode(f, mesg_flags, p)
- H5F_t *f; IN: pointer to the HDF5 file struct
- unsigned mesg_flags; IN: Message flags to influence decoding
+ H5F_t *f; IN: pointer to the HDF5 file struct
+ H5O_t *open_oh; IN: pointer to the object header
+ unsigned mesg_flags; IN: message flags to influence decoding
+ unsigned *ioflags; IN/OUT: flags for decoding
+ size_t p_size; IN: size of buffer *p
const uint8_t *p; IN: the raw information buffer
RETURNS
Pointer to the new message in native order on success, NULL on failure
@@ -115,7 +118,7 @@ H5FL_EXTERN(H5S_extent_t);
--------------------------------------------------------------------------*/
static void *
H5O__attr_decode(H5F_t *f, H5O_t *open_oh, unsigned H5_ATTR_UNUSED mesg_flags, unsigned *ioflags,
- size_t H5_ATTR_UNUSED p_size, const uint8_t *p)
+ size_t p_size, const uint8_t *p)
{
H5A_t * attr = NULL;
H5S_extent_t *extent; /*extent dimensionality information */
@@ -833,8 +836,9 @@ H5O__attr_debug(H5F_t *f, const void *_mesg, FILE *stream, int indent, int fwidt
break;
} /* end switch */
HDfprintf(stream, "%*s%-*s %s\n", indent, "", fwidth, "Character Set of Name:", s);
- HDfprintf(stream, "%*s%-*s %t\n", indent, "", fwidth, "Object opened:", mesg->obj_opened);
- HDfprintf(stream, "%*s%-*s %a\n", indent, "", fwidth, "Object:", mesg->oloc.addr);
+ HDfprintf(stream, "%*s%-*s %s\n", indent, "", fwidth,
+ "Object opened:", mesg->obj_opened ? "TRUE" : "FALSE");
+ HDfprintf(stream, "%*s%-*s %" PRIuHADDR "\n", indent, "", fwidth, "Object:", mesg->oloc.addr);
/* Check for attribute creation order index on the attribute */
if (mesg->shared->crt_idx != H5O_MAX_CRT_ORDER_IDX)
diff --git a/src/H5Ocache_image.c b/src/H5Ocache_image.c
index 0782f98..e6ba2bf 100644
--- a/src/H5Ocache_image.c
+++ b/src/H5Ocache_image.c
@@ -326,9 +326,10 @@ H5O__mdci_debug(H5F_t H5_ATTR_UNUSED *f, const void *_mesg, FILE *stream, int in
HDassert(indent >= 0);
HDassert(fwidth >= 0);
- HDfprintf(stream, "%*s%-*s %a\n", indent, "", fwidth, "Metadata Cache Image Block address:", mdci->addr);
+ HDfprintf(stream, "%*s%-*s %" PRIuHADDR "\n", indent, "", fwidth,
+ "Metadata Cache Image Block address:", mdci->addr);
- HDfprintf(stream, "%*s%-*s %Hu\n", indent, "", fwidth,
+ HDfprintf(stream, "%*s%-*s %" PRIuHSIZE "\n", indent, "", fwidth,
"Metadata Cache Image Block size in bytes:", mdci->size);
FUNC_LEAVE_NOAPI(SUCCEED)
diff --git a/src/H5Ocont.c b/src/H5Ocont.c
index c8241f8..7c08a57 100644
--- a/src/H5Ocont.c
+++ b/src/H5Ocont.c
@@ -258,7 +258,7 @@ H5O__cont_debug(H5F_t H5_ATTR_UNUSED *f, const void *_mesg, FILE *stream, int in
HDassert(indent >= 0);
HDassert(fwidth >= 0);
- HDfprintf(stream, "%*s%-*s %a\n", indent, "", fwidth, "Continuation address:", cont->addr);
+ HDfprintf(stream, "%*s%-*s %" PRIuHADDR "\n", indent, "", fwidth, "Continuation address:", cont->addr);
HDfprintf(stream, "%*s%-*s %lu\n", indent, "", fwidth,
"Continuation size in bytes:", (unsigned long)(cont->size));
diff --git a/src/H5Odbg.c b/src/H5Odbg.c
index aeea21e..f206184 100644
--- a/src/H5Odbg.c
+++ b/src/H5Odbg.c
@@ -295,7 +295,8 @@ H5O__debug_real(H5F_t *f, H5O_t *oh, haddr_t addr, FILE *stream, int indent, int
/* debug */
HDfprintf(stream, "%*sObject Header...\n", indent, "");
- HDfprintf(stream, "%*s%-*s %t\n", indent, "", fwidth, "Dirty:", oh->cache_info.is_dirty);
+ HDfprintf(stream, "%*s%-*s %s\n", indent, "", fwidth,
+ "Dirty:", oh->cache_info.is_dirty ? "TRUE" : "FALSE");
HDfprintf(stream, "%*s%-*s %u\n", indent, "", fwidth, "Version:", oh->version);
HDfprintf(stream, "%*s%-*s %u\n", indent, "", fwidth,
"Header size (in bytes):", (unsigned)H5O_SIZEOF_HDR(oh));
@@ -344,9 +345,9 @@ H5O__debug_real(H5F_t *f, H5O_t *oh, haddr_t addr, FILE *stream, int indent, int
} /* end if */
} /* end if */
- HDfprintf(stream, "%*s%-*s %Zu (%Zu)\n", indent, "", fwidth,
+ HDfprintf(stream, "%*s%-*s %zu (%zu)\n", indent, "", fwidth,
"Number of messages (allocated):", oh->nmesgs, oh->alloc_nmesgs);
- HDfprintf(stream, "%*s%-*s %Zu (%Zu)\n", indent, "", fwidth, "Number of chunks (allocated):", oh->nchunks,
+ HDfprintf(stream, "%*s%-*s %zu (%zu)\n", indent, "", fwidth, "Number of chunks (allocated):", oh->nchunks,
oh->alloc_nchunks);
/* debug each chunk */
@@ -355,7 +356,8 @@ H5O__debug_real(H5F_t *f, H5O_t *oh, haddr_t addr, FILE *stream, int indent, int
HDfprintf(stream, "%*sChunk %d...\n", indent, "", i);
- HDfprintf(stream, "%*s%-*s %a\n", indent + 3, "", MAX(0, fwidth - 3), "Address:", oh->chunk[i].addr);
+ HDfprintf(stream, "%*s%-*s %" PRIuHADDR "\n", indent + 3, "", MAX(0, fwidth - 3),
+ "Address:", oh->chunk[i].addr);
/* Decrement chunk 0's size by the object header prefix size */
if (0 == i) {
@@ -370,9 +372,9 @@ H5O__debug_real(H5F_t *f, H5O_t *oh, haddr_t addr, FILE *stream, int indent, int
chunk_total += chunk_size;
gap_total += oh->chunk[i].gap;
- HDfprintf(stream, "%*s%-*s %Zu\n", indent + 3, "", MAX(0, fwidth - 3), "Size in bytes:", chunk_size);
+ HDfprintf(stream, "%*s%-*s %zu\n", indent + 3, "", MAX(0, fwidth - 3), "Size in bytes:", chunk_size);
- HDfprintf(stream, "%*s%-*s %Zu\n", indent + 3, "", MAX(0, fwidth - 3), "Gap:", oh->chunk[i].gap);
+ HDfprintf(stream, "%*s%-*s %zu\n", indent + 3, "", MAX(0, fwidth - 3), "Gap:", oh->chunk[i].gap);
} /* end for */
/* debug each message */
@@ -401,7 +403,8 @@ H5O__debug_real(H5F_t *f, H5O_t *oh, haddr_t addr, FILE *stream, int indent, int
HDfprintf(stream, "%*s%-*s 0x%04x `%s' (%d)\n", indent + 3, "", MAX(0, fwidth - 3),
"Message ID (sequence number):", (unsigned)(oh->mesg[i].type->id), oh->mesg[i].type->name,
sequence[oh->mesg[i].type->id]++);
- HDfprintf(stream, "%*s%-*s %t\n", indent + 3, "", MAX(0, fwidth - 3), "Dirty:", oh->mesg[i].dirty);
+ HDfprintf(stream, "%*s%-*s %s\n", indent + 3, "", MAX(0, fwidth - 3),
+ "Dirty:", oh->mesg[i].dirty ? "TRUE" : "FALSE");
HDfprintf(stream, "%*s%-*s ", indent + 3, "", MAX(0, fwidth - 3), "Message flags:");
if (oh->mesg[i].flags) {
hbool_t flag_printed = FALSE;
@@ -461,7 +464,7 @@ H5O__debug_real(H5F_t *f, H5O_t *oh, haddr_t addr, FILE *stream, int indent, int
chunkno = oh->mesg[i].chunkno;
if (chunkno >= oh->nchunks)
HDfprintf(stream, "*** BAD CHUNK NUMBER\n");
- HDfprintf(stream, "%*s%-*s (%Zu, %Zu) bytes\n", indent + 3, "", MAX(0, fwidth - 3),
+ HDfprintf(stream, "%*s%-*s (%zu, %zu) bytes\n", indent + 3, "", MAX(0, fwidth - 3),
"Raw message data (offset, size) in chunk:",
(size_t)(oh->mesg[i].raw - oh->chunk[chunkno].image), oh->mesg[i].raw_size);
diff --git a/src/H5Odrvinfo.c b/src/H5Odrvinfo.c
index 9a8b0f1..b68eb08 100644
--- a/src/H5Odrvinfo.c
+++ b/src/H5Odrvinfo.c
@@ -295,7 +295,7 @@ H5O__drvinfo_debug(H5F_t H5_ATTR_UNUSED *f, const void *_mesg, FILE *stream, int
HDassert(fwidth >= 0);
HDfprintf(stream, "%*s%-*s %s\n", indent, "", fwidth, "Driver name:", mesg->name);
- HDfprintf(stream, "%*s%-*s %Zu\n", indent, "", fwidth, "Buffer size:", mesg->len);
+ HDfprintf(stream, "%*s%-*s %zu\n", indent, "", fwidth, "Buffer size:", mesg->len);
FUNC_LEAVE_NOAPI(SUCCEED)
} /* end H5O__drvinfo_debug() */
diff --git a/src/H5Odtype.c b/src/H5Odtype.c
index 5166d32..c8cd954 100644
--- a/src/H5Odtype.c
+++ b/src/H5Odtype.c
@@ -1102,9 +1102,12 @@ done:
with the decoded information
USAGE
void *H5O__dtype_decode(f, mesg_flags, p)
- H5F_t *f; IN: pointer to the HDF5 file struct
+ H5F_t *f; IN: pointer to the HDF5 file struct
+ H5O_t *open_oh; IN: pointer to the object header
unsigned mesg_flags; IN: Message flags to influence decoding
- const uint8 *p; IN: the raw information buffer
+ unsigned *ioflags; IN/OUT: flags for decoding
+ size_t p_size; IN: size of buffer *p
+ const uint8_t *p; IN: the raw information buffer
RETURNS
Pointer to the new message in native order on success, NULL on failure
DESCRIPTION
diff --git a/src/H5Oefl.c b/src/H5Oefl.c
index f4693a9..f34286a 100644
--- a/src/H5Oefl.c
+++ b/src/H5Oefl.c
@@ -529,28 +529,28 @@ H5O__efl_debug(H5F_t H5_ATTR_UNUSED *f, const void *_mesg, FILE *stream, int ind
HDassert(indent >= 0);
HDassert(fwidth >= 0);
- HDfprintf(stream, "%*s%-*s %a\n", indent, "", fwidth, "Heap address:", mesg->heap_addr);
+ HDfprintf(stream, "%*s%-*s %" PRIuHADDR "\n", indent, "", fwidth, "Heap address:", mesg->heap_addr);
- HDfprintf(stream, "%*s%-*s %u/%u\n", indent, "", fwidth, "Slots used/allocated:", mesg->nused,
+ HDfprintf(stream, "%*s%-*s %zu/%zu\n", indent, "", fwidth, "Slots used/allocated:", mesg->nused,
mesg->nalloc);
for (u = 0; u < mesg->nused; u++) {
char buf[64];
- HDsnprintf(buf, sizeof(buf), "File %u", (unsigned)u);
+ HDsnprintf(buf, sizeof(buf), "File %zu", u);
HDfprintf(stream, "%*s%s:\n", indent, "", buf);
HDfprintf(stream, "%*s%-*s \"%s\"\n", indent + 3, "", MAX(fwidth - 3, 0),
"Name:", mesg->slot[u].name);
- HDfprintf(stream, "%*s%-*s %lu\n", indent + 3, "", MAX(fwidth - 3, 0),
- "Name offset:", (unsigned long)(mesg->slot[u].name_offset));
+ HDfprintf(stream, "%*s%-*s %zu\n", indent + 3, "", MAX(fwidth - 3, 0),
+ "Name offset:", mesg->slot[u].name_offset);
- HDfprintf(stream, "%*s%-*s %lu\n", indent + 3, "", MAX(fwidth - 3, 0),
- "Offset of data in file:", (unsigned long)(mesg->slot[u].offset));
+ HDfprintf(stream, "%*s%-*s %" PRIdMAX "\n", indent + 3, "", MAX(fwidth - 3, 0),
+ "Offset of data in file:", (intmax_t)(mesg->slot[u].offset));
- HDfprintf(stream, "%*s%-*s %lu\n", indent + 3, "", MAX(fwidth - 3, 0),
- "Bytes reserved for data:", (unsigned long)(mesg->slot[u].size));
+ HDfprintf(stream, "%*s%-*s %" PRIuHSIZE "\n", indent + 3, "", MAX(fwidth - 3, 0),
+ "Bytes reserved for data:", (mesg->slot[u].size));
} /* end for */
FUNC_LEAVE_NOAPI(SUCCEED)
diff --git a/src/H5Ofill.c b/src/H5Ofill.c
index 010d47a..92135b8 100644
--- a/src/H5Ofill.c
+++ b/src/H5Ofill.c
@@ -937,7 +937,7 @@ H5O__fill_debug(H5F_t H5_ATTR_UNUSED *f, const void *_fill, FILE *stream, int in
break;
} /* end switch */
- HDfprintf(stream, "%*s%-*s %Zd\n", indent, "", fwidth, "Size:", fill->size);
+ HDfprintf(stream, "%*s%-*s %zd\n", indent, "", fwidth, "Size:", fill->size);
HDfprintf(stream, "%*s%-*s ", indent, "", fwidth, "Data type:");
if (fill->type) {
H5T_debug(fill->type, stream);
diff --git a/src/H5Oflush.c b/src/H5Oflush.c
index 07b0ab5..19e231d 100644
--- a/src/H5Oflush.c
+++ b/src/H5Oflush.c
@@ -58,7 +58,7 @@ static herr_t H5O__refresh_metadata_close(hid_t oid, H5O_loc_t oloc, H5G_loc_t *
*
* Purpose: Flushes all buffers associated with an object to disk.
*
- * Return: SUCCEED/FAIL
+ * Return: Non-negative on success, negative on failure
*
* Programmer: Mike McGreevy
* May 19, 2010
@@ -81,7 +81,7 @@ H5Oflush(hid_t obj_id)
/* Set up collective metadata if appropriate */
if (H5CX_set_loc(obj_id) < 0)
- HGOTO_ERROR(H5E_DATATYPE, H5E_CANTSET, FAIL, "can't set access property list info")
+ HGOTO_ERROR(H5E_OHDR, H5E_CANTSET, FAIL, "can't set access property list info")
/* Set location parameters */
loc_params.type = H5VL_OBJECT_BY_SELF;
@@ -164,7 +164,7 @@ H5O_flush_common(H5O_loc_t *oloc, hid_t obj_id)
/* Flush metadata based on tag value of the object */
if (H5F_flush_tagged_metadata(oloc->file, tag) < 0)
- HGOTO_ERROR(H5E_FILE, H5E_CANTFLUSH, FAIL, "unable to flush tagged metadata")
+ HGOTO_ERROR(H5E_OHDR, H5E_CANTFLUSH, FAIL, "unable to flush tagged metadata")
/* Check to invoke callback */
if (H5F_object_flush_cb(oloc->file, obj_id) < 0)
@@ -219,7 +219,7 @@ done:
*
* Purpose: Refreshes all buffers associated with an object.
*
- * Return: SUCCEED/FAIL
+ * Return: Non-negative on success, negative on failure
*
* Programmer: Mike McGreevy
* July 28, 2010
@@ -387,32 +387,32 @@ H5O__refresh_metadata_close(hid_t oid, H5O_loc_t oloc, H5G_loc_t *obj_loc)
/* Handle close for multiple dataset opens */
if (H5I_get_type(oid) == H5I_DATASET)
if (H5D_mult_refresh_close(oid) < 0)
- HGOTO_ERROR(H5E_DATASET, H5E_CANTOPENOBJ, FAIL, "unable to prepare refresh for dataset")
+ HGOTO_ERROR(H5E_OHDR, H5E_CANTOPENOBJ, FAIL, "unable to prepare refresh for dataset")
/* Retrieve tag for object */
if (H5O__oh_tag(&oloc, &tag) < 0)
- HGOTO_ERROR(H5E_DATASET, H5E_CANTFLUSH, FAIL, "unable to get object header address")
+ HGOTO_ERROR(H5E_OHDR, H5E_CANTFLUSH, FAIL, "unable to get object header address")
/* Get cork status of the object with tag */
if (H5AC_cork(oloc.file, tag, H5AC__GET_CORKED, &corked) < 0)
- HGOTO_ERROR(H5E_ATOM, H5E_SYSTEM, FAIL, "unable to retrieve an object's cork status")
+ HGOTO_ERROR(H5E_OHDR, H5E_SYSTEM, FAIL, "unable to retrieve an object's cork status")
/* Close the object */
if (H5I_dec_ref(oid) < 0)
- HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to close object")
+ HGOTO_ERROR(H5E_OHDR, H5E_CANTINIT, FAIL, "unable to close object")
/* Flush metadata based on tag value of the object */
if (H5F_flush_tagged_metadata(oloc.file, tag) < 0)
- HGOTO_ERROR(H5E_FILE, H5E_CANTFLUSH, FAIL, "unable to flush tagged metadata")
+ HGOTO_ERROR(H5E_OHDR, H5E_CANTFLUSH, FAIL, "unable to flush tagged metadata")
/* Evict the object's tagged metadata */
if (H5F_evict_tagged_metadata(oloc.file, tag) < 0)
- HGOTO_ERROR(H5E_FILE, H5E_CANTFLUSH, FAIL, "unable to evict metadata")
+ HGOTO_ERROR(H5E_OHDR, H5E_CANTFLUSH, FAIL, "unable to evict metadata")
/* Re-cork object with tag */
if (corked)
if (H5AC_cork(oloc.file, tag, H5AC__SET_CORK, &corked) < 0)
- HGOTO_ERROR(H5E_ATOM, H5E_SYSTEM, FAIL, "unable to cork the object")
+ HGOTO_ERROR(H5E_OHDR, H5E_SYSTEM, FAIL, "unable to cork the object")
done:
FUNC_LEAVE_NOAPI(ret_value);
diff --git a/src/H5Ofsinfo.c b/src/H5Ofsinfo.c
index 5eaff2c..166fe18 100644
--- a/src/H5Ofsinfo.c
+++ b/src/H5Ofsinfo.c
@@ -378,23 +378,26 @@ H5O__fsinfo_debug(H5F_t H5_ATTR_UNUSED *f, const void *_mesg, FILE *stream, int
HDfprintf(stream, "%s\n", "unknown");
} /* end switch */
- HDfprintf(stream, "%*s%-*s %t\n", indent, "", fwidth, "Free-space persist:", fsinfo->persist);
+ HDfprintf(stream, "%*s%-*s %s\n", indent, "", fwidth,
+ "Free-space persist:", fsinfo->persist ? "TRUE" : "FALSE");
- HDfprintf(stream, "%*s%-*s %Hu\n", indent, "", fwidth,
+ HDfprintf(stream, "%*s%-*s %" PRIuHSIZE "\n", indent, "", fwidth,
"Free-space section threshold:", fsinfo->threshold);
- HDfprintf(stream, "%*s%-*s %Hu\n", indent, "", fwidth, "File space page size:", fsinfo->page_size);
+ HDfprintf(stream, "%*s%-*s %" PRIuHSIZE "\n", indent, "", fwidth,
+ "File space page size:", fsinfo->page_size);
- HDfprintf(stream, "%*s%-*s %u\n", indent, "", fwidth,
+ HDfprintf(stream, "%*s%-*s %zu\n", indent, "", fwidth,
"Page end metadata threshold:", fsinfo->pgend_meta_thres);
- HDfprintf(stream, "%*s%-*s %a\n", indent, "", fwidth,
+ HDfprintf(stream, "%*s%-*s %" PRIuHADDR "\n", indent, "", fwidth,
"eoa_pre_fsm_fsalloc:", fsinfo->eoa_pre_fsm_fsalloc);
- if (fsinfo->persist)
+ if (fsinfo->persist) {
for (ptype = H5F_MEM_PAGE_SUPER; ptype < H5F_MEM_PAGE_NTYPES; ptype++)
- HDfprintf(stream, "%*s%-*s %a\n", indent, "", fwidth,
+ HDfprintf(stream, "%*s%-*s %" PRIuHADDR "\n", indent, "", fwidth,
"Free space manager address:", fsinfo->fs_addr[ptype - 1]);
+ } /* end if */
FUNC_LEAVE_NOAPI(SUCCEED)
} /* end H5O__fsinfo_debug() */
diff --git a/src/H5Oint.c b/src/H5Oint.c
index 583909a..a49e71b 100644
--- a/src/H5Oint.c
+++ b/src/H5Oint.c
@@ -570,7 +570,7 @@ H5O_open(H5O_loc_t *loc)
#ifdef H5O_DEBUG
if (H5DEBUG(O))
- HDfprintf(H5DEBUG(O), "> %a\n", loc->addr);
+ HDfprintf(H5DEBUG(O), "> %" PRIuHADDR "\n", loc->addr);
#endif
/* Turn off the variable for holding file or increment open-lock counters */
@@ -801,10 +801,10 @@ H5O_close(H5O_loc_t *loc, hbool_t *file_closed /*out*/)
#ifdef H5O_DEBUG
if (H5DEBUG(O)) {
if (FALSE == H5F_ID_EXISTS(loc->file) && 1 == H5F_NREFS(loc->file))
- HDfprintf(H5DEBUG(O), "< %a auto %lu remaining\n", loc->addr,
+ HDfprintf(H5DEBUG(O), "< %" PRIuHADDR " auto %lu remaining\n", loc->addr,
(unsigned long)H5F_NOPEN_OBJS(loc->file));
else
- HDfprintf(H5DEBUG(O), "< %a\n", loc->addr);
+ HDfprintf(H5DEBUG(O), "< %" PRIuHADDR "\n", loc->addr);
}
#endif
@@ -2211,7 +2211,7 @@ H5O_get_info(const H5O_loc_t *loc, H5O_info2_t *oinfo, unsigned fields)
/* Set the object's reference count */
oinfo->rc = oh->nlink;
- } /* end if */
+ }
/* Get time information, if requested */
if (fields & H5O_INFO_TIME) {
@@ -2505,8 +2505,8 @@ H5O_get_oh_addr(const H5O_t *oh)
/*-------------------------------------------------------------------------
* Function: H5O_get_oh_flags
*
- * Programmer: Jacob Smith
- * 2018 August 17
+ * Programmer: Jacob Smith
+ * 2018 August 17
*
*-------------------------------------------------------------------------
*/
@@ -2521,12 +2521,12 @@ H5O_get_oh_flags(const H5O_t *oh)
/*-------------------------------------------------------------------------
* Function: H5O_get_oh_mtime
*
- * Purpose: Retrieve an object's modification time. Assumes that the
+ * Purpose: Retrieve an object's modification time. Assumes that the
* caller has verified that accessing this variable is appropriate
* to the header in question.
*
- * Programmer: Jacob Smith
- * 2018 August 17
+ * Programmer: Jacob Smith
+ * 2018 August 17
*
*-------------------------------------------------------------------------
*/
@@ -2542,8 +2542,8 @@ H5O_get_oh_mtime(const H5O_t *oh)
/*-------------------------------------------------------------------------
* Function: H5O_get_oh_version
*
- * Programmer: Jacob Smith
- * 2018 August 17
+ * Programmer: Jacob Smith
+ * 2018 August 17
*
*-------------------------------------------------------------------------
*/
diff --git a/src/H5Olayout.c b/src/H5Olayout.c
index 9710769..b4c1bbb 100644
--- a/src/H5Olayout.c
+++ b/src/H5Olayout.c
@@ -433,8 +433,7 @@ H5O__layout_decode(H5F_t *f, H5O_t H5_ATTR_UNUSED *open_oh, unsigned H5_ATTR_UNU
(mesg->storage.u.virt.list[i].source_file_name = (char *)H5MM_malloc(tmp_size)))
HGOTO_ERROR(H5E_OHDR, H5E_RESOURCE, NULL,
"unable to allocate memory for source file name")
- (void)H5MM_memcpy(mesg->storage.u.virt.list[i].source_file_name, heap_block_p,
- tmp_size);
+ H5MM_memcpy(mesg->storage.u.virt.list[i].source_file_name, heap_block_p, tmp_size);
heap_block_p += tmp_size;
/* Source dataset name */
@@ -443,8 +442,7 @@ H5O__layout_decode(H5F_t *f, H5O_t H5_ATTR_UNUSED *open_oh, unsigned H5_ATTR_UNU
(mesg->storage.u.virt.list[i].source_dset_name = (char *)H5MM_malloc(tmp_size)))
HGOTO_ERROR(H5E_OHDR, H5E_RESOURCE, NULL,
"unable to allocate memory for source dataset name")
- (void)H5MM_memcpy(mesg->storage.u.virt.list[i].source_dset_name, heap_block_p,
- tmp_size);
+ H5MM_memcpy(mesg->storage.u.virt.list[i].source_dset_name, heap_block_p, tmp_size);
heap_block_p += tmp_size;
/* Source selection */
@@ -1196,31 +1194,32 @@ H5O__layout_debug(H5F_t H5_ATTR_UNUSED *f, const void *_mesg, FILE *stream, int
(unsigned)mesg->u.chunk.idx_type);
break;
} /* end switch */
- HDfprintf(stream, "%*s%-*s %a\n", indent, "", fwidth,
+ HDfprintf(stream, "%*s%-*s %" PRIuHADDR "\n", indent, "", fwidth,
"Index address:", mesg->storage.u.chunk.idx_addr);
break;
case H5D_CONTIGUOUS:
HDfprintf(stream, "%*s%-*s %s\n", indent, "", fwidth, "Type:", "Contiguous");
- HDfprintf(stream, "%*s%-*s %a\n", indent, "", fwidth,
+ HDfprintf(stream, "%*s%-*s %" PRIuHADDR "\n", indent, "", fwidth,
"Data address:", mesg->storage.u.contig.addr);
- HDfprintf(stream, "%*s%-*s %Hu\n", indent, "", fwidth, "Data Size:", mesg->storage.u.contig.size);
+ HDfprintf(stream, "%*s%-*s %" PRIuHSIZE "\n", indent, "", fwidth,
+ "Data Size:", mesg->storage.u.contig.size);
break;
case H5D_COMPACT:
HDfprintf(stream, "%*s%-*s %s\n", indent, "", fwidth, "Type:", "Compact");
- HDfprintf(stream, "%*s%-*s %Zu\n", indent, "", fwidth,
+ HDfprintf(stream, "%*s%-*s %zu\n", indent, "", fwidth,
"Data Size:", mesg->storage.u.compact.size);
break;
case H5D_VIRTUAL:
HDfprintf(stream, "%*s%-*s %s\n", indent, "", fwidth, "Type:", "Virtual");
- HDfprintf(stream, "%*s%-*s %a\n", indent, "", fwidth,
+ HDfprintf(stream, "%*s%-*s %" PRIuHADDR "\n", indent, "", fwidth,
"Global heap address:", mesg->storage.u.virt.serial_list_hobjid.addr);
- HDfprintf(stream, "%*s%-*s %Zu\n", indent, "", fwidth,
+ HDfprintf(stream, "%*s%-*s %zu\n", indent, "", fwidth,
"Global heap index:", mesg->storage.u.virt.serial_list_hobjid.idx);
for (u = 0; u < mesg->storage.u.virt.list_nused; u++) {
- HDfprintf(stream, "%*sMapping %u:\n", indent, "", u);
+ HDfprintf(stream, "%*sMapping %zu:\n", indent, "", u);
HDfprintf(stream, "%*s%-*s %s\n", indent + 3, "", fwidth - 3,
"Virtual selection:", "<Not yet implemented>");
HDfprintf(stream, "%*s%-*s %s\n", indent + 3, "", fwidth - 3,
diff --git a/src/H5Olinfo.c b/src/H5Olinfo.c
index 3b2765c..fa24714 100644
--- a/src/H5Olinfo.c
+++ b/src/H5Olinfo.c
@@ -548,17 +548,18 @@ H5O__linfo_debug(H5F_t H5_ATTR_UNUSED *f, const void *_mesg, FILE *stream, int i
HDassert(indent >= 0);
HDassert(fwidth >= 0);
- HDfprintf(stream, "%*s%-*s %t\n", indent, "", fwidth,
- "Track creation order of links:", linfo->track_corder);
- HDfprintf(stream, "%*s%-*s %t\n", indent, "", fwidth,
- "Index creation order of links:", linfo->index_corder);
- HDfprintf(stream, "%*s%-*s %Hu\n", indent, "", fwidth, "Number of links:", linfo->nlinks);
- HDfprintf(stream, "%*s%-*s %Hd\n", indent, "", fwidth, "Max. creation order value:", linfo->max_corder);
- HDfprintf(stream, "%*s%-*s %a\n", indent, "", fwidth,
+ HDfprintf(stream, "%*s%-*s %s\n", indent, "", fwidth,
+ "Track creation order of links:", linfo->track_corder ? "TRUE" : "FALSE");
+ HDfprintf(stream, "%*s%-*s %s\n", indent, "", fwidth,
+ "Index creation order of links:", linfo->index_corder ? "TRUE" : "FALSE");
+ HDfprintf(stream, "%*s%-*s %" PRIuHSIZE "\n", indent, "", fwidth, "Number of links:", linfo->nlinks);
+ HDfprintf(stream, "%*s%-*s %" PRId64 "\n", indent, "", fwidth,
+ "Max. creation order value:", linfo->max_corder);
+ HDfprintf(stream, "%*s%-*s %" PRIuHADDR "\n", indent, "", fwidth,
"'Dense' link storage fractal heap address:", linfo->fheap_addr);
- HDfprintf(stream, "%*s%-*s %a\n", indent, "", fwidth,
+ HDfprintf(stream, "%*s%-*s %" PRIuHADDR "\n", indent, "", fwidth,
"'Dense' link storage name index v2 B-tree address:", linfo->name_bt2_addr);
- HDfprintf(stream, "%*s%-*s %a\n", indent, "", fwidth,
+ HDfprintf(stream, "%*s%-*s %" PRIuHADDR "\n", indent, "", fwidth,
"'Dense' link storage creation order index v2 B-tree address:", linfo->corder_bt2_addr);
FUNC_LEAVE_NOAPI(SUCCEED)
diff --git a/src/H5Olink.c b/src/H5Olink.c
index 152c660..baba6b8 100644
--- a/src/H5Olink.c
+++ b/src/H5Olink.c
@@ -817,7 +817,7 @@ H5O__link_debug(H5F_t H5_ATTR_UNUSED *f, const void *_mesg, FILE *stream, int in
: (lnk->type >= H5L_TYPE_UD_MIN ? "User-defined" : "Unknown")))));
if (lnk->corder_valid)
- HDfprintf(stream, "%*s%-*s %a\n", indent, "", fwidth, "Creation Order:", lnk->corder);
+ HDfprintf(stream, "%*s%-*s %" PRId64 "\n", indent, "", fwidth, "Creation Order:", lnk->corder);
HDfprintf(stream, "%*s%-*s %s\n", indent, "", fwidth, "Link Name Character Set:",
(lnk->cset == H5T_CSET_ASCII ? "ASCII" : (lnk->cset == H5T_CSET_UTF8 ? "UTF-8" : "Unknown")));
@@ -826,7 +826,8 @@ H5O__link_debug(H5F_t H5_ATTR_UNUSED *f, const void *_mesg, FILE *stream, int in
/* Display link-specific information */
switch (lnk->type) {
case H5L_TYPE_HARD:
- HDfprintf(stream, "%*s%-*s %a\n", indent, "", fwidth, "Object address:", lnk->u.hard.addr);
+ HDfprintf(stream, "%*s%-*s %" PRIuHADDR "\n", indent, "", fwidth,
+ "Object address:", lnk->u.hard.addr);
break;
case H5L_TYPE_SOFT:
@@ -843,11 +844,11 @@ H5O__link_debug(H5F_t H5_ATTR_UNUSED *f, const void *_mesg, FILE *stream, int in
(const char *)lnk->u.ud.udata + (HDstrlen((const char *)lnk->u.ud.udata) + 1);
HDfprintf(stream, "%*s%-*s %s\n", indent, "", fwidth,
- "External File Name:", lnk->u.ud.udata);
+ "External File Name:", (const char *)lnk->u.ud.udata);
HDfprintf(stream, "%*s%-*s %s\n", indent, "", fwidth, "External Object Name:", objname);
} /* end if */
else {
- HDfprintf(stream, "%*s%-*s %Zu\n", indent, "", fwidth,
+ HDfprintf(stream, "%*s%-*s %zu\n", indent, "", fwidth,
"User-Defined Link Size:", lnk->u.ud.size);
} /* end else */
} /* end if */
diff --git a/src/H5Opline.c b/src/H5Opline.c
index 7c6c4ee..71e04d5 100644
--- a/src/H5Opline.c
+++ b/src/H5Opline.c
@@ -649,14 +649,14 @@ H5O__pline_debug(H5F_t H5_ATTR_UNUSED *f, const void *mesg, FILE *stream, int in
HDassert(indent >= 0);
HDassert(fwidth >= 0);
- HDfprintf(stream, "%*s%-*s %Zu/%Zu\n", indent, "", fwidth, "Number of filters:", pline->nused,
+ HDfprintf(stream, "%*s%-*s %zu/%zu\n", indent, "", fwidth, "Number of filters:", pline->nused,
pline->nalloc);
/* Loop over all the filters */
for (i = 0; i < pline->nused; i++) {
char name[32];
- HDsnprintf(name, sizeof(name), "Filter at position %u", (unsigned)i);
+ HDsnprintf(name, sizeof(name), "Filter at position %zu", i);
HDfprintf(stream, "%*s%-*s\n", indent, "", fwidth, name);
HDfprintf(stream, "%*s%-*s 0x%04x\n", indent + 3, "", MAX(0, fwidth - 3),
"Filter identification:", (unsigned)(pline->filter[i].id));
@@ -667,7 +667,7 @@ H5O__pline_debug(H5F_t H5_ATTR_UNUSED *f, const void *mesg, FILE *stream, int in
HDfprintf(stream, "%*s%-*s NONE\n", indent + 3, "", MAX(0, fwidth - 3), "Filter name:");
HDfprintf(stream, "%*s%-*s 0x%04x\n", indent + 3, "", MAX(0, fwidth - 3),
"Flags:", pline->filter[i].flags);
- HDfprintf(stream, "%*s%-*s %Zu\n", indent + 3, "", MAX(0, fwidth - 3),
+ HDfprintf(stream, "%*s%-*s %zu\n", indent + 3, "", MAX(0, fwidth - 3),
"Num CD values:", pline->filter[i].cd_nelmts);
/* Filter parameters */
diff --git a/src/H5Osdspace.c b/src/H5Osdspace.c
index 5631ea6..b34eb76 100644
--- a/src/H5Osdspace.c
+++ b/src/H5Osdspace.c
@@ -490,7 +490,7 @@ H5O__sdspace_debug(H5F_t H5_ATTR_UNUSED *f, const void *mesg, FILE *stream, int
HDfprintf(stream, "%*s%-*s {", indent, "", fwidth, "Dim Size:");
for (u = 0; u < sdim->rank; u++)
- HDfprintf(stream, "%s%Hu", u ? ", " : "", sdim->size[u]);
+ HDfprintf(stream, "%s%" PRIuHSIZE, u ? ", " : "", sdim->size[u]);
HDfprintf(stream, "}\n");
HDfprintf(stream, "%*s%-*s ", indent, "", fwidth, "Dim Max:");
@@ -500,7 +500,7 @@ H5O__sdspace_debug(H5F_t H5_ATTR_UNUSED *f, const void *mesg, FILE *stream, int
if (H5S_UNLIMITED == sdim->max[u])
HDfprintf(stream, "%sUNLIM", u ? ", " : "");
else
- HDfprintf(stream, "%s%Hu", u ? ", " : "", sdim->max[u]);
+ HDfprintf(stream, "%s%" PRIuHSIZE, u ? ", " : "", sdim->max[u]);
} /* end for */
HDfprintf(stream, "}\n");
} /* end if */
diff --git a/src/H5Oshared.c b/src/H5Oshared.c
index 0beb647..a33da0f 100644
--- a/src/H5Oshared.c
+++ b/src/H5Oshared.c
@@ -707,7 +707,8 @@ H5O__shared_debug(const H5O_shared_t *mesg, FILE *stream, int indent, int fwidth
case H5O_SHARE_TYPE_COMMITTED:
HDfprintf(stream, "%*s%-*s %s\n", indent, "", fwidth, "Shared Message type:", "Obj Hdr");
- HDfprintf(stream, "%*s%-*s %a\n", indent, "", fwidth, "Object address:", mesg->u.loc.oh_addr);
+ HDfprintf(stream, "%*s%-*s %" PRIuHADDR "\n", indent, "", fwidth,
+ "Object address:", mesg->u.loc.oh_addr);
break;
case H5O_SHARE_TYPE_SOHM:
diff --git a/src/H5Oshmesg.c b/src/H5Oshmesg.c
index 97546fa..a9647cb 100644
--- a/src/H5Oshmesg.c
+++ b/src/H5Oshmesg.c
@@ -229,7 +229,8 @@ H5O__shmesg_debug(H5F_t H5_ATTR_UNUSED *f, const void *_mesg, FILE *stream, int
HDassert(fwidth >= 0);
HDfprintf(stream, "%*s%-*s %u\n", indent, "", fwidth, "Version:", mesg->version);
- HDfprintf(stream, "%*s%-*s %a (rel)\n", indent, "", fwidth, "Shared message table address:", mesg->addr);
+ HDfprintf(stream, "%*s%-*s %" PRIuHADDR " (rel)\n", indent, "", fwidth,
+ "Shared message table address:", mesg->addr);
HDfprintf(stream, "%*s%-*s %u\n", indent, "", fwidth, "Number of indexes:", mesg->nindexes);
FUNC_LEAVE_NOAPI(SUCCEED)
diff --git a/src/H5Ostab.c b/src/H5Ostab.c
index 81ab61d..071be91 100644
--- a/src/H5Ostab.c
+++ b/src/H5Ostab.c
@@ -412,9 +412,9 @@ H5O__stab_debug(H5F_t H5_ATTR_UNUSED *f, const void *_mesg, FILE *stream, int in
HDassert(indent >= 0);
HDassert(fwidth >= 0);
- HDfprintf(stream, "%*s%-*s %a\n", indent, "", fwidth, "B-tree address:", stab->btree_addr);
+ HDfprintf(stream, "%*s%-*s %" PRIuHADDR "\n", indent, "", fwidth, "B-tree address:", stab->btree_addr);
- HDfprintf(stream, "%*s%-*s %a\n", indent, "", fwidth, "Name heap address:", stab->heap_addr);
+ HDfprintf(stream, "%*s%-*s %" PRIuHADDR "\n", indent, "", fwidth, "Name heap address:", stab->heap_addr);
FUNC_LEAVE_NOAPI(SUCCEED)
} /* end H5O__stab_debug() */
diff --git a/src/H5PLpath.c b/src/H5PLpath.c
index 1858cf8..3879dc6 100644
--- a/src/H5PLpath.c
+++ b/src/H5PLpath.c
@@ -669,8 +669,10 @@ H5PL__find_plugin_in_path(const H5PL_search_params_t *search_params, hbool_t *fo
HDstrerror(errno))
/* If it is a directory, skip it */
- if (S_ISDIR(my_stat.st_mode))
+ if (S_ISDIR(my_stat.st_mode)) {
+ path = (char *)H5MM_xfree(path);
continue;
+ }
/* attempt to open the dynamic library as a filter library */
if (H5PL__open(path, search_params->type, search_params->key, found, plugin_info) < 0)
diff --git a/src/H5PLprivate.h b/src/H5PLprivate.h
index 43930ad..fff36a7 100644
--- a/src/H5PLprivate.h
+++ b/src/H5PLprivate.h
@@ -21,8 +21,8 @@
#include "H5PLpublic.h"
/* Private headers needed by this file */
-#include "H5private.h" /* Generic Functions */
-#include "H5VLprivate.h" /* Virtual Object Layer */
+#include "H5private.h" /* Generic Functions */
+#include "H5VLprivate.h" /* Virtual Object Layer */
/**************************/
/* Library Private Macros */
diff --git a/src/H5Rint.c b/src/H5Rint.c
index 5372563..8f3163a 100644
--- a/src/H5Rint.c
+++ b/src/H5Rint.c
@@ -89,7 +89,6 @@
} while (0)
/* Debug */
-//#define H5R_DEBUG
#ifdef H5R_DEBUG
#define H5R_LOG_DEBUG(...) \
do { \
@@ -807,7 +806,7 @@ H5R__set_obj_token(H5R_ref_priv_t *ref, const H5O_token_t *obj_token, size_t tok
HDassert(token_size);
HDassert(token_size <= H5O_MAX_TOKEN_SIZE);
- H5MM_memcpy(&ref->info.obj.token, obj_token, sizeof(H5O_token_t));
+ H5MM_memcpy(&ref->info.obj.token, obj_token, token_size);
HDassert(token_size <= 255);
ref->token_size = (uint8_t)token_size;
diff --git a/src/H5SM.c b/src/H5SM.c
index 450baac..2e3fe04 100644
--- a/src/H5SM.c
+++ b/src/H5SM.c
@@ -2583,19 +2583,19 @@ H5SM_table_debug(H5F_t *f, haddr_t table_addr, FILE *stream, int indent, int fwi
? "List"
: (table->indexes[x].index_type == H5SM_BTREE ? "B-Tree" : "Unknown")));
- HDfprintf(stream, "%*s%-*s %a\n", indent + 3, "", fwidth,
+ HDfprintf(stream, "%*s%-*s %" PRIuHADDR "\n", indent + 3, "", fwidth,
"Address of index:", table->indexes[x].index_addr);
- HDfprintf(stream, "%*s%-*s %a\n", indent + 3, "", fwidth,
+ HDfprintf(stream, "%*s%-*s %" PRIuHADDR "\n", indent + 3, "", fwidth,
"Address of index's heap:", table->indexes[x].heap_addr);
HDfprintf(stream, "%*s%-*s 0x%08x\n", indent + 3, "", fwidth,
"Message type flags:", table->indexes[x].mesg_types);
- HDfprintf(stream, "%*s%-*s %Zu\n", indent + 3, "", fwidth,
+ HDfprintf(stream, "%*s%-*s %zu\n", indent + 3, "", fwidth,
"Minimum size of messages:", table->indexes[x].min_mesg_size);
- HDfprintf(stream, "%*s%-*s %Zu\n", indent + 3, "", fwidth,
+ HDfprintf(stream, "%*s%-*s %zu\n", indent + 3, "", fwidth,
"Number of messages:", table->indexes[x].num_messages);
- HDfprintf(stream, "%*s%-*s %Zu\n", indent + 3, "", fwidth,
+ HDfprintf(stream, "%*s%-*s %zu\n", indent + 3, "", fwidth,
"Maximum list size:", table->indexes[x].list_max);
- HDfprintf(stream, "%*s%-*s %Zu\n", indent + 3, "", fwidth,
+ HDfprintf(stream, "%*s%-*s %zu\n", indent + 3, "", fwidth,
"Minimum B-tree size:", table->indexes[x].btree_min);
} /* end for */
@@ -2683,16 +2683,16 @@ H5SM_list_debug(H5F_t *f, haddr_t list_addr, FILE *stream, int indent, int fwidt
HDassert(fh);
HDfprintf(stream, "%*s%-*s %s\n", indent + 3, "", fwidth, "Location:", "in heap");
- HDfprintf(stream, "%*s%-*s 0x%Zx\n", indent + 3, "", fwidth,
- "Heap ID:", list->messages[x].u.heap_loc.fheap_id);
- HDfprintf(stream, "%*s%-*s %u\n", indent + 3, "", fwidth,
+ HDfprintf(stream, "%*s%-*s 0x%" PRIx64 "\n", indent + 3, "", fwidth,
+ "Heap ID:", list->messages[x].u.heap_loc.fheap_id.val);
+ HDfprintf(stream, "%*s%-*s %" PRIuHSIZE "\n", indent + 3, "", fwidth,
"Reference count:", list->messages[x].u.heap_loc.ref_count);
} /* end if */
else if (list->messages[x].location == H5SM_IN_OH) {
HDfprintf(stream, "%*s%-*s %s\n", indent + 3, "", fwidth, "Location:", "in object header");
- HDfprintf(stream, "%*s%-*s %a\n", indent + 3, "", fwidth,
+ HDfprintf(stream, "%*s%-*s %" PRIuHADDR "\n", indent + 3, "", fwidth,
"Object header address:", list->messages[x].u.mesg_loc.oh_addr);
- HDfprintf(stream, "%*s%-*s %u\n", indent + 3, "", fwidth,
+ HDfprintf(stream, "%*s%-*s %" PRIuHADDR "\n", indent + 3, "", fwidth,
"Message creation index:", list->messages[x].u.mesg_loc.oh_addr);
HDfprintf(stream, "%*s%-*s %u\n", indent + 3, "", fwidth,
"Message type ID:", list->messages[x].msg_type_id);
diff --git a/src/H5SMbtree2.c b/src/H5SMbtree2.c
index 7873472..446f721 100644
--- a/src/H5SMbtree2.c
+++ b/src/H5SMbtree2.c
@@ -187,12 +187,12 @@ H5SM__bt2_debug(FILE *stream, int indent, int fwidth, const void *record, const
FUNC_ENTER_STATIC_NOERR
if (sohm->location == H5SM_IN_HEAP)
- HDfprintf(stream, "%*s%-*s {%a, %lo, %Hx}\n", indent, "", fwidth,
- "Shared Message in heap:", sohm->u.heap_loc.fheap_id, sohm->hash,
+ HDfprintf(stream, "%*s%-*s {%" PRIu64 ", %" PRIo32 ", %" PRIxHSIZE "}\n", indent, "", fwidth,
+ "Shared Message in heap:", sohm->u.heap_loc.fheap_id.val, sohm->hash,
sohm->u.heap_loc.ref_count);
else {
HDassert(sohm->location == H5SM_IN_OH);
- HDfprintf(stream, "%*s%-*s {%a, %lo, %Hx, %Hx}\n", indent, "", fwidth,
+ HDfprintf(stream, "%*s%-*s {%" PRIuHADDR ", %" PRIo32 ", %x, %" PRIx32 "}\n", indent, "", fwidth,
"Shared Message in OH:", sohm->u.mesg_loc.oh_addr, sohm->hash, sohm->msg_type_id,
sohm->u.mesg_loc.index);
} /* end else */
diff --git a/src/H5Smpio.c b/src/H5Smpio.c
index 307cabc..f737944 100644
--- a/src/H5Smpio.c
+++ b/src/H5Smpio.c
@@ -697,8 +697,10 @@ H5S__mpio_reg_hyper_type(const H5S_t *space, size_t elmt_size, MPI_Datatype *new
#ifdef H5S_DEBUG
if (H5DEBUG(S)) {
- HDfprintf(H5DEBUG(S), "%s: start=%Hd stride=%Hu count=%Hu block=%Hu xtent=%Hu", FUNC,
- d[u].start, d[u].strid, d[u].count, d[u].block, d[u].xtent);
+ HDfprintf(H5DEBUG(S),
+ "%s: start=%" PRIdHSIZE " stride=%" PRIuHSIZE " count=%" PRIuHSIZE
+ " block=%" PRIuHSIZE " xtent=%" PRIuHSIZE,
+ FUNC, d[u].start, d[u].strid, d[u].count, d[u].block, d[u].xtent);
if (u == 0)
HDfprintf(H5DEBUG(S), " rank=%u\n", rank);
else
@@ -729,8 +731,10 @@ H5S__mpio_reg_hyper_type(const H5S_t *space, size_t elmt_size, MPI_Datatype *new
#ifdef H5S_DEBUG
if (H5DEBUG(S)) {
- HDfprintf(H5DEBUG(S), "%s: start=%Hd stride=%Hu count=%Hu block=%Hu xtent=%Hu", FUNC,
- d[u].start, d[u].strid, d[u].count, d[u].block, d[u].xtent);
+ HDfprintf(H5DEBUG(S),
+ "%s: start=%" PRIdHSIZE " stride=%" PRIuHSIZE " count=%" PRIuHSIZE
+ " block=%" PRIuHSIZE " xtent=%" PRIuHSIZE,
+ FUNC, d[u].start, d[u].strid, d[u].count, d[u].block, d[u].xtent);
if (u == 0)
HDfprintf(H5DEBUG(S), " rank=%u\n", rank);
else
@@ -754,7 +758,8 @@ H5S__mpio_reg_hyper_type(const H5S_t *space, size_t elmt_size, MPI_Datatype *new
#ifdef H5S_DEBUG
if (H5DEBUG(S)) {
i = ((int)rank) - 1;
- HDfprintf(H5DEBUG(S), " offset[%2d]=%Hu; max_xtent[%2d]=%Hu\n", i, offset[i], i, max_xtent[i]);
+ HDfprintf(H5DEBUG(S), " offset[%2d]=%" PRIuHSIZE "; max_xtent[%2d]=%" PRIuHSIZE "\n", i, offset[i], i,
+ max_xtent[i]);
}
#endif
for (i = ((int)rank) - 2; i >= 0; --i) {
@@ -762,7 +767,8 @@ H5S__mpio_reg_hyper_type(const H5S_t *space, size_t elmt_size, MPI_Datatype *new
max_xtent[i] = max_xtent[i + 1] * d[i].xtent;
#ifdef H5S_DEBUG
if (H5DEBUG(S))
- HDfprintf(H5DEBUG(S), " offset[%2d]=%Hu; max_xtent[%2d]=%Hu\n", i, offset[i], i, max_xtent[i]);
+ HDfprintf(H5DEBUG(S), " offset[%2d]=%" PRIuHSIZE "; max_xtent[%2d]=%" PRIuHSIZE "\n", i,
+ offset[i], i, max_xtent[i]);
#endif
} /* end for */
@@ -777,9 +783,9 @@ H5S__mpio_reg_hyper_type(const H5S_t *space, size_t elmt_size, MPI_Datatype *new
*******************************************************/
#ifdef H5S_DEBUG
if (H5DEBUG(S)) {
- HDfprintf(H5DEBUG(S), "%s: Making contig type %Zu MPI_BYTEs\n", FUNC, elmt_size);
+ HDfprintf(H5DEBUG(S), "%s: Making contig type %zu MPI_BYTEs\n", FUNC, elmt_size);
for (i = ((int)rank) - 1; i >= 0; --i)
- HDfprintf(H5DEBUG(S), "d[%d].xtent=%Hu \n", i, d[i].xtent);
+ HDfprintf(H5DEBUG(S), "d[%d].xtent=%" PRIuHSIZE "\n", i, d[i].xtent);
}
#endif
@@ -809,7 +815,8 @@ H5S__mpio_reg_hyper_type(const H5S_t *space, size_t elmt_size, MPI_Datatype *new
if (H5DEBUG(S))
HDfprintf(H5DEBUG(S),
"%s: Dimension i=%d \n"
- "start=%Hd count=%Hu block=%Hu stride=%Hu, xtent=%Hu max_xtent=%d\n",
+ "start=%" PRIdHSIZE " count=%" PRIuHSIZE " block=%" PRIuHSIZE " stride=%" PRIuHSIZE
+ ", xtent=%" PRIuHSIZE " max_xtent=%" PRIuHSIZE "\n",
FUNC, i, d[i].start, d[i].count, d[i].block, d[i].strid, d[i].xtent, max_xtent[i]);
#endif
@@ -950,7 +957,8 @@ done:
#ifdef H5S_DEBUG
if (H5DEBUG(S))
- HDfprintf(H5DEBUG(S), "Leave %s, count=%ld is_derived_type=%t\n", FUNC, *count, *is_derived_type);
+ HDfprintf(H5DEBUG(S), "Leave %s, count=%d is_derived_type=%s\n", FUNC, *count,
+ (*is_derived_type) ? "TRUE" : "FALSE");
#endif
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5S__mpio_reg_hyper_type() */
diff --git a/src/H5Snone.c b/src/H5Snone.c
index 4b03059..1909ff8 100644
--- a/src/H5Snone.c
+++ b/src/H5Snone.c
@@ -680,7 +680,7 @@ H5S__none_bounds(const H5S_t H5_ATTR_UNUSED *space, hsize_t H5_ATTR_UNUSED *star
HDassert(end);
FUNC_LEAVE_NOAPI(FAIL)
-} /* end H5S__none_bounds() */
+} /* end H5S_none_bounds() */
/*--------------------------------------------------------------------------
NAME
diff --git a/src/H5T.c b/src/H5T.c
index 0c75531..c145a04 100644
--- a/src/H5T.c
+++ b/src/H5T.c
@@ -5819,10 +5819,12 @@ H5T_set_loc(H5T_t *dt, H5VL_object_t *file, H5T_loc_t loc)
case H5T_VLEN: /* Recurse on the VL information if it's VL, compound or array, then free VL
sequence */
- /* Recurse if it's VL, compound, enum or array */
+ /* Recurse if it's VL, compound, enum or array (ignore references here so that we can encode
+ * them as part of the same blob)*/
/* (If the force_conv flag is _not_ set, the type cannot change in size, so don't recurse) */
if (dt->shared->parent->shared->force_conv &&
- H5T_IS_COMPLEX(dt->shared->parent->shared->type)) {
+ H5T_IS_COMPLEX(dt->shared->parent->shared->type) &&
+ (dt->shared->parent->shared->type != H5T_REFERENCE)) {
if ((changed = H5T_set_loc(dt->shared->parent, file, loc)) < 0)
HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "Unable to set VL location");
if (changed > 0)
diff --git a/src/H5Tcommit.c b/src/H5Tcommit.c
index 08948b2..3eecfb3 100644
--- a/src/H5Tcommit.c
+++ b/src/H5Tcommit.c
@@ -84,7 +84,10 @@ H5FL_EXTERN(H5VL_object_t);
* Purpose: Save a transient datatype to a file and turn the type handle
* into a "named", immutable type.
*
- * Return: SUCCEED/FAIL
+ * Return: Non-negative on success/Negative on failure
+ *
+ * Programmer: Quincey Koziol
+ * April 5, 2007
*
*-------------------------------------------------------------------------
*/
@@ -248,7 +251,10 @@ done:
* Note: The datatype access property list is unused currently, but
* is checked for sanity anyway.
*
- * Return: SUCCEED/FAIL
+ * Return: Non-negative on success/Negative on failure
+ *
+ * Programmer: Peter Cao
+ * May 17, 2005
*
*-------------------------------------------------------------------------
*/
@@ -479,7 +485,10 @@ done:
*
* Purpose: Determines if a datatype is committed or not.
*
- * Return: TRUE/FALSE/FAIL
+ * Return: TRUE/FALSE/Negative
+ *
+ * Programmer: Robb Matzke
+ * Thursday, June 4, 1998
*
*-------------------------------------------------------------------------
*/
@@ -510,7 +519,7 @@ done:
* ADJUST to the link count.
*
* Return: Success: New link count
- * Failure: Negative
+ * Failure: -1
*
* Programmer: Quincey Koziol
* Friday, September 26, 2003
@@ -545,6 +554,9 @@ done:
*
* Failure: H5I_INVALID_HID
*
+ * Programmer: James Laird
+ * Thursday July 27, 2006
+ *
*-------------------------------------------------------------------------
*/
hid_t
@@ -608,6 +620,9 @@ done:
*
* Failure: H5I_INVALID_HID
*
+ * Programmer: Quincey Koziol
+ * Tuesday, November 28, 2006
+ *
*-------------------------------------------------------------------------
*/
hid_t
diff --git a/src/H5Tconv.c b/src/H5Tconv.c
index 01f6b41..d8e4759 100644
--- a/src/H5Tconv.c
+++ b/src/H5Tconv.c
@@ -983,14 +983,12 @@ done:
#define CI_PRINT_STATS(STYPE, DTYPE) \
{ \
if (H5DEBUG(T) && ((H5T_conv_hw_t *)cdata->priv)->s_aligned) { \
- HDfprintf(H5DEBUG(T), " %Hu src elements aligned on %lu-byte boundaries\n", \
- ((H5T_conv_hw_t *)cdata->priv)->s_aligned, \
- (unsigned long)H5T_NATIVE_##STYPE##_ALIGN_g); \
+ HDfprintf(H5DEBUG(T), " %zu src elements aligned on %zu-byte boundaries\n", \
+ ((H5T_conv_hw_t *)cdata->priv)->s_aligned, H5T_NATIVE_##STYPE##_ALIGN_g); \
} \
if (H5DEBUG(T) && ((H5T_conv_hw_t *)cdata->priv)->d_aligned) { \
- HDfprintf(H5DEBUG(T), " %Hu dst elements aligned on %lu-byte boundaries\n", \
- ((H5T_conv_hw_t *)cdata->priv)->d_aligned, \
- (unsigned long)H5T_NATIVE_##DTYPE##_ALIGN_g); \
+ HDfprintf(H5DEBUG(T), " %zu dst elements aligned on %zu-byte boundaries\n", \
+ ((H5T_conv_hw_t *)cdata->priv)->d_aligned, H5T_NATIVE_##DTYPE##_ALIGN_g); \
} \
}
diff --git a/src/H5Tdbg.c b/src/H5Tdbg.c
index 9dae22d..5d0c5cd 100644
--- a/src/H5Tdbg.c
+++ b/src/H5Tdbg.c
@@ -91,6 +91,13 @@ H5T__print_stats(H5T_path_t H5_ATTR_UNUSED *path, int H5_ATTR_UNUSED *nprint /*i
if (H5DEBUG(T) && path->stats.ncalls > 0) {
hsize_t nbytes;
char bandwidth[32];
+ struct {
+ char *user;
+ char *system;
+ char *elapsed;
+ } timestrs = {H5_timer_get_time_string(path->stats.times.user),
+ H5_timer_get_time_string(path->stats.times.system),
+ H5_timer_get_time_string(path->stats.times.elapsed)};
if (nprint && 0 == (*nprint)++) {
HDfprintf(H5DEBUG(T), "H5T: type conversion statistics:\n");
@@ -108,13 +115,15 @@ H5T__print_stats(H5T_path_t H5_ATTR_UNUSED *path, int H5_ATTR_UNUSED *nprint /*i
nbytes = H5T_get_size(path->dst);
else
nbytes = 0;
-
nbytes *= path->stats.nelmts;
H5_bandwidth(bandwidth, (double)nbytes, path->stats.times.elapsed);
- HDfprintf(H5DEBUG(T), " %-16s %10Hd %10d %8T %8T %8T %10s\n", path->name, path->stats.nelmts,
- path->stats.ncalls, path->stats.times.user, path->stats.times.system,
- path->stats.times.elapsed, bandwidth);
- } /* end if */
+ HDfprintf(H5DEBUG(T), " %-16s %10" PRIdHSIZE " %10u %8s %8s %8s %10s\n", path->name,
+ path->stats.nelmts, path->stats.ncalls, timestrs.user, timestrs.system, timestrs.elapsed,
+ bandwidth);
+ free(timestrs.user);
+ free(timestrs.system);
+ free(timestrs.elapsed);
+ }
#endif
FUNC_LEAVE_NOAPI(SUCCEED)
@@ -394,7 +403,8 @@ H5T_debug(const H5T_t *dt, FILE *stream)
HDfprintf(stream, "\n\"%s\" = 0x", dt->shared->u.enumer.name[i]);
for (k = 0; k < base_size; k++)
- HDfprintf(stream, "%02p", ((uint8_t *)dt->shared->u.enumer.value + (i * base_size) + k));
+ HDfprintf(stream, "%02" PRIx8,
+ *((uint8_t *)dt->shared->u.enumer.value + (i * base_size) + k));
} /* end for */
HDfprintf(stream, "\n");
}
diff --git a/src/H5Tpkg.h b/src/H5Tpkg.h
index 4a57ac2..0261428 100644
--- a/src/H5Tpkg.h
+++ b/src/H5Tpkg.h
@@ -49,7 +49,8 @@
#define H5T_NAMELEN 32
/* Macro to ease detecting "complex" datatypes (i.e. those with base types or fields) */
-#define H5T_IS_COMPLEX(t) ((t) == H5T_COMPOUND || (t) == H5T_ENUM || (t) == H5T_VLEN || (t) == H5T_ARRAY)
+#define H5T_IS_COMPLEX(t) \
+ ((t) == H5T_COMPOUND || (t) == H5T_ENUM || (t) == H5T_VLEN || (t) == H5T_ARRAY || (t) == H5T_REFERENCE)
/* Macro to ease detecting fixed "string" datatypes */
#define H5T_IS_FIXED_STRING(dt) (H5T_STRING == (dt)->type)
diff --git a/src/H5Tprivate.h b/src/H5Tprivate.h
index 25c8cea..4675871 100644
--- a/src/H5Tprivate.h
+++ b/src/H5Tprivate.h
@@ -56,10 +56,7 @@ typedef struct H5T_path_t H5T_path_t;
struct H5S_t;
/* How to copy a datatype */
-typedef enum H5T_copy_t {
- H5T_COPY_TRANSIENT,
- H5T_COPY_ALL,
-} H5T_copy_t;
+typedef enum H5T_copy_t { H5T_COPY_TRANSIENT, H5T_COPY_ALL } H5T_copy_t;
/* Location of datatype information */
typedef enum {
diff --git a/src/H5Tref.c b/src/H5Tref.c
index 7fb6c0e..7092a71 100644
--- a/src/H5Tref.c
+++ b/src/H5Tref.c
@@ -40,6 +40,22 @@
#define H5T_REF_OBJ_DISK_SIZE(f) (H5F_SIZEOF_ADDR(f))
#define H5T_REF_DSETREG_DISK_SIZE(f) (H5HG_HEAP_ID_SIZE(f))
+/* Debug */
+// #define H5T_REF_DEBUG
+#ifdef H5T_REF_DEBUG
+#define H5T_REF_LOG_DEBUG(...) \
+ do { \
+ HDfprintf(stdout, " # %s(): ", __func__); \
+ HDfprintf(stdout, __VA_ARGS__); \
+ HDfprintf(stdout, "\n"); \
+ HDfflush(stdout); \
+ } while (0)
+#else
+#define H5T_REF_LOG_DEBUG(...) \
+ do { \
+ } while (0)
+#endif
+
/******************/
/* Local Typedefs */
/******************/
@@ -145,6 +161,7 @@ H5T__ref_set_loc(const H5T_t *dt, H5VL_object_t *file, H5T_loc_t loc)
htri_t ret_value = FALSE; /* Indicate success, but no location change */
FUNC_ENTER_PACKAGE
+ H5T_REF_LOG_DEBUG("loc=%d", (int)loc);
HDassert(dt);
/* f is NULL when loc == H5T_LOC_MEMORY */
@@ -331,6 +348,7 @@ H5T__ref_mem_isnull(const H5VL_object_t H5_ATTR_UNUSED *src_file, const void *sr
herr_t ret_value = SUCCEED;
FUNC_ENTER_STATIC_NOERR
+ H5T_REF_LOG_DEBUG("");
/* Check parameters */
HDassert(src_buf);
@@ -356,6 +374,7 @@ H5T__ref_mem_setnull(H5VL_object_t H5_ATTR_UNUSED *dst_file, void *dst_buf, H5_A
herr_t ret_value = SUCCEED;
FUNC_ENTER_STATIC_NOERR
+ H5T_REF_LOG_DEBUG("");
HDmemset(dst_buf, 0, H5T_REF_MEM_SIZE);
@@ -383,6 +402,7 @@ H5T__ref_mem_getsize(H5VL_object_t H5_ATTR_UNUSED *src_file, const void *src_buf
size_t ret_value = 0; /* Return value */
FUNC_ENTER_STATIC
+ H5T_REF_LOG_DEBUG("");
/* Sanity check */
HDassert(src_buf);
@@ -483,6 +503,7 @@ H5T__ref_mem_read(H5VL_object_t H5_ATTR_UNUSED *src_file, const void *src_buf, s
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_STATIC
+ H5T_REF_LOG_DEBUG("");
/* Sanity check */
HDassert(src_buf);
@@ -571,6 +592,7 @@ H5T__ref_mem_write(H5VL_object_t *src_file, const void *src_buf, size_t src_size
herr_t ret_value = SUCCEED;
FUNC_ENTER_STATIC
+ H5T_REF_LOG_DEBUG("");
/* Sanity check */
HDassert(src_buf);
@@ -678,6 +700,7 @@ H5T__ref_disk_isnull(const H5VL_object_t *src_file, const void *src_buf, hbool_t
herr_t ret_value = SUCCEED;
FUNC_ENTER_STATIC
+ H5T_REF_LOG_DEBUG("");
/* Check parameters */
HDassert(src_file);
@@ -720,6 +743,7 @@ H5T__ref_disk_setnull(H5VL_object_t *dst_file, void *dst_buf, void *bg_buf)
herr_t ret_value = SUCCEED;
FUNC_ENTER_STATIC
+ H5T_REF_LOG_DEBUG("");
HDassert(dst_file);
HDassert(dst_buf);
@@ -768,6 +792,7 @@ H5T__ref_disk_getsize(H5VL_object_t H5_ATTR_UNUSED *src_file, const void *src_bu
size_t ret_value = 0;
FUNC_ENTER_STATIC
+ H5T_REF_LOG_DEBUG("");
HDassert(src_buf);
@@ -816,6 +841,7 @@ H5T__ref_disk_read(H5VL_object_t *src_file, const void *src_buf, size_t H5_ATTR_
herr_t ret_value = SUCCEED;
FUNC_ENTER_STATIC
+ H5T_REF_LOG_DEBUG("");
HDassert(src_file);
HDassert(src_buf);
@@ -861,6 +887,7 @@ H5T__ref_disk_write(H5VL_object_t H5_ATTR_UNUSED *src_file, const void *src_buf,
herr_t ret_value = SUCCEED;
FUNC_ENTER_STATIC
+ H5T_REF_LOG_DEBUG("");
HDassert(src_buf);
HDassert(src_size);
@@ -919,6 +946,7 @@ H5T__ref_obj_disk_isnull(const H5VL_object_t *src_file, const void *src_buf, hbo
herr_t ret_value = SUCCEED;
FUNC_ENTER_STATIC
+ H5T_REF_LOG_DEBUG("");
/* Check parameters */
HDassert(src_file);
@@ -970,6 +998,7 @@ H5T__ref_obj_disk_getsize(H5VL_object_t *src_file, const void H5_ATTR_UNUSED *sr
size_t ret_value = 0;
FUNC_ENTER_STATIC
+ H5T_REF_LOG_DEBUG("");
HDassert(src_file);
HDassert(src_buf);
@@ -1016,6 +1045,7 @@ H5T__ref_obj_disk_read(H5VL_object_t *src_file, const void *src_buf, size_t src_
herr_t ret_value = SUCCEED;
FUNC_ENTER_STATIC
+ H5T_REF_LOG_DEBUG("");
HDassert(src_file);
HDassert(src_buf);
@@ -1068,6 +1098,7 @@ H5T__ref_dsetreg_disk_isnull(const H5VL_object_t *src_file, const void *src_buf,
herr_t ret_value = SUCCEED;
FUNC_ENTER_STATIC
+ H5T_REF_LOG_DEBUG("");
/* Check parameters */
HDassert(src_file);
@@ -1122,6 +1153,7 @@ H5T__ref_dsetreg_disk_getsize(H5VL_object_t H5_ATTR_UNUSED *src_file, const void
#else
FUNC_ENTER_STATIC_NOERR
#endif
+ H5T_REF_LOG_DEBUG("");
HDassert(src_buf);
@@ -1170,6 +1202,7 @@ H5T__ref_dsetreg_disk_read(H5VL_object_t *src_file, const void *src_buf, size_t
herr_t ret_value = SUCCEED;
FUNC_ENTER_STATIC
+ H5T_REF_LOG_DEBUG("");
HDassert(src_file);
HDassert(src_buf);
@@ -1219,6 +1252,7 @@ H5T__ref_reclaim(void *elem, const H5T_t *dt)
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_PACKAGE
+ H5T_REF_LOG_DEBUG("");
/* Sanity checks */
HDassert(elem);
diff --git a/src/H5VLint.c b/src/H5VLint.c
index b1c690a..cc5b8b7 100644
--- a/src/H5VLint.c
+++ b/src/H5VLint.c
@@ -2315,24 +2315,26 @@ H5VL_wrap_register(H5I_type_t type, void *obj, hbool_t app_ref)
/* Sanity check */
HDassert(obj);
+ /* Retrieve the VOL object wrapping context */
+ if (H5CX_get_vol_wrap_ctx((void **)&vol_wrap_ctx) < 0)
+ HGOTO_ERROR(H5E_VOL, H5E_CANTGET, H5I_INVALID_HID, "can't get VOL object wrap context")
+ if (NULL == vol_wrap_ctx || NULL == vol_wrap_ctx->connector)
+ HGOTO_ERROR(H5E_VOL, H5E_BADVALUE, H5I_INVALID_HID,
+ "VOL object wrap context or its connector is NULL???")
+
/* If the datatype is already VOL-managed, the datatype's vol_obj
* field will get clobbered later, so disallow this.
*/
- if (type == H5I_DATATYPE)
- if (TRUE == H5T_already_vol_managed((const H5T_t *)obj))
- HGOTO_ERROR(H5E_VOL, H5E_BADTYPE, H5I_INVALID_HID, "can't wrap an uncommitted datatype")
+ if (type == H5I_DATATYPE) {
+ if (vol_wrap_ctx->connector->id == H5VL_NATIVE)
+ if (TRUE == H5T_already_vol_managed((const H5T_t *)obj))
+ HGOTO_ERROR(H5E_VOL, H5E_BADTYPE, H5I_INVALID_HID, "can't wrap an uncommitted datatype")
+ }
/* Wrap the object with VOL connector info */
if (NULL == (new_obj = H5VL__wrap_obj(obj, type)))
HGOTO_ERROR(H5E_VOL, H5E_CANTCREATE, H5I_INVALID_HID, "can't wrap library object")
- /* Retrieve the VOL object wrapping context */
- if (H5CX_get_vol_wrap_ctx((void **)&vol_wrap_ctx) < 0)
- HGOTO_ERROR(H5E_VOL, H5E_CANTGET, H5I_INVALID_HID, "can't get VOL object wrap context")
- if (NULL == vol_wrap_ctx || NULL == vol_wrap_ctx->connector)
- HGOTO_ERROR(H5E_VOL, H5E_BADVALUE, H5I_INVALID_HID,
- "VOL object wrap context or its connector is NULL???")
-
/* Get an ID for the object */
if ((ret_value = H5VL_register_using_vol_id(type, new_obj, vol_wrap_ctx->connector->id, app_ref)) < 0)
HGOTO_ERROR(H5E_VOL, H5E_CANTREGISTER, H5I_INVALID_HID, "unable to get an ID for the object")
diff --git a/src/H5Z.c b/src/H5Z.c
index f731c27..8f9a050 100644
--- a/src/H5Z.c
+++ b/src/H5Z.c
@@ -137,8 +137,15 @@ H5Z_term_package(void)
if (H5DEBUG(Z)) {
for (i = 0; i < H5Z_table_used_g; i++) {
for (dir = 0; dir < 2; dir++) {
+ struct {
+ char *user;
+ char *system;
+ char *elapsed;
+ } timestrs = {H5_timer_get_time_string(H5Z_stat_table_g[i].stats[dir].times.user),
+ H5_timer_get_time_string(H5Z_stat_table_g[i].stats[dir].times.system),
+ H5_timer_get_time_string(H5Z_stat_table_g[i].stats[dir].times.elapsed)};
if (0 == H5Z_stat_table_g[i].stats[dir].total)
- continue;
+ goto next;
if (0 == nprint++) {
/* Print column headers */
@@ -163,12 +170,14 @@ H5Z_term_package(void)
H5Z_stat_table_g[i].stats[dir].times.elapsed);
/* Print the statistics */
- HDfprintf(H5DEBUG(Z), " %s%-15s %10Hd %10Hd %8T %8T %8T %10s\n", (dir ? "<" : ">"),
- comment, H5Z_stat_table_g[i].stats[dir].total,
- H5Z_stat_table_g[i].stats[dir].errors,
- H5Z_stat_table_g[i].stats[dir].times.user,
- H5Z_stat_table_g[i].stats[dir].times.system,
- H5Z_stat_table_g[i].stats[dir].times.elapsed, bandwidth);
+ HDfprintf(H5DEBUG(Z), " %s%-15s %10" PRIdHSIZE " %10" PRIdHSIZE " %8s %8s %8s %10s\n",
+ (dir ? "<" : ">"), comment, H5Z_stat_table_g[i].stats[dir].total,
+ H5Z_stat_table_g[i].stats[dir].errors, timestrs.user, timestrs.system,
+ timestrs.elapsed, bandwidth);
+next:
+ free(timestrs.user);
+ free(timestrs.system);
+ free(timestrs.elapsed);
} /* end for */
} /* end for */
} /* end if */
@@ -334,8 +343,8 @@ done:
*
* Purpose: This function unregisters a filter.
*
- * Return: SUCCEED/FAIL
- *
+ * Return: Non-negative on success
+ * Negative on failure
*-------------------------------------------------------------------------
*/
herr_t
diff --git a/src/H5dbg.c b/src/H5dbg.c
index fe4e757..1b64d2c 100644
--- a/src/H5dbg.c
+++ b/src/H5dbg.c
@@ -13,11 +13,11 @@
/*-------------------------------------------------------------------------
*
- * Created: H5dbg.c
- * Mar 4 2006
- * Quincey Koziol
+ * Created: H5dbg.c
+ * Mar 4 2006
+ * Quincey Koziol
*
- * Purpose: Generic debugging routines
+ * Purpose: Generic debugging routines
*
*-------------------------------------------------------------------------
*/
@@ -29,7 +29,7 @@
/***********/
/* Headers */
/***********/
-#include "H5private.h" /* Generic Functions */
+#include "H5private.h" /* Generic Functions */
/****************/
/* Local Macros */
@@ -56,14 +56,14 @@
/*******************/
/*-------------------------------------------------------------------------
- * Function: H5_buffer_dump
+ * Function: H5_buffer_dump
*
- * Purpose: Dumps a buffer of memory in an octal dump form
+ * Purpose: Dumps a buffer of memory in an octal dump form
*
- * Return: Non-negative on success/Negative on failure
+ * Return: Non-negative on success/Negative on failure
*
- * Programmer: Quincey Koziol
- * Mar 4 2006
+ * Programmer: Quincey Koziol
+ * Mar 4 2006
*
*-------------------------------------------------------------------------
*/
@@ -91,7 +91,7 @@ H5_buffer_dump(FILE *stream, int indent, const uint8_t *buf, const uint8_t *mark
for (u = 0; u < buf_size; u += 16) {
uint8_t c;
- HDfprintf(stream, "%*s %8d: ", indent, "", u + buf_offset);
+ HDfprintf(stream, "%*s %8zu: ", indent, "", u + buf_offset);
/* Print the hex values */
for (v = 0; v < 16; v++) {
@@ -105,6 +105,7 @@ H5_buffer_dump(FILE *stream, int indent, const uint8_t *buf, const uint8_t *mark
} /* end if */
else
HDfprintf(stream, " ");
+
if (7 == v)
HDfputc(' ', stream);
} /* end for */
@@ -117,12 +118,14 @@ H5_buffer_dump(FILE *stream, int indent, const uint8_t *buf, const uint8_t *mark
HDfputc(' ', stream);
else {
c = buf[buf_offset + u + v];
+
if (HDisprint(c))
HDfputc(c, stream);
else
HDfputc('.', stream);
} /* end else */
} /* end if */
+
if (7 == v)
HDfputc(' ', stream);
} /* end for */
diff --git a/src/H5private.h b/src/H5private.h
index 650604b..ca005f6 100644
--- a/src/H5private.h
+++ b/src/H5private.h
@@ -685,6 +685,11 @@ typedef struct {
#ifndef HDacos
#define HDacos(X) acos(X)
#endif /* HDacos */
+#ifndef HDvasprintf
+#ifdef H5_HAVE_VASPRINTF
+#define HDvasprintf(RET, FMT, A) vasprintf(RET, FMT, A)
+#endif /* H5_HAVE_VASPRINTF */
+#endif /* HDvasprintf */
#ifndef HDalarm
#ifdef H5_HAVE_ALARM
#define HDalarm(N) alarm(N)
@@ -886,8 +891,8 @@ H5_DLL H5_ATTR_CONST int Nflock(int fd, int operation);
#ifndef HDflock
/* NOTE: flock(2) is not present on all POSIX systems.
* If it is not present, we try a flock() equivalent based on
- * fcntl(2), then fall back to a function that always fails if
- * it is not present at all (Windows uses a separate Wflock()
+ * fcntl(2), then fall back to a function that always succeeds
+ * if it is not present at all (Windows uses a separate Wflock()
* function).
*/
#if defined(H5_HAVE_FLOCK)
@@ -910,10 +915,12 @@ H5_DLL H5_ATTR_CONST int Nflock(int fd, int operation);
#ifndef HDfork
#define HDfork() fork()
#endif /* HDfork */
+#ifndef HDfprintf
+#define HDfprintf fprintf
+#endif
#ifndef HDfpathconf
#define HDfpathconf(F, N) fpathconf(F, N)
#endif /* HDfpathconf */
-H5_DLL int HDfprintf(FILE *stream, const char *fmt, ...);
#ifndef HDfputc
#define HDfputc(C, F) fputc(C, F)
#endif /* HDfputc */
@@ -1246,7 +1253,7 @@ typedef off_t h5_stat_size_t;
#define HDpread(F, B, C, O) pread(F, B, C, O)
#endif /* HDpread */
#ifndef HDprintf
-#define HDprintf(...) HDfprintf(stdout, __VA_ARGS__)
+#define HDprintf printf
#endif /* HDprintf */
#ifndef HDputc
#define HDputc(C, F) putc(C, F)
@@ -1611,9 +1618,6 @@ H5_DLL int64_t HDstrtoll(const char *s, const char **rest, int base);
#ifndef HDva_start
#define HDva_start(A, P) va_start(A, P)
#endif /* HDva_start */
-#ifndef HDvasprintf
-#define HDvasprintf(RET, FMT, A) vasprintf(RET, FMT, A)
-#endif /* HDvasprintf */
#ifndef HDvfprintf
#define HDvfprintf(F, FMT, A) vfprintf(F, FMT, A)
#endif /* HDvfprintf */
diff --git a/src/H5public.h b/src/H5public.h
index fedefcc..2de4459 100644
--- a/src/H5public.h
+++ b/src/H5public.h
@@ -171,59 +171,118 @@ typedef long long ssize_t;
#endif
#endif
+/* int64_t type is used for creation order field for links. It may be
+ * defined in Posix.1g, otherwise it is defined here.
+ */
+#if H5_SIZEOF_INT64_T >= 8
+#elif H5_SIZEOF_INT >= 8
+typedef int int64_t;
+#undef H5_SIZEOF_INT64_T
+#define H5_SIZEOF_INT64_T H5_SIZEOF_INT
+#elif H5_SIZEOF_LONG >= 8
+typedef long int64_t;
+#undef H5_SIZEOF_INT64_T
+#define H5_SIZEOF_INT64_T H5_SIZEOF_LONG
+#elif H5_SIZEOF_LONG_LONG >= 8
+typedef long long int64_t;
+#undef H5_SIZEOF_INT64_T
+#define H5_SIZEOF_INT64_T H5_SIZEOF_LONG_LONG
+#else
+#error "nothing appropriate for int64_t"
+#endif
+
+/* uint64_t type is used for fields for H5O_info_t. It may be
+ * defined in Posix.1g, otherwise it is defined here.
+ */
+#if H5_SIZEOF_UINT64_T >= 8
+#ifndef UINT64_MAX
+#define UINT64_MAX ((uint64_t)-1)
+#endif
+#elif H5_SIZEOF_INT >= 8
+typedef unsigned uint64_t;
+#define UINT64_MAX UINT_MAX
+#undef H5_SIZEOF_UINT64_T
+#define H5_SIZEOF_UINT64_T H5_SIZEOF_INT
+#elif H5_SIZEOF_LONG >= 8
+typedef unsigned long uint64_t;
+#define UINT64_MAX ULONG_MAX
+#undef H5_SIZEOF_UINT64_T
+#define H5_SIZEOF_UINT64_T H5_SIZEOF_LONG
+#elif H5_SIZEOF_LONG_LONG >= 8
+typedef unsigned long long uint64_t;
+#define UINT64_MAX ULLONG_MAX
+#undef H5_SIZEOF_UINT64_T
+#define H5_SIZEOF_UINT64_T H5_SIZEOF_LONG_LONG
+#else
+#error "nothing appropriate for uint64_t"
+#endif
+
/*
- * The sizes of file objects have their own types defined here, use a 64-bit
- * type.
+ * The sizes of file objects have their own types defined here, use a minimum
+ * 64-bit type.
*/
#if H5_SIZEOF_LONG_LONG >= 8
H5_GCC_DIAG_OFF("long-long")
typedef unsigned long long hsize_t;
typedef signed long long hssize_t;
H5_GCC_DIAG_ON("long-long")
+#define PRIdHSIZE H5_PRINTF_LL_WIDTH "d"
+#define PRIiHSIZE H5_PRINTF_LL_WIDTH "i"
+#define PRIoHSIZE H5_PRINTF_LL_WIDTH "o"
+#define PRIuHSIZE H5_PRINTF_LL_WIDTH "u"
+#define PRIxHSIZE H5_PRINTF_LL_WIDTH "x"
+#define PRIXHSIZE H5_PRINTF_LL_WIDTH "X"
#define H5_SIZEOF_HSIZE_T H5_SIZEOF_LONG_LONG
#define H5_SIZEOF_HSSIZE_T H5_SIZEOF_LONG_LONG
+#define HSIZE_UNDEF ULLONG_MAX
#else
#error "nothing appropriate for hsize_t"
#endif
-#define HSIZE_UNDEF ((hsize_t)(hssize_t)(-1))
/*
* File addresses have their own types.
*/
#if H5_SIZEOF_INT >= 8
typedef unsigned haddr_t;
-#define HADDR_UNDEF ((haddr_t)(-1))
+#define HADDR_UNDEF UINT_MAX
#define H5_SIZEOF_HADDR_T H5_SIZEOF_INT
#ifdef H5_HAVE_PARALLEL
#define HADDR_AS_MPI_TYPE MPI_UNSIGNED
#endif /* H5_HAVE_PARALLEL */
+#define PRIdHADDR "d"
+#define PRIoHADDR "o"
+#define PRIuHADDR "u"
+#define PRIxHADDR "x"
+#define PRIXHADDR "X"
#elif H5_SIZEOF_LONG >= 8
typedef unsigned long haddr_t;
-#define HADDR_UNDEF ((haddr_t)(long)(-1))
+#define HADDR_UNDEF ULONG_MAX
#define H5_SIZEOF_HADDR_T H5_SIZEOF_LONG
#ifdef H5_HAVE_PARALLEL
#define HADDR_AS_MPI_TYPE MPI_UNSIGNED_LONG
#endif /* H5_HAVE_PARALLEL */
+#define PRIdHADDR "ld"
+#define PRIoHADDR "lo"
+#define PRIuHADDR "lu"
+#define PRIxHADDR "lx"
+#define PRIXHADDR "lX"
#elif H5_SIZEOF_LONG_LONG >= 8
typedef unsigned long long haddr_t;
-#define HADDR_UNDEF ((haddr_t)(long long)(-1))
+#define HADDR_UNDEF ULLONG_MAX
#define H5_SIZEOF_HADDR_T H5_SIZEOF_LONG_LONG
#ifdef H5_HAVE_PARALLEL
#define HADDR_AS_MPI_TYPE MPI_LONG_LONG_INT
#endif /* H5_HAVE_PARALLEL */
+#define PRIdHADDR H5_PRINTF_LL_WIDTH "d"
+#define PRIoHADDR H5_PRINTF_LL_WIDTH "o"
+#define PRIuHADDR H5_PRINTF_LL_WIDTH "u"
+#define PRIxHADDR H5_PRINTF_LL_WIDTH "x"
+#define PRIXHADDR H5_PRINTF_LL_WIDTH "X"
#else
#error "nothing appropriate for haddr_t"
#endif
-#if H5_SIZEOF_HADDR_T == H5_SIZEOF_INT
-#define H5_PRINTF_HADDR_FMT "%u"
-#elif H5_SIZEOF_HADDR_T == H5_SIZEOF_LONG
-#define H5_PRINTF_HADDR_FMT "%lu"
-#elif H5_SIZEOF_HADDR_T == H5_SIZEOF_LONG_LONG
-#define H5_PRINTF_HADDR_FMT "%" H5_PRINTF_LL_WIDTH "u"
-#else
-#error "nothing appropriate for H5_PRINTF_HADDR_FMT"
-#endif
-#define HADDR_MAX (HADDR_UNDEF - 1)
+#define H5_PRINTF_HADDR_FMT "%" PRIuHADDR
+#define HADDR_MAX (HADDR_UNDEF - 1)
/* uint32_t type is used for creation order field for messages. It may be
* defined in Posix.1g, otherwise it is defined here.
@@ -245,46 +304,6 @@ typedef unsigned long uint32_t;
#error "nothing appropriate for uint32_t"
#endif
-/* int64_t type is used for creation order field for links. It may be
- * defined in Posix.1g, otherwise it is defined here.
- */
-#if H5_SIZEOF_INT64_T >= 8
-#elif H5_SIZEOF_INT >= 8
-typedef int int64_t;
-#undef H5_SIZEOF_INT64_T
-#define H5_SIZEOF_INT64_T H5_SIZEOF_INT
-#elif H5_SIZEOF_LONG >= 8
-typedef long int64_t;
-#undef H5_SIZEOF_INT64_T
-#define H5_SIZEOF_INT64_T H5_SIZEOF_LONG
-#elif H5_SIZEOF_LONG_LONG >= 8
-typedef long long int64_t;
-#undef H5_SIZEOF_INT64_T
-#define H5_SIZEOF_INT64_T H5_SIZEOF_LONG_LONG
-#else
-#error "nothing appropriate for int64_t"
-#endif
-
-/* uint64_t type is used for fields for H5O_info_t. It may be
- * defined in Posix.1g, otherwise it is defined here.
- */
-#if H5_SIZEOF_UINT64_T >= 8
-#elif H5_SIZEOF_INT >= 8
-typedef unsigned uint64_t;
-#undef H5_SIZEOF_UINT64_T
-#define H5_SIZEOF_UINT64_T H5_SIZEOF_INT
-#elif H5_SIZEOF_LONG >= 8
-typedef unsigned long uint64_t;
-#undef H5_SIZEOF_UINT64_T
-#define H5_SIZEOF_UINT64_T H5_SIZEOF_LONG
-#elif H5_SIZEOF_LONG_LONG >= 8
-typedef unsigned long long uint64_t;
-#undef H5_SIZEOF_UINT64_T
-#define H5_SIZEOF_UINT64_T H5_SIZEOF_LONG_LONG
-#else
-#error "nothing appropriate for uint64_t"
-#endif
-
/* Common iteration orders */
typedef enum {
H5_ITER_UNKNOWN = -1, /* Unknown order */
diff --git a/src/H5system.c b/src/H5system.c
index 40a91c7..b2a2668 100644
--- a/src/H5system.c
+++ b/src/H5system.c
@@ -65,406 +65,35 @@
/* Track whether tzset routine was called */
static hbool_t H5_ntzset = FALSE;
-/*-------------------------------------------------------------------------
- * Function: HDfprintf
- *
- * Purpose: Prints the optional arguments under the control of the format
- * string FMT to the stream STREAM. This function takes the
- * same format as fprintf(3c) with a few added features:
- *
- * The conversion modifier `H' refers to the size of an
- * `hsize_t' or `hssize_t' type. For instance, "0x%018Hx"
- * prints an `hsize_t' value as a hex number right justified and
- * zero filled in an 18-character field.
- *
- * The conversion 'a' refers to an haddr_t type.
- *
- * The conversion 't' refers to an htri_t type.
- *
- * The conversion 'k' refers to an H5O_token_t type.
- *
- * Return: Success: Number of characters printed
- *
- * Failure: -1
- *
- * Programmer: Robb Matzke
- * Thursday, April 9, 1998
- *
- *-------------------------------------------------------------------------
- */
-/* Disable warning for "format not a string literal" here -QAK */
-/*
- * This pragma only needs to surround the fprintf() calls with
- * format_templ in the code below, but early (4.4.7, at least) gcc only
- * allows diagnostic pragmas to be toggled outside of functions.
+#ifndef HDvasprintf
+/* HDvasprintf provides vasprintf-like function on targets where it is
+ * unavailable.
*/
-H5_GCC_DIAG_OFF("format-nonliteral")
int
-HDfprintf(FILE *stream, const char *fmt, ...)
+HDvasprintf(char **bufp, const char *fmt, va_list _ap)
{
- int n = 0, nout = 0;
- int fwidth, prec;
- int zerofill;
- int leftjust;
- int plussign;
- int ldspace;
- int prefix;
- char modifier[8];
- int conv;
- char * rest, format_templ[128];
- int len;
- const char *s;
- va_list ap;
-
- HDassert(stream);
- HDassert(fmt);
-
- HDva_start(ap, fmt);
- while (*fmt) {
- fwidth = prec = 0;
- zerofill = 0;
- leftjust = 0;
- plussign = 0;
- prefix = 0;
- ldspace = 0;
- modifier[0] = '\0';
-
- if ('%' == fmt[0] && '%' == fmt[1]) {
- HDputc('%', stream);
- fmt += 2;
- nout++;
- }
- else if ('%' == fmt[0]) {
- s = fmt + 1;
-
- /* Flags */
- while (HDstrchr("-+ #", *s)) {
- switch (*s) {
- case '-':
- leftjust = 1;
- break;
-
- case '+':
- plussign = 1;
- break;
-
- case ' ':
- ldspace = 1;
- break;
-
- case '#':
- prefix = 1;
- break;
-
- default:
- HDassert(0 && "Unknown format flag");
- } /* end switch */ /*lint !e744 Switch statement doesn't _need_ default */
- s++;
- } /* end while */
-
- /* Field width */
- if (HDisdigit(*s)) {
- zerofill = ('0' == *s);
- fwidth = (int)HDstrtol(s, &rest, 10);
- s = rest;
- } /* end if */
- else if ('*' == *s) {
- fwidth = HDva_arg(ap, int);
- if (fwidth < 0) {
- leftjust = 1;
- fwidth = -fwidth;
- }
- s++;
- }
-
- /* Precision */
- if ('.' == *s) {
- s++;
- if (HDisdigit(*s)) {
- prec = (int)HDstrtol(s, &rest, 10);
- s = rest;
- }
- else if ('*' == *s) {
- prec = HDva_arg(ap, int);
- s++;
- }
- if (prec < 1)
- prec = 1;
- }
-
- /* Extra type modifiers */
- if (HDstrchr("zZHhlqLI", *s)) {
- switch (*s) {
- /*lint --e{506} Don't issue warnings about constant value booleans */
- /*lint --e{774} Don't issue warnings boolean within 'if' always evaluates false/true */
- case 'H':
- if (sizeof(hsize_t) < sizeof(long))
- modifier[0] = '\0';
- else if (sizeof(hsize_t) == sizeof(long)) {
- HDstrncpy(modifier, "l", sizeof(modifier));
- modifier[sizeof(modifier) - 1] = '\0';
- } /* end if */
- else {
- HDstrncpy(modifier, H5_PRINTF_LL_WIDTH, sizeof(modifier));
- modifier[sizeof(modifier) - 1] = '\0';
- } /* end else */
- break;
-
- case 'Z':
- case 'z':
- if (sizeof(size_t) < sizeof(long))
- modifier[0] = '\0';
- else if (sizeof(size_t) == sizeof(long)) {
- HDstrncpy(modifier, "l", sizeof(modifier));
- modifier[sizeof(modifier) - 1] = '\0';
- } /* end if */
- else {
- HDstrncpy(modifier, H5_PRINTF_LL_WIDTH, sizeof(modifier));
- modifier[sizeof(modifier) - 1] = '\0';
- } /* end else */
- break;
-
- default:
- /* Handle 'I64' modifier for Microsoft's "__int64" type */
- if (*s == 'I' && *(s + 1) == '6' && *(s + 2) == '4') {
- modifier[0] = *s;
- modifier[1] = *(s + 1);
- modifier[2] = *(s + 2);
- modifier[3] = '\0';
- s += 2; /* Increment over 'I6', the '4' is taken care of below */
- } /* end if */
- else {
- /* Handle 'll' for long long types */
- if (*s == 'l' && *(s + 1) == 'l') {
- modifier[0] = *s;
- modifier[1] = *s;
- modifier[2] = '\0';
- s++; /* Increment over first 'l', second is taken care of below */
- } /* end if */
- else {
- modifier[0] = *s;
- modifier[1] = '\0';
- } /* end else */
- } /* end else */
- break;
- }
- s++;
- }
-
- /* Conversion */
- conv = *s++;
-
- /* Create the format template */
- len = 0;
- len += HDsnprintf(format_templ, (sizeof(format_templ) - (size_t)(len + 1)), "%%%s%s%s%s%s",
- (leftjust ? "-" : ""), (plussign ? "+" : ""), (ldspace ? " " : ""),
- (prefix ? "#" : ""), (zerofill ? "0" : ""));
- if (fwidth > 0)
- len +=
- HDsnprintf(format_templ + len, (sizeof(format_templ) - (size_t)(len + 1)), "%d", fwidth);
- if (prec > 0)
- len +=
- HDsnprintf(format_templ + len, (sizeof(format_templ) - (size_t)(len + 1)), ".%d", prec);
- if (*modifier)
- len += HDsnprintf(format_templ + len, (sizeof(format_templ) - (size_t)(len + 1)), "%s",
- modifier);
- HDsnprintf(format_templ + len, (sizeof(format_templ) - (size_t)(len + 1)), "%c", conv);
-
- /* Conversion */
- switch (conv) {
- case 'd':
- case 'i':
- if (!HDstrcmp(modifier, "h")) {
- short x = (short)HDva_arg(ap, int);
- n = fprintf(stream, format_templ, x);
- }
- else if (!*modifier) {
- int x = HDva_arg(ap, int);
- n = fprintf(stream, format_templ, x);
- }
- else if (!HDstrcmp(modifier, "l")) {
- long x = HDva_arg(ap, long);
- n = fprintf(stream, format_templ, x);
- }
- else {
- int64_t x = HDva_arg(ap, int64_t);
- n = fprintf(stream, format_templ, x);
- }
- break;
-
- case 'o':
- case 'u':
- case 'x':
- case 'X':
- if (!HDstrcmp(modifier, "h")) {
- unsigned short x = (unsigned short)HDva_arg(ap, unsigned int);
- n = fprintf(stream, format_templ, x);
- }
- else if (!*modifier) {
- unsigned int x = HDva_arg(ap, unsigned int);
- n = fprintf(stream, format_templ, x);
- }
- else if (!HDstrcmp(modifier, "l")) {
- unsigned long x = HDva_arg(ap, unsigned long);
- n = fprintf(stream, format_templ, x);
- }
- else {
- uint64_t x = HDva_arg(ap, uint64_t);
- n = fprintf(stream, format_templ, x);
- }
- break;
-
- case 'f':
- case 'e':
- case 'E':
- case 'g':
- case 'G':
- if (!HDstrcmp(modifier, "h")) {
- float x = (float)HDva_arg(ap, double);
- n = fprintf(stream, format_templ, (double)x);
- }
- else if (!*modifier || !HDstrcmp(modifier, "l")) {
- double x = HDva_arg(ap, double);
- n = fprintf(stream, format_templ, x);
- }
- else {
- /*
- * Some compilers complain when `long double' and
- * `double' are the same thing.
- */
-#if H5_SIZEOF_LONG_DOUBLE != H5_SIZEOF_DOUBLE
- long double x = HDva_arg(ap, long double);
- n = fprintf(stream, format_templ, x);
-#else
- double x = HDva_arg(ap, double);
- n = fprintf(stream, format_templ, x);
-#endif
- }
- break;
-
- case 'a': {
- haddr_t x = HDva_arg(ap, haddr_t);
-
- if (H5F_addr_defined(x)) {
- len = 0;
- len += HDsnprintf(format_templ, (sizeof(format_templ) - (size_t)(len + 1)),
- "%%%s%s%s%s%s", (leftjust ? "-" : ""), (plussign ? "+" : ""),
- (ldspace ? " " : ""), (prefix ? "#" : ""), (zerofill ? "0" : ""));
- if (fwidth > 0)
- len += HDsnprintf(format_templ + len, (sizeof(format_templ) - (size_t)(len + 1)),
- "%d", fwidth);
-
- /*lint --e{506} Don't issue warnings about constant value booleans */
- /*lint --e{774} Don't issue warnings boolean within 'if' always evaluates false/true
- */
- if (sizeof(x) == H5_SIZEOF_INT) {
- HDstrncat(format_templ, "u", (sizeof(format_templ) - (size_t)(len + 1)));
- len++;
- } /* end if */
- else if (sizeof(x) == H5_SIZEOF_LONG) {
- HDstrncat(format_templ, "lu", (sizeof(format_templ) - (size_t)(len + 1)));
- len++;
- } /* end if */
- else if (sizeof(x) == H5_SIZEOF_LONG_LONG) {
- HDstrncat(format_templ, H5_PRINTF_LL_WIDTH,
- (sizeof(format_templ) - (size_t)(len + 1)));
- len += (int)sizeof(H5_PRINTF_LL_WIDTH);
- HDstrncat(format_templ, "u", (sizeof(format_templ) - (size_t)(len + 1)));
- len++;
- }
- n = fprintf(stream, format_templ, x);
- }
- else {
- len = 0;
- HDstrncpy(format_templ, "%", (sizeof(format_templ) - (size_t)(len + 1)));
- len++;
- if (leftjust) {
- HDstrncat(format_templ, "-", (sizeof(format_templ) - (size_t)(len + 1)));
- len++;
- } /* end if */
- if (fwidth)
- len += HDsnprintf(format_templ + len, (sizeof(format_templ) - (size_t)(len + 1)),
- "%d", fwidth);
- HDstrncat(format_templ, "s", (sizeof(format_templ) - (size_t)(len + 1)));
- n = fprintf(stream, format_templ, "UNDEF");
- }
- } break;
-
- case 'c': {
- char x = (char)HDva_arg(ap, int);
- n = fprintf(stream, format_templ, x);
- } break;
-
- case 's':
- case 'p': {
- char *x = HDva_arg(ap, char *);
- n = fprintf(stream, format_templ, x);
- } break;
-
- case 'n':
- format_templ[HDstrlen(format_templ) - 1] = 'u';
- n = fprintf(stream, format_templ, nout);
- break;
-
- case 't': {
- htri_t tri_var = HDva_arg(ap, htri_t);
-
- if (tri_var > 0)
- n = fprintf(stream, "TRUE");
- else if (!tri_var)
- n = fprintf(stream, "FALSE");
- else
- n = fprintf(stream, "FAIL(%d)", (int)tri_var);
- } break;
-
- case 'T': /* Elapsed time, in seconds */
- {
- double seconds = HDva_arg(ap, double);
- char * time_string = H5_timer_get_time_string(seconds);
-
- if (time_string) {
- n = fprintf(stream, format_templ, time_string);
- HDfree(time_string);
- } /* end if */
- else
- n = fprintf(stream, format_templ, "(error)");
- } break;
-
- case 'k': {
- H5O_token_t token = HDva_arg(ap, H5O_token_t);
-
- /* Print the raw token. */
- n = fprintf(
- stream,
- "%02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X",
- (unsigned char)token.__data[15], (unsigned char)token.__data[14],
- (unsigned char)token.__data[13], (unsigned char)token.__data[12],
- (unsigned char)token.__data[11], (unsigned char)token.__data[10],
- (unsigned char)token.__data[9], (unsigned char)token.__data[8],
- (unsigned char)token.__data[7], (unsigned char)token.__data[6],
- (unsigned char)token.__data[5], (unsigned char)token.__data[4],
- (unsigned char)token.__data[3], (unsigned char)token.__data[2],
- (unsigned char)token.__data[1], (unsigned char)token.__data[0]);
- } break;
-
- default:
- HDfputs(format_templ, stream);
- n = (int)HDstrlen(format_templ);
- break;
- }
- nout += n;
- fmt = s;
- }
- else {
- HDputc(*fmt, stream);
- fmt++;
- nout++;
+ char * buf; /* buffer to receive formatted string */
+ size_t bufsz; /* size of buffer to allocate */
+
+ for (bufsz = 32; (buf = HDmalloc(bufsz)) != NULL;) {
+ int ret;
+ va_list ap;
+
+ HDva_copy(ap, _ap);
+ ret = HDvsnprintf(buf, bufsz, fmt, ap);
+ va_end(ap);
+ if (ret >= 0 && (size_t)ret < bufsz) {
+ *bufp = buf;
+ return ret;
}
+ HDfree(buf);
+ if (ret < 0)
+ return ret;
+ bufsz = (size_t)ret + 1;
}
- HDva_end(ap);
- return nout;
-} /* end HDfprintf() */
-H5_GCC_DIAG_ON("format-nonliteral")
+ return -1;
+}
+#endif
/*-------------------------------------------------------------------------
* Function: HDstrtoll
@@ -677,15 +306,15 @@ Pflock(int fd, int operation)
* Purpose: Wrapper function for systems where no file locking is
* available.
*
- * Return: Failure: -1 (always fails)
+ * Return: 0 (success)
*
*-------------------------------------------------------------------------
*/
int H5_ATTR_CONST
Nflock(int H5_ATTR_UNUSED fd, int H5_ATTR_UNUSED operation)
{
- /* just fail */
- return -1;
+ /* just succeed */
+ return 0;
} /* end Nflock() */
/*-------------------------------------------------------------------------
diff --git a/src/H5trace.c b/src/H5trace.c
index 635b9e7..18c7f7e 100644
--- a/src/H5trace.c
+++ b/src/H5trace.c
@@ -261,7 +261,7 @@ H5_trace(const double *returning, const char *func, const char *type, ...)
else {
haddr_t addr = HDva_arg(ap, haddr_t);
- HDfprintf(out, "%a", addr);
+ HDfprintf(out, "%" PRIuHADDR, addr);
} /* end else */
break;
@@ -825,7 +825,7 @@ H5_trace(const double *returning, const char *func, const char *type, ...)
else {
H5E_error2_t *error = HDva_arg(ap, H5E_error2_t *);
- HDfprintf(out, "0x%p", error);
+ HDfprintf(out, "0x%p", (void *)error);
} /* end else */
break;
@@ -1153,7 +1153,7 @@ H5_trace(const double *returning, const char *func, const char *type, ...)
else {
H5G_stat_t *statbuf = HDva_arg(ap, H5G_stat_t *);
- HDfprintf(out, "0x%p", statbuf);
+ HDfprintf(out, "0x%p", (void *)statbuf);
}
break;
#endif /* H5_NO_DEPRECATED_SYMBOLS */
@@ -1176,7 +1176,7 @@ H5_trace(const double *returning, const char *func, const char *type, ...)
if (H5S_UNLIMITED == p[i])
HDfprintf(out, "%sH5S_UNLIMITED", (i ? ", " : ""));
else
- HDfprintf(out, "%s%Hu", (i ? ", " : ""), p[i]);
+ HDfprintf(out, "%s%" PRIuHSIZE, (i ? ", " : ""), p[i]);
} /* end for */
HDfprintf(out, "}");
} /* end if */
@@ -1190,7 +1190,7 @@ H5_trace(const double *returning, const char *func, const char *type, ...)
if (H5S_UNLIMITED == hsize)
HDfprintf(out, "H5S_UNLIMITED");
else {
- HDfprintf(out, "%Hu", hsize);
+ HDfprintf(out, "%" PRIuHSIZE, hsize);
asize[argno] = (hssize_t)hsize;
} /* end else */
} /* end else */
@@ -1207,7 +1207,7 @@ H5_trace(const double *returning, const char *func, const char *type, ...)
HDfprintf(out, " {");
for (i = 0; i < asize[asize_idx]; i++)
- HDfprintf(out, "%s%Hd", (i ? ", " : ""), p[i]);
+ HDfprintf(out, "%s%" PRIdHSIZE, (i ? ", " : ""), p[i]);
HDfprintf(out, "}");
} /* end if */
} /* end if */
@@ -1217,7 +1217,7 @@ H5_trace(const double *returning, const char *func, const char *type, ...)
else {
hssize_t hssize = HDva_arg(ap, hssize_t);
- HDfprintf(out, "%Hd", hssize);
+ HDfprintf(out, "%" PRIdHSIZE, hssize);
asize[argno] = (hssize_t)hssize;
} /* end else */
break;
@@ -1896,7 +1896,7 @@ H5_trace(const double *returning, const char *func, const char *type, ...)
else {
hobj_ref_t ref = HDva_arg(ap, hobj_ref_t);
- HDfprintf(out, "Reference Object=%a", ref);
+ HDfprintf(out, "Reference Object=%" PRIuHADDR, ref);
} /* end else */
break;
@@ -3560,7 +3560,7 @@ H5_trace(const double *returning, const char *func, const char *type, ...)
HDfprintf(out, " {");
for (i = 0; i < asize[asize_idx]; i++)
- HDfprintf(out, "%s%Zu", (i ? ", " : ""), p[i]);
+ HDfprintf(out, "%s%zu", (i ? ", " : ""), p[i]);
HDfprintf(out, "}");
} /* end if */
} /* end if */
@@ -3570,7 +3570,7 @@ H5_trace(const double *returning, const char *func, const char *type, ...)
else {
size_t size = HDva_arg(ap, size_t);
- HDfprintf(out, "%Zu", size);
+ HDfprintf(out, "%zu", size);
asize[argno] = (hssize_t)size;
} /* end else */
break;
@@ -3617,7 +3617,7 @@ H5_trace(const double *returning, const char *func, const char *type, ...)
else {
H5Z_class2_t *filter = HDva_arg(ap, H5Z_class2_t *);
- HDfprintf(out, "0x%p", filter);
+ HDfprintf(out, "0x%p", (void *)filter);
} /* end else */
break;
@@ -3666,7 +3666,7 @@ H5_trace(const double *returning, const char *func, const char *type, ...)
HDfprintf(out, " {");
for (i = 0; i < asize[asize_idx]; i++)
- HDfprintf(out, "%s%Zd", (i ? ", " : ""), p[i]);
+ HDfprintf(out, "%s%zd", (i ? ", " : ""), p[i]);
HDfprintf(out, "}");
} /* end if */
} /* end if */
@@ -3676,7 +3676,7 @@ H5_trace(const double *returning, const char *func, const char *type, ...)
else {
ssize_t ssize = HDva_arg(ap, ssize_t);
- HDfprintf(out, "%Zd", ssize);
+ HDfprintf(out, "%zd", ssize);
asize[argno] = (hssize_t)ssize;
} /* end else */
break;
diff --git a/src/H5win32defs.h b/src/H5win32defs.h
index ebffd7e..d5096e5 100644
--- a/src/H5win32defs.h
+++ b/src/H5win32defs.h
@@ -31,33 +31,40 @@
#define PRIoPTR "llo"
#define PRIuPTR "llu"
#define PRIxPTR "llx"
+#define PRIXPTR "llX"
#else /* _WIN64 */
#define PRIdPTR "ld"
#define PRIoPTR "lo"
#define PRIuPTR "lu"
#define PRIxPTR "lx"
+#define PRIXPTR "lX"
#endif /* _WIN64 */
#define PRId8 "d"
#define PRIo8 "o"
#define PRIu8 "u"
#define PRIx8 "x"
+#define PRIX8 "X"
#define PRId16 "d"
#define PRIo16 "o"
#define PRIu16 "u"
#define PRIx16 "x"
+#define PRIX16 "X"
#define PRId32 "d"
#define PRIo32 "o"
#define PRIu32 "u"
#define PRIx32 "x"
+#define PRIX32 "X"
#define PRId64 "lld"
#define PRIo64 "llo"
#define PRIu64 "llu"
#define PRIx64 "llx"
+#define PRIX64 "llX"
#define PRIdMAX "lld"
#define PRIoMAX "llo"
#define PRIuMAX "llu"
#define PRIxMAX "llx"
+#define PRIXMAX "llX"
#endif
/*
diff --git a/src/Makefile.am b/src/Makefile.am
index 787b502..cbecccd 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -141,8 +141,8 @@ include_HEADERS = hdf5.h H5api_adpt.h H5overflow.h H5pubconf.h H5public.h H5vers
H5Apublic.h H5ACpublic.h \
H5Cpublic.h H5Dpublic.h \
H5Epubgen.h H5Epublic.h H5ESpublic.h H5Fpublic.h \
- H5FDpublic.h H5FDcore.h H5FDdirect.h H5FDfamily.h H5FDhdfs.h \
- H5FDlog.h H5FDmirror.h H5FDmpi.h H5FDmpio.h H5FDmulti.h H5FDros3.h \
+ H5FDpublic.h H5FDcore.h H5FDdirect.h H5FDfamily.h H5FDhdfs.h \
+ H5FDlog.h H5FDmirror.h H5FDmpi.h H5FDmpio.h H5FDmulti.h H5FDros3.h \
H5FDsec2.h H5FDsplitter.h H5FDstdio.h H5FDwindows.h \
H5Gpublic.h H5Ipublic.h H5Lpublic.h \
H5Mpublic.h H5MMpublic.h H5Opublic.h H5Ppublic.h \
diff --git a/test/accum.c b/test/accum.c
index abd6a5e..183f955 100644
--- a/test/accum.c
+++ b/test/accum.c
@@ -2329,16 +2329,18 @@ accum_printf(const H5F_t *f)
HDprintf("=====================================================\n");
HDprintf(" accumulator allocated size == %zu\n", accum->alloc_size);
HDprintf(" accumulated data size == %zu\n", accum->size);
- HDfprintf(stdout, " accumulator dirty? == %t\n", accum->dirty);
+ HDfprintf(stdout, " accumulator dirty? == %s\n", accum->dirty ? "TRUE" : "FALSE");
HDprintf("=====================================================\n");
- HDfprintf(stdout, " start of accumulated data, loc = %a\n", accum->loc);
+ HDfprintf(stdout, " start of accumulated data, loc = %" PRIuHADDR "\n", accum->loc);
if (accum->dirty) {
- HDfprintf(stdout, " start of dirty region, loc = %a\n", (haddr_t)(accum->loc + accum->dirty_off));
- HDfprintf(stdout, " end of dirty region, loc = %a\n",
+ HDfprintf(stdout, " start of dirty region, loc = %" PRIuHADDR "\n",
+ (haddr_t)(accum->loc + accum->dirty_off));
+ HDfprintf(stdout, " end of dirty region, loc = %" PRIuHADDR "\n",
(haddr_t)(accum->loc + accum->dirty_off + accum->dirty_len));
} /* end if */
- HDfprintf(stdout, " end of accumulated data, loc = %a\n", (haddr_t)(accum->loc + accum->size));
- HDfprintf(stdout, " end of accumulator allocation, loc = %a\n",
+ HDfprintf(stdout, " end of accumulated data, loc = %" PRIuHADDR "\n",
+ (haddr_t)(accum->loc + accum->size));
+ HDfprintf(stdout, " end of accumulator allocation, loc = %" PRIuHADDR "\n",
(haddr_t)(accum->loc + accum->alloc_size));
HDprintf("=====================================================\n");
}
diff --git a/test/big.c b/test/big.c
index 4dd7c74..6bdbf58 100644
--- a/test/big.c
+++ b/test/big.c
@@ -429,7 +429,7 @@ writer(char *filename, hid_t fapl, fsizes_t testsize, int wrt_n)
for (i = 0; i < wrt_n; i++) {
/* start position must be at least hs_size from the end */
hs_start[0] = randll(size2[0] - hs_size[0], i);
- HDfprintf(out, "#%03d 0x%016Hx\n", i, hs_start[0]);
+ HDfprintf(out, "#%03d 0x%016" PRIxHSIZE "\n", i, hs_start[0]);
if (H5Sselect_hyperslab(space2, H5S_SELECT_SET, hs_start, NULL, hs_size, NULL) < 0)
goto error;
for (j = 0; j < WRT_SIZE; j++) {
@@ -524,7 +524,7 @@ reader(char *filename, hid_t fapl)
break;
i = (int)HDstrtol(ln + 1, &s, 10);
hs_offset[0] = HDstrtoull(s, NULL, 0);
- HDfprintf(stdout, "#%03d 0x%016Hx%47s", i, hs_offset[0], "");
+ HDfprintf(stdout, "#%03d 0x%016" PRIxHSIZE "%47s", i, hs_offset[0], "");
HDfflush(stdout);
if (H5Sselect_hyperslab(fspace, H5S_SELECT_SET, hs_offset, NULL, hs_size, NULL) < 0)
@@ -605,7 +605,7 @@ usage(void)
"\t-c\tFile system Checking skipped. Caution: this test generates\n"
"\t\tmany big files and may fill up the file system.\n"
"\t-fsize\tChange family size default to <fsize> where <fsize> is\n"
- "\t\ta positive float point number. Default value is %Hu.\n"
+ "\t\ta positive float point number. Default value is %" PRIuHSIZE ".\n"
"Examples:\n"
"\tbig -fsize 2.1e9 \t# test with file size just under 2GB\n"
"\tbig -fsize 2.2e9 \t# test with file size just above 2GB\n"
diff --git a/test/cache.c b/test/cache.c
index 8b5597d..0587aa7 100644
--- a/test/cache.c
+++ b/test/cache.c
@@ -2770,17 +2770,17 @@ write_permitted_check(int
/*-------------------------------------------------------------------------
* Function: check_insert_entry()
*
- * Purpose: Verify that H5C_insert_entry behaves as expected.
- * Test the behaviour with different flags.
+ * Purpose: Verify that H5C_insert_entry behaves as expected.
+ * Test the behaviour with different flags.
*
- * This test was added primarily to test basic insert
- * pinned entry functionallity, but I through in explicit
- * tests for other functionallity that is tested implicitly
- * elsewhere.
+ * This test was added primarily to test basic insert
+ * pinned entry functionallity, but I through in explicit
+ * tests for other functionallity that is tested implicitly
+ * elsewhere.
*
- * Return: void
+ * Return: void
*
- * Programmer: John Mainzer
+ * Programmer: John Mainzer
* 8/10/06
*
* Modifications:
@@ -3137,14 +3137,15 @@ check_flush_cache(unsigned paged)
} /* check_flush_cache() */
/*-------------------------------------------------------------------------
+ *
* Function: check_flush_cache__empty_cache()
*
- * Purpose: Verify that flush_cache behaves as expected with an empty
+ * Purpose : Verify that flush_cache behaves as expected with an empty
* cache.
*
- * Return: void
+ * Return: void
*
- * Programmer: John Mainzer
+ * Programmer: John Mainzer
* 1/12/05
*
* Modifications:
@@ -4425,11 +4426,11 @@ check_flush_cache__multi_entry(H5F_t *file_ptr)
/*-------------------------------------------------------------------------
* Function: check_flush_cache__multi_entry_test()
*
- * Purpose: Run a multi entry flush cache test.
+ * Purpose : Run a multi entry flush cache test.
*
- * Return: void
+ * Return: void
*
- * Programmer: John Mainzer
+ * Programmer: John Mainzer
* 1/13/05
*
* Modifications:
@@ -4453,7 +4454,7 @@ check_flush_cache__multi_entry_test(H5F_t *file_ptr, int test_num, unsigned int
/* This gets used a lot, so lets leave it in. */
HDfprintf(stdout, "check_flush_cache__multi_entry_test: test %d\n",
- test_num);
+ test_num);
#endif /* JRM */
if (cache_ptr == NULL) {
@@ -4478,6 +4479,7 @@ check_flush_cache__multi_entry_test(H5F_t *file_ptr, int test_num, unsigned int
u = 0;
while (pass && (u < spec_size)) {
+
if (((unsigned)spec[u].entry_num != u) || (spec[u].entry_type < 0) ||
(spec[u].entry_type >= NUMBER_OF_ENTRY_TYPES) || (spec[u].entry_index < 0) ||
(spec[u].entry_index > max_indices[spec[u].entry_type])) {
@@ -4492,6 +4494,7 @@ check_flush_cache__multi_entry_test(H5F_t *file_ptr, int test_num, unsigned int
u = 0;
while (pass && (u < spec_size)) {
+
if (spec[u].insert_flag) {
insert_entry(file_ptr, spec[u].entry_type, spec[u].entry_index, spec[u].flags);
@@ -4587,6 +4590,7 @@ check_flush_cache__multi_entry_test(H5F_t *file_ptr, int test_num, unsigned int
u = 0;
while (pass && (u < spec_size)) {
+
base_addr = entries[spec[u].entry_type];
entry_ptr = &(base_addr[spec[u].entry_index]);
@@ -4602,13 +4606,14 @@ check_flush_cache__multi_entry_test(H5F_t *file_ptr, int test_num, unsigned int
} /* check_flush_cache__multi_entry_test() */
/*-------------------------------------------------------------------------
+ *
* Function: check_flush_cache__pe_multi_entry_test()
*
- * Purpose: Run a multi entry flush cache test.
+ * Purpose: Run a multi entry flush cache test.
*
- * Return: void
+ * Return: void
*
- * Programmer: John Mainzer
+ * Programmer: John Mainzer
* 4/5/06
*
* Modifications:
@@ -4658,6 +4663,7 @@ check_flush_cache__pe_multi_entry_test(H5F_t *file_ptr, int test_num, unsigned i
u = 0;
while (pass && (u < spec_size)) {
+
if (((unsigned)spec[u].entry_num != u) || (spec[u].entry_type < 0) ||
(spec[u].entry_type >= NUMBER_OF_ENTRY_TYPES) || (spec[u].entry_index < 0) ||
(spec[u].entry_index > max_indices[spec[u].entry_type]) || (spec[u].num_pins < 0) ||
@@ -4687,6 +4693,7 @@ check_flush_cache__pe_multi_entry_test(H5F_t *file_ptr, int test_num, unsigned i
total_entry_size += entry_sizes[spec[u].entry_type];
for (j = 0; j < spec[u].num_pins; j++) {
+
create_pinned_entry_dependency(file_ptr, spec[u].entry_type, spec[u].entry_index,
spec[u].pin_type[j], spec[u].pin_idx[j]);
}
@@ -4709,6 +4716,7 @@ check_flush_cache__pe_multi_entry_test(H5F_t *file_ptr, int test_num, unsigned i
u = 0;
while (pass && (u < spec_size)) {
+
base_addr = entries[spec[u].entry_type];
entry_ptr = &(base_addr[spec[u].entry_index]);
@@ -4773,6 +4781,7 @@ check_flush_cache__pe_multi_entry_test(H5F_t *file_ptr, int test_num, unsigned i
u = 0;
while (pass && (u < spec_size)) {
+
base_addr = entries[spec[u].entry_type];
entry_ptr = &(base_addr[spec[u].entry_index]);
@@ -7987,12 +7996,12 @@ check_flush_cache__flush_ops(H5F_t *file_ptr)
/*-------------------------------------------------------------------------
* Function: check_flush_cache__flush_op_test()
*
- * Purpose: Run a flush op flush cache test. Of the nature of
- * flush operations, this is a multi-entry test.
+ * Purpose: Run a flush op flush cache test. Of the nature of
+ * flush operations, this is a multi-entry test.
*
- * Return: void
+ * Return: void
*
- * Programmer: John Mainzer
+ * Programmer: John Mainzer
* 9/3/06
*
* Modifications:
@@ -8042,6 +8051,7 @@ check_flush_cache__flush_op_test(H5F_t *file_ptr, int test_num, unsigned int flu
i = 0;
while (pass && (i < spec_size)) {
+
if ((spec[i].entry_num != i) || (spec[i].entry_type < 0) ||
(spec[i].entry_type >= NUMBER_OF_ENTRY_TYPES) || (spec[i].entry_index < 0) ||
(spec[i].entry_index > max_indices[spec[i].entry_type]) || (spec[i].num_pins < 0) ||
@@ -8057,6 +8067,7 @@ check_flush_cache__flush_op_test(H5F_t *file_ptr, int test_num, unsigned int flu
i = 0;
while (pass && (i < check_size)) {
+
if ((check[i].entry_num != i) || (check[i].entry_type < 0) ||
(check[i].entry_type >= NUMBER_OF_ENTRY_TYPES) || (check[i].entry_index < 0) ||
(check[i].entry_index > max_indices[check[i].entry_type]) ||
@@ -8084,6 +8095,7 @@ check_flush_cache__flush_op_test(H5F_t *file_ptr, int test_num, unsigned int flu
i = 0;
while (pass && (i < spec_size)) {
+
if (spec[i].insert_flag) {
insert_entry(file_ptr, spec[i].entry_type, spec[i].entry_index, spec[i].flags);
@@ -8104,6 +8116,7 @@ check_flush_cache__flush_op_test(H5F_t *file_ptr, int test_num, unsigned int flu
}
for (j = 0; j < spec[i].num_flush_ops; j++) {
+
add_flush_op(spec[i].entry_type, spec[i].entry_index, spec[i].flush_ops[j].op_code,
spec[i].flush_ops[j].type, spec[i].flush_ops[j].idx, spec[i].flush_ops[j].flag,
spec[i].flush_ops[j].size, spec[i].flush_ops[j].order_ptr);
@@ -8139,6 +8152,7 @@ check_flush_cache__flush_op_test(H5F_t *file_ptr, int test_num, unsigned int flu
i = 0;
while (pass && (i < spec_size)) {
+
base_addr = entries[spec[i].entry_type];
entry_ptr = &(base_addr[spec[i].entry_index]);
@@ -8172,6 +8186,7 @@ check_flush_cache__flush_op_test(H5F_t *file_ptr, int test_num, unsigned int flu
i = 0;
while (pass && (i < check_size)) {
+
if (check[i].in_cache != entry_in_cache(cache_ptr, check[i].entry_type, check[i].entry_index)) {
pass = FALSE;
@@ -8315,6 +8330,7 @@ check_flush_cache__flush_op_test(H5F_t *file_ptr, int test_num, unsigned int flu
i = 0;
while (pass && (i < spec_size)) {
+
base_addr = entries[spec[i].entry_type];
entry_ptr = &(base_addr[spec[i].entry_index]);
@@ -8329,6 +8345,7 @@ check_flush_cache__flush_op_test(H5F_t *file_ptr, int test_num, unsigned int flu
i = 0;
while (pass && (i < check_size)) {
+
base_addr = entries[check[i].entry_type];
entry_ptr = &(base_addr[check[i].entry_index]);
@@ -8348,14 +8365,14 @@ check_flush_cache__flush_op_test(H5F_t *file_ptr, int test_num, unsigned int flu
/*-------------------------------------------------------------------------
* Function: check_flush_cache__flush_op_eviction_test()
*
- * Purpose: Verify that flush operations work as expected when an
+ * Purpose: Verify that flush operations work as expected when an
* entry is evicted.
*
* Do nothing if pass is FALSE on entry.
*
- * Return: void
+ * Return: void
*
- * Programmer: John Mainzer
+ * Programmer: John Mainzer
* 10/3/06
*
* Modifications:
@@ -12124,11 +12141,11 @@ check_flush_cache__single_entry(H5F_t *file_ptr)
/*-------------------------------------------------------------------------
* Function: check_flush_cache__single_entry_test()
*
- * Purpose: Run a single entry flush cache test.
+ * Purpose: Run a single entry flush cache test.
*
- * Return: void
+ * Return: void
*
- * Programmer: John Mainzer
+ * Programmer: John Mainzer
* 1/12/05
*
* Modifications:
@@ -12194,11 +12211,13 @@ check_flush_cache__single_entry_test(H5F_t *file_ptr, int test_num, int entry_ty
pass = FALSE;
HDsnprintf(msg, (size_t)128, "flush with flags 0x%x failed in single entry test #%d.",
flush_flags, test_num);
+
failure_mssg = msg;
}
else if ((entry_ptr->deserialized != expected_deserialized) ||
(entry_ptr->serialized != expected_serialized) ||
(entry_ptr->destroyed != expected_destroyed)) {
+
#if 0 /* This is useful debugging code -- lets keep it for a while */
HDfprintf(stdout,
@@ -12260,11 +12279,11 @@ check_flush_cache__single_entry_test(H5F_t *file_ptr, int test_num, int entry_ty
/*-------------------------------------------------------------------------
* Function: check_flush_cache__pinned_single_entry_test()
*
- * Purpose: Run a pinned single entry flush cache test.
+ * Purpose: Run a pinned single entry flush cache test.
*
- * Return: void
+ * Return: void
*
- * Programmer: John Mainzer
+ * Programmer: John Mainzer
* 3/28/06
*
* Modifications:
@@ -12357,6 +12376,7 @@ check_flush_cache__pinned_single_entry_test(H5F_t *file_ptr, int test_num, int e
else if ((entry_ptr->deserialized != expected_deserialized) ||
(entry_ptr->serialized != expected_serialized) ||
(entry_ptr->destroyed != expected_destroyed)) {
+
#if 0 /* this is useful debugging code -- keep it around */
HDfprintf(stdout,
"desrlzd = %d(%d), srlzd = %d(%d), dest = %d(%d)\n",
@@ -13686,12 +13706,12 @@ check_pin_protected_entry(unsigned paged)
/*-------------------------------------------------------------------------
* Function: check_resize_entry()
*
- * Purpose: Verify that H5C_resize_entry() and H5C_unprotect() resize
- * entries as expected.
+ * Purpose: Verify that H5C_resize_entry() and H5C_unprotect() resize
+ * entries as expected.
*
- * Return: void
+ * Return: void
*
- * Programmer: John Mainzer
+ * Programmer: John Mainzer
* 7/7/06
*
*-------------------------------------------------------------------------
@@ -14125,6 +14145,7 @@ check_resize_entry(unsigned paged)
HDsnprintf(msg, (size_t)128, "Unexpected cache status 8.");
failure_mssg = msg;
}
+
base_addr = entries[LARGE_ENTRY_TYPE];
entry_ptr = &(base_addr[3]);
entry_size = LARGE_ENTRY_SIZE;
@@ -14536,12 +14557,12 @@ check_resize_entry(unsigned paged)
/*-------------------------------------------------------------------------
* Function: check_evictions_enabled()
*
- * Purpose: Verify that H5C_get_evictions_enabled() and
- * H5C_set_evictions_enabled() functions perform as expected.
+ * Purpose: Verify that H5C_get_evictions_enabled() and
+ * H5C_set_evictions_enabled() functions perform as expected.
*
- * Return: void
+ * Return: void
*
- * Programmer: John Mainzer
+ * Programmer: John Mainzer
* 8/2/07
*
* Modifications:
@@ -15174,12 +15195,12 @@ check_evictions_enabled(unsigned paged)
/*-------------------------------------------------------------------------
* Function: check_flush_protected_err()
*
- * Purpose: Verify that an attempt to flush the cache when it contains
- * a protected entry will generate an error.
+ * Purpose: Verify that an attempt to flush the cache when it contains
+ * a protected entry will generate an error.
*
- * Return: void
+ * Return: void
*
- * Programmer: John Mainzer
+ * Programmer: John Mainzer
* 6/24/04
*
* Modifications:
@@ -16292,12 +16313,12 @@ check_move_entry_errs(unsigned paged)
/*-------------------------------------------------------------------------
* Function: check_resize_entry_errs()
*
- * Purpose: Verify that invalid calls to H5C_resize_entry()
- * generates errors as expected.
+ * Purpose: Verify that invalid calls to H5C_resize_entry()
+ * generates errors as expected.
*
- * Return: void
+ * Return: void
*
- * Programmer: John Mainzer
+ * Programmer: John Mainzer
* 7/7/06
*
*-------------------------------------------------------------------------
@@ -29797,7 +29818,7 @@ done:
/*-------------------------------------------------------------------------
* Function: check_flush_deps_order()
*
- * Purpose: Verify that the order that entries with flush dependencies
+ * Purpose: Verify that the order that entries with flush dependencies
* is correct
*
* Return: 0 on success, non-zero on failure
@@ -33578,25 +33599,26 @@ check_entry_deletions_during_scans(unsigned paged)
} /* check_entry_deletions_during_scans() */
/*-------------------------------------------------------------------------
+ *
* Function: cedds__expunge_dirty_entry_in_flush_test()
*
- * Purpose: Verify that H5C_flush_cache() can handle the removal of
- * a dirty entry from the cache during its scan of the
- * skip list.
+ * Purpose: Verify that H5C_flush_cache() can handle the removal of
+ * a dirty entry from the cache during its scan of the
+ * skip list.
*
- * Do this by setting up a full cache, with the last entry
- * on the LRU being both dirty and having a flush operation
- * that deletes the second to last entry on the LRU. Then
- * flush the cache, triggering the flush of the last
- * item, and thereby the deletion of the second to last item.
+ * Do this by setting up a full cache, with the last entry
+ * on the LRU being both dirty and having a flush operation
+ * that deletes the second to last entry on the LRU. Then
+ * flush the cache, triggering the flush of the last
+ * item, and thereby the deletion of the second to last item.
*
- * H5C_flush_cache() should handle this deletion gracefully.
+ * H5C_flush_cache() should handle this deletion gracefully.
*
* Do nothing if pass is FALSE on entry.
*
- * Return: void
+ * Return: void
*
- * Programmer: John Mainzer
+ * Programmer: John Mainzer
* 4/4/15
*
* Modifications:
@@ -33710,15 +33732,15 @@ cedds__expunge_dirty_entry_in_flush_test(H5F_t *file_ptr)
* are in cache with the following characteristics:
*
* in
- * entry: cache? size: dirty? pinned? pins: flush operations:
+ * entry: cache? size: dirty? pinned? pins: flush operations:
*
- * (HET, 0) Y 16 KB Y N - expunge (HET 1)
+ * (HET, 0) Y 16 KB Y N - expunge (HET 1)
*
- * (HET, 1) Y 16 KB Y N - -
+ * (HET, 1) Y 16 KB Y N - -
*
- * (HET, 2) Y 16 KB Y N - -
+ * (HET, 2) Y 16 KB Y N - -
*
- * (HET, 3) Y 16 KB Y N - -
+ * (HET, 3) Y 16 KB Y N - -
*
* Recall that in this test bed, flush operations are excuted the
* first time the associated entry is flushed, and are then
@@ -33793,25 +33815,25 @@ cedds__expunge_dirty_entry_in_flush_test(H5F_t *file_ptr)
/*-------------------------------------------------------------------------
* Function: cedds__H5C_make_space_in_cache()
*
- * Purpose: Verify that H5C__make_space_in_cache() can handle the
- * removal from the cache of the next item in its reverse scan
- * of the LRU list.
+ * Purpose: Verify that H5C__make_space_in_cache() can handle the
+ * removal from the cache of the next item in its reverse scan
+ * of the LRU list.
*
- * Do this by setting up a full cache, with the last entry
- * on the LRU being both dirty and having a flush operation
- * that deleted the second to last entry on the LRU. Then
- * load an additional entry, triggering the flush of the last
- * item, and thereby the deletion of the second to last item.
+ * Do this by setting up a full cache, with the last entry
+ * on the LRU being both dirty and having a flush operation
+ * that deleted the second to last entry on the LRU. Then
+ * load an additional entry, triggering the flush of the last
+ * item, and thereby the deletion of the second to last item.
*
- * H5C__make_space_in_cache() should detect this deletion, and
- * restart its scan of the LRU from the tail, instead of
- * examining the now deleted next item up on the LRU.
+ * H5C__make_space_in_cache() should detect this deletion, and
+ * restart its scan of the LRU from the tail, instead of
+ * examining the now deleted next item up on the LRU.
*
* Do nothing if pass is FALSE on entry.
*
- * Return: void
+ * Return: void
*
- * Programmer: John Mainzer
+ * Programmer: John Mainzer
* 4/4/15
*
* Modifications:
@@ -34154,25 +34176,25 @@ cedds__H5C_make_space_in_cache(H5F_t *file_ptr)
/*-------------------------------------------------------------------------
* Function: cedds__H5C__autoadjust__ageout__evict_aged_out_entries()
*
- * Purpose: Verify that H5C__autoadjust__ageout__evict_aged_out_entries()
- * can handle the removal from the cache of the next item in
- * its reverse scan of the LRU list.
+ * Purpose: Verify that H5C__autoadjust__ageout__evict_aged_out_entries()
+ * can handle the removal from the cache of the next item in
+ * its reverse scan of the LRU list.
*
- * Do this by setting up a full cache, with the last entry
- * on the LRU being both dirty and having a flush operation
- * that deletes the second to last entry on the LRU. Then
- * access the first item in the LRU repeatedly until the
- * item, and thereby the deletion of the second to last item.
+ * Do this by setting up a full cache, with the last entry
+ * on the LRU being both dirty and having a flush operation
+ * that deletes the second to last entry on the LRU. Then
+ * access the first item in the LRU repeatedly until the
+ * item, and thereby the deletion of the second to last item.
*
- * H5C__make_space_in_cache() should detect this deletion, and
- * restart its scan of the LRU from the tail, instead of
- * examining the now deleted next item up on the LRU.
+ * H5C__make_space_in_cache() should detect this deletion, and
+ * restart its scan of the LRU from the tail, instead of
+ * examining the now deleted next item up on the LRU.
*
* Do nothing if pass is FALSE on entry.
*
- * Return: void
+ * Return: void
*
- * Programmer: John Mainzer
+ * Programmer: John Mainzer
* 4/4/15
*
* Modifications:
@@ -34552,86 +34574,86 @@ cedds__H5C__autoadjust__ageout__evict_aged_out_entries(H5F_t *file_ptr)
/*-------------------------------------------------------------------------
* Function: cedds__H5C_flush_invalidate_cache__bucket_scan()
*
- * Purpose: Note: We now use the index list when we scan the
- * contents of the metadata cache, so in principal,
- * this test is obsolete. However, even using the
- * index list, restarts are possible, and must be
- * handled gracefully.
- *
- * As it turns out, this test triggers index list
- * scan restarts, and thus with minor changes is
- * still a useful test.
- *
- * For this reason, with the exception of changing
- * to check the index_scan_restart stat instead of
- * hash bucket restarts, I'm leaving the test
- * alone. If and when it starts to fail due to
- * other changes, we can re-work it to test
- * index list scan restarts explicitly.
- *
- * JRM -- 11/2/16
- *
- * Verify that H5C_flush_invalidate_cache() can handle
- * the removal from the cache of the next item in
- * its scans of hash buckets.
- *
- * !!!!!!!!!!WARNING !!!!!!!!!!
- *
- * This test may fail to function correctly if the hash
- * table size or hash function is altered.
- *
- * To setup the test, this function depends on the fact that
- * H5C_flush_invalidate_cache() does alternating scans of the
- * slist and the index. If this changes, the test will likely
- * also cease to function correctly.
- *
- * The test relies on a known hash function and hash table
- * size to select a set of test entries that will all hash
- * to the same hash bucket -- call it the test hash bucket.
- * It also relies on known behavior of the cache to place
- * the entries in the test bucket in a known order.
- *
- * To avoid pre-mature flushes of the entries in the
- * test hash bucket, all entries are initially clean,
- * with the exception of the first entry which is dirty.
- * It avoids premature flushing by being the parent in
- * a flush dependency. The first entry in the test bucket
- * also has a flush op which expunges the second entry --
- * setting up the failure.
- *
- * An additional dirty entry is added (which must hash
- * to a different bucket, and must have a higher address
- * than at least the first entry in the test hash bucket.
- * This entry is the child in a flush dependency with the
- * first entry in the above hash bucket, and contains
- * a flush op to destroy this flush dependency.
- *
- * Since the first entry in the test hash bucket has a lower
- * address that the other dirty entry, the scan of the
- * slist encounters it first, and passes over it because
- * it has a flush dependency height of 1.
- *
- * The scan then encounters the second dirty entry and flushes
- * it -- causing it to destroy the flush dependency and thus
- * reducing the flush dependency height of the first entry in
- * the test hash bucket to zero.
- *
- * After completing a scan of the slist,
- * H5C_flush_invalidate_cache() then scans the index,
- * flushing all entries of flush dependency height zero.
- *
- * This sets up the potential error when the first entry
- * in the test hash bucket is flushed -- expunging the
- * second entry as a side effect. If
- * H5C_flush_invalidate_cache() fails to detect this,
- * it will attempt to continue its scan of the bucket with
- * an entry that has been deleted from the cache.
+ * Purpose: Note: We now use the index list when we scan the
+ * contents of the metadata cache, so in principal,
+ * this test is obsolete. However, even using the
+ * index list, restarts are possible, and must be
+ * handled gracefully.
+ *
+ * As it turns out, this test triggers index list
+ * scan restarts, and thus with minor changes is
+ * still a useful test.
+ *
+ * For this reason, with the exception of changing
+ * to check the index_scan_restart stat instead of
+ * hash bucket restarts, I'm leaving the test
+ * alone. If and when it starts to fail due to
+ * other changes, we can re-work it to test
+ * index list scan restarts explicitly.
+ *
+ * JRM -- 11/2/16
+ *
+ * Verify that H5C_flush_invalidate_cache() can handle
+ * the removal from the cache of the next item in
+ * its scans of hash buckets.
+ *
+ * !!!!!!!!!!WARNING !!!!!!!!!!
+ *
+ * This test may fail to function correctly if the hash
+ * table size or hash function is altered.
+ *
+ * To setup the test, this function depends on the fact that
+ * H5C_flush_invalidate_cache() does alternating scans of the
+ * slist and the index. If this changes, the test will likely
+ * also cease to function correctly.
+ *
+ * The test relies on a known hash function and hash table
+ * size to select a set of test entries that will all hash
+ * to the same hash bucket -- call it the test hash bucket.
+ * It also relies on known behavior of the cache to place
+ * the entries in the test bucket in a known order.
+ *
+ * To avoid pre-mature flushes of the entries in the
+ * test hash bucket, all entries are initially clean,
+ * with the exception of the first entry which is dirty.
+ * It avoids premature flushing by being the parent in
+ * a flush dependency. The first entry in the test bucket
+ * also has a flush op which expunges the second entry --
+ * setting up the failure.
+ *
+ * An additional dirty entry is added (which must hash
+ * to a different bucket, and must have a higher address
+ * than at least the first entry in the test hash bucket.
+ * This entry is the child in a flush dependency with the
+ * first entry in the above hash bucket, and contains
+ * a flush op to destroy this flush dependency.
+ *
+ * Since the first entry in the test hash bucket has a lower
+ * address that the other dirty entry, the scan of the
+ * slist encounters it first, and passes over it because
+ * it has a flush dependency height of 1.
+ *
+ * The scan then encounters the second dirty entry and flushes
+ * it -- causing it to destroy the flush dependency and thus
+ * reducing the flush dependency height of the first entry in
+ * the test hash bucket to zero.
+ *
+ * After completing a scan of the slist,
+ * H5C_flush_invalidate_cache() then scans the index,
+ * flushing all entries of flush dependency height zero.
+ *
+ * This sets up the potential error when the first entry
+ * in the test hash bucket is flushed -- expunging the
+ * second entry as a side effect. If
+ * H5C_flush_invalidate_cache() fails to detect this,
+ * it will attempt to continue its scan of the bucket with
+ * an entry that has been deleted from the cache.
*
* Do nothing if pass is FALSE on entry.
*
- * Return: void
+ * Return: void
*
- * Programmer: John Mainzer
+ * Programmer: John Mainzer
* 4/9/15
*
* Modifications:
@@ -35009,21 +35031,21 @@ check_stats(unsigned paged)
/*-------------------------------------------------------------------------
* Function: check_stats__smoke_check_1()
*
- * Purpose: Test to see if the statistics collection code is working
- * more or less as expected. Do this by performing a number
- * of operations in the cache, and checking to verify that
- * they result in the expected statistics.
+ * Purpose: Test to see if the statistics collection code is working
+ * more or less as expected. Do this by performing a number
+ * of operations in the cache, and checking to verify that
+ * they result in the expected statistics.
*
- * Note that this function is not intended to be a full test
- * of the statistics collection facility -- only a cursory
- * check that will serve as a place holder until more complete
- * tests are implemented.
+ * Note that this function is not intended to be a full test
+ * of the statistics collection facility -- only a cursory
+ * check that will serve as a place holder until more complete
+ * tests are implemented.
*
* Do nothing if pass is FALSE on entry.
*
- * Return: void
+ * Return: void
*
- * Programmer: John Mainzer
+ * Programmer: John Mainzer
* 4/22/15
*
* Modifications:
diff --git a/test/cache_common.c b/test/cache_common.c
index b1b69f9..d0c267f 100644
--- a/test/cache_common.c
+++ b/test/cache_common.c
@@ -721,9 +721,11 @@ deserialize(const void *image, size_t H5_ATTR_NDEBUG_UNUSED len, void *udata, hb
else {
if ((*(((const char *)image) + 2)) != (char)(idx & 0xFF)) {
HDfprintf(stdout, "type = %d, idx = %d, addr = 0x%lx.\n", type, idx, (long)addr);
- HDfprintf(stdout, "*image = 0x%x 0x%x 0x%x\n", (int)(*((const char *)image)),
- (int)(*(((const char *)image) + 1)), (int)(*(((const char *)image) + 2)));
- HDfprintf(stdout, "expected *image = 0x%x\n", (int)(idx & 0xFF), (int)((idx & 0xFF00) >> 8));
+ HDfprintf(stdout, "*image = 0x%" PRIx8 " 0x%" PRIx8 " 0x%" PRIx8 "\n",
+ (*((const uint8_t *)image)), (*(((const uint8_t *)image) + 1)),
+ (*(((const uint8_t *)image) + 2)));
+ HDfprintf(stdout, "expected *image = 0x%02" PRIx32 "%02" PRIx32 "\n", (uint32_t)idx & 0xFF,
+ (((uint32_t)idx & 0xFF00) >> 8));
} /* end if */
HDassert((*((const char *)image)) == (char)(type & 0xFF));
HDassert((*(((const char *)image) + 1)) == (char)((idx & 0xFF00) >> 8));
@@ -2747,7 +2749,7 @@ expunge_entry(H5F_t *file_ptr, int32_t type, int32_t idx)
* Function: flush_cache()
*
* Purpose: Flush the specified cache, destroying all entries if
- requested. If requested, dump stats first.
+ * requested. If requested, dump stats first.
*
* Return: void
*
@@ -2790,6 +2792,7 @@ flush_cache(H5F_t *file_ptr, hbool_t destroy_entries, hbool_t dump_stats, hbool_
(cache_ptr->clean_index_size != 0) || (cache_ptr->dirty_index_size != 0))) {
if (verbose) {
+
HDfprintf(stdout, "%s: unexpected il/is/cis/dis = %lld/%lld/%lld/%lld.\n", FUNC,
(long long)(cache_ptr->index_len), (long long)(cache_ptr->index_size),
(long long)(cache_ptr->clean_index_size), (long long)(cache_ptr->dirty_index_size));
@@ -3533,8 +3536,8 @@ unprotect_entry(H5F_t *file_ptr, int32_t type, int32_t idx, unsigned int flags)
* Function: row_major_scan_forward()
*
* Purpose: Do a sequence of inserts, protects, unprotects, moves,
- * destroys while scanning through the set of entries. If
- * pass is false on entry, do nothing.
+ * destroys while scanning through the set of entries. If
+ * pass is false on entry, do nothing.
*
* Return: void
*
diff --git a/test/cache_tagging.c b/test/cache_tagging.c
index b4af425..dbb7c81 100644
--- a/test/cache_tagging.c
+++ b/test/cache_tagging.c
@@ -345,7 +345,8 @@ evict_entries(hid_t fid)
/* Evict all we can from the cache to examine full tag creation tree */
/* This function will likely return failure since the root group
- * is still protected. Thus, don't check its return value. */
+ * is still protected. Thus, don't check its return value.
+ */
H5C_flush_cache(f, H5C__FLUSH_INVALIDATE_FLAG);
return 0;
diff --git a/test/chunk_info.c b/test/chunk_info.c
index a663e5e..7774873 100644
--- a/test/chunk_info.c
+++ b/test/chunk_info.c
@@ -335,8 +335,9 @@ verify_selected_chunks(hid_t dset, hid_t plist, hsize_t *start, hsize_t *end)
/* Verify that read chunk is the same as the corresponding written one */
if (HDmemcmp(expected_buf[chk_index], read_buf, CHUNK_NX * CHUNK_NY) != 0) {
- HDfprintf(stderr, "Read chunk differs from written chunk at offset (%d,%d)\n", offset[0],
- offset[1]);
+ HDfprintf(stderr,
+ "Read chunk differs from written chunk at offset (%" PRIuHSIZE ",%" PRIuHSIZE ")\n",
+ offset[0], offset[1]);
return FAIL;
}
}
@@ -709,7 +710,8 @@ test_get_chunk_info_highest_v18(hid_t fapl)
/* Verify that the number of chunks is NUM_CHUNKS */
if (H5Dget_num_chunks(dset, dspace, &nchunks) < 0)
TEST_ERROR
- VERIFY(nchunks, NUM_CHUNKS, "H5Dget_num_chunks, number of chunks");
+ if (nchunks != NUM_CHUNKS)
+ TEST_ERROR
/* Attempt to get info of a chunk from an empty dataset, verify the
returned address and size in the case of H5D_ALLOC_TIME_EARLY */
@@ -718,11 +720,12 @@ test_get_chunk_info_highest_v18(hid_t fapl)
ret = H5Dget_chunk_info(dset, dspace, chk_index, out_offset, &read_flt_msk, &addr, &size);
if (ret < 0)
TEST_ERROR
+
/* Because of H5D_ALLOC_TIME_EARLY, addr cannot be HADDR_UNDEF and size not 0 */
if (addr == HADDR_UNDEF)
- FAIL_PUTS_ERROR(MSG_CHK_ADDR);
+ TEST_ERROR
if (size == EMPTY_CHK_SIZE)
- FAIL_PUTS_ERROR(MSG_CHK_SIZE);
+ TEST_ERROR
chk_index = 10;
reinit_vars(&read_flt_msk, &addr, &size);
@@ -731,9 +734,9 @@ test_get_chunk_info_highest_v18(hid_t fapl)
TEST_ERROR
/* Because of H5D_ALLOC_TIME_EARLY, addr cannot be HADDR_UNDEF and size not 0 */
if (addr == HADDR_UNDEF)
- FAIL_PUTS_ERROR(MSG_CHK_ADDR);
+ TEST_ERROR
if (size == EMPTY_CHK_SIZE)
- FAIL_PUTS_ERROR(MSG_CHK_SIZE);
+ TEST_ERROR
/* Attempt to get info of a chunk given its coords from an empty dataset,
verify the returned address and size */
@@ -743,9 +746,9 @@ test_get_chunk_info_highest_v18(hid_t fapl)
TEST_ERROR
/* Because of H5D_ALLOC_TIME_EARLY, addr cannot be HADDR_UNDEF and size not 0 */
if (addr == HADDR_UNDEF)
- FAIL_PUTS_ERROR(MSG_CHK_ADDR);
+ TEST_ERROR
if (size == 0)
- FAIL_PUTS_ERROR(MSG_CHK_SIZE);
+ TEST_ERROR
if (H5Dclose(dset) < 0)
TEST_ERROR
@@ -855,7 +858,8 @@ test_chunk_info_single_chunk(const char *filename, hid_t fapl)
/* Get the number of chunks and verify that no chunk has been written */
if (H5Dget_num_chunks(dset, dspace, &nchunks) < 0)
TEST_ERROR
- VERIFY(nchunks, NO_CHUNK_WRITTEN, "H5Dget_num_chunks, number of chunks");
+ if (nchunks != NO_CHUNK_WRITTEN)
+ TEST_ERROR
/* Initialize the array of chunk data for the single chunk */
for (ii = 0; ii < NX; ii++)
@@ -869,7 +873,8 @@ test_chunk_info_single_chunk(const char *filename, hid_t fapl)
/* Get and verify that one chunk had been written */
if (H5Dget_num_chunks(dset, dspace, &nchunks) < 0)
TEST_ERROR
- VERIFY(nchunks, ONE_CHUNK_WRITTEN, "H5Dget_num_chunks, number of chunks");
+ if (nchunks != ONE_CHUNK_WRITTEN)
+ TEST_ERROR
/* Offset of the only chunk */
offset[0] = 0;
@@ -2061,8 +2066,7 @@ error:
*
* Purpose: Tests functions related to chunk information
*
- * Return: Success: SUCCEED
- * Failure: FAIL
+ * Return: EXIT_SUCCESS/EXIT_FAILURE
*
* Programmer: Binh-Minh Ribler
* November 5, 2018
@@ -2094,18 +2098,18 @@ main(void)
nerrors += test_flt_msk_with_skip_compress(fapl) < 0 ? 1 : 0;
if (nerrors)
- TEST_ERROR
+ goto error;
HDprintf("All chunk query tests passed.\n");
h5_cleanup(FILENAME, fapl);
- return SUCCEED;
+ return EXIT_SUCCESS;
error:
nerrors = MAX(1, nerrors);
HDprintf("***** %d QUERY CHUNK INFO TEST%s FAILED! *****\n", nerrors, 1 == nerrors ? "" : "S");
- return FAIL;
+ return EXIT_FAILURE;
}
/****************************************************************************
diff --git a/test/dsets.c b/test/dsets.c
index d76be02..e81a33e 100644
--- a/test/dsets.c
+++ b/test/dsets.c
@@ -4552,7 +4552,7 @@ test_nbit_int_size(hid_t file)
if ((dset_size = H5Dget_storage_size(dataset)) < DSET_DIM1 * DSET_DIM2 * (precision / 8) ||
dset_size > DSET_DIM1 * DSET_DIM2 * (precision / 8) + 1 * KB) {
H5_FAILED();
- HDfprintf(stdout, " Line %d: wrong dataset size: %Hu\n", __LINE__, dset_size);
+ HDfprintf(stdout, " Line %d: wrong dataset size: %" PRIuHSIZE "\n", __LINE__, dset_size);
goto error;
}
@@ -4762,7 +4762,7 @@ test_nbit_flt_size(hid_t file)
if ((dset_size = H5Dget_storage_size(dataset)) < DSET_DIM1 * DSET_DIM2 * (precision / 8) ||
dset_size > DSET_DIM1 * DSET_DIM2 * (precision / 8) + 1 * KB) {
H5_FAILED();
- HDfprintf(stdout, " Line %d: wrong dataset size: %Hu\n", __LINE__, dset_size);
+ HDfprintf(stdout, " Line %d: wrong dataset size: %" PRIuHSIZE "\n", __LINE__, dset_size);
goto error;
} /* end if */
@@ -12318,6 +12318,9 @@ test_bt2_hdr_fd(const char *env_h5_driver, hid_t fapl)
TESTING("Version 2 B-tree chunk index header flush dependencies handled correctly");
+ /* Initialize struct */
+ HDmemset(&info, 0, sizeof(info));
+
/* Skip this test if SWMR I/O is not supported for the VFD specified
* by the environment variable.
*/
diff --git a/test/dt_arith.c b/test/dt_arith.c
index 2489539..466554c 100644
--- a/test/dt_arith.c
+++ b/test/dt_arith.c
@@ -775,7 +775,7 @@ test_particular_fp_integer(void)
/* Print errors */
if (dst_c != SCHAR_MAX) {
- double x = 0.;
+ double x = 0.0;
signed char y;
if (0 == fails_this_test++)
@@ -819,7 +819,7 @@ test_particular_fp_integer(void)
/* Print errors */
if (dst_i != fill_value) {
- float x = 0.;
+ float x = 0.0;
int y;
if (0 == fails_this_test++)
@@ -2783,18 +2783,18 @@ my_isnan(dtype_t type, void *val)
char s[256];
if (FLT_FLOAT == type) {
- float x = 0.;
+ float x = 0.0;
HDmemcpy(&x, val, sizeof(float));
retval = (x != x);
}
else if (FLT_DOUBLE == type) {
- double x = 0.;
+ double x = 0.0;
HDmemcpy(&x, val, sizeof(double));
retval = (x != x);
#if H5_SIZEOF_LONG_DOUBLE != H5_SIZEOF_DOUBLE && H5_SIZEOF_LONG_DOUBLE != 0
}
else if (FLT_LDOUBLE == type) {
- long double x = 0.;
+ long double x = 0.0;
HDmemcpy(&x, val, sizeof(long double));
retval = (x != x);
#endif
@@ -2809,20 +2809,20 @@ my_isnan(dtype_t type, void *val)
*/
if (!retval) {
if (FLT_FLOAT == type) {
- float x = 0.;
+ float x = 0.0;
HDmemcpy(&x, val, sizeof(float));
HDsnprintf(s, sizeof(s), "%g", (double)x);
}
else if (FLT_DOUBLE == type) {
- double x = 0.;
+ double x = 0.0;
HDmemcpy(&x, val, sizeof(double));
HDsnprintf(s, sizeof(s), "%g", x);
#if H5_SIZEOF_LONG_DOUBLE != H5_SIZEOF_DOUBLE && H5_SIZEOF_LONG_DOUBLE != 0
}
else if (FLT_LDOUBLE == type) {
- long double x = 0.;
+ long double x = 0.0;
HDmemcpy(&x, val, sizeof(long double));
HDsnprintf(s, sizeof(s), "%Lg", x);
@@ -3283,7 +3283,7 @@ test_conv_flt_1(const char *name, int run_test, hid_t src, hid_t dst)
int check_expo[2];
if (FLT_FLOAT == dst_type) {
- float x = 0.;
+ float x = 0.0;
HDmemcpy(&x, &buf[j * dst_size], sizeof(float));
if (underflow && HDfabsf(x) <= FLT_MIN && HDfabsf(hw_f) <= FLT_MIN)
continue; /* all underflowed, no error */
@@ -3294,7 +3294,7 @@ test_conv_flt_1(const char *name, int run_test, hid_t src, hid_t dst)
check_mant[1] = HDfrexpf(hw_f, check_expo + 1);
}
else if (FLT_DOUBLE == dst_type) {
- double x = 0.;
+ double x = 0.0;
HDmemcpy(&x, &buf[j * dst_size], sizeof(double));
if (underflow && HDfabs(x) <= DBL_MIN && HDfabs(hw_d) <= DBL_MIN)
continue; /* all underflowed, no error */
@@ -3306,7 +3306,7 @@ test_conv_flt_1(const char *name, int run_test, hid_t src, hid_t dst)
#if H5_SIZEOF_LONG_DOUBLE != 0 && (H5_SIZEOF_LONG_DOUBLE != H5_SIZEOF_DOUBLE)
}
else {
- long double x = 0.;
+ long double x = 0.0;
HDmemcpy(&x, &buf[j * dst_size], sizeof(long double));
/* dst is largest float, no need to check underflow. */
check_mant[0] = (double)HDfrexpl(x, check_expo + 0);
@@ -3353,18 +3353,18 @@ test_conv_flt_1(const char *name, int run_test, hid_t src, hid_t dst)
HDprintf(" %02x", saved[j * src_size + ENDIAN(src_size, k, sendian)]);
HDprintf("%*s", (int)(3 * MAX(0, (ssize_t)dst_size - (ssize_t)src_size)), "");
if (FLT_FLOAT == src_type) {
- float x = 0.;
+ float x = 0.0;
HDmemcpy(&x, &saved[j * src_size], sizeof(float));
HDprintf(" %29.20e\n", (double)x);
}
else if (FLT_DOUBLE == src_type) {
- double x = 0.;
+ double x = 0.0;
HDmemcpy(&x, &saved[j * src_size], sizeof(double));
HDprintf(" %29.20e\n", x);
#if H5_SIZEOF_LONG_DOUBLE != H5_SIZEOF_DOUBLE
}
else {
- long double x = 0.;
+ long double x = 0.0;
HDmemcpy(&x, &saved[j * src_size], sizeof(long double));
HDfprintf(stdout, " %29.20Le\n", x);
#endif
@@ -3375,18 +3375,18 @@ test_conv_flt_1(const char *name, int run_test, hid_t src, hid_t dst)
HDprintf(" %02x", buf[j * dst_size + ENDIAN(dst_size, k, dendian)]);
HDprintf("%*s", (int)(3 * MAX(0, (ssize_t)src_size - (ssize_t)dst_size)), "");
if (FLT_FLOAT == dst_type) {
- float x = 0.;
+ float x = 0.0;
HDmemcpy(&x, &buf[j * dst_size], sizeof(float));
HDprintf(" %29.20e\n", (double)x);
}
else if (FLT_DOUBLE == dst_type) {
- double x = 0.;
+ double x = 0.0;
HDmemcpy(&x, &buf[j * dst_size], sizeof(double));
HDprintf(" %29.20e\n", x);
#if H5_SIZEOF_LONG_DOUBLE != H5_SIZEOF_DOUBLE
}
else {
- long double x = 0.;
+ long double x = 0.0;
HDmemcpy(&x, &buf[j * dst_size], sizeof(long double));
HDfprintf(stdout, " %29.20Le\n", x);
#endif
diff --git a/test/dtypes.c b/test/dtypes.c
index 5fd32b7..157e3fa 100644
--- a/test/dtypes.c
+++ b/test/dtypes.c
@@ -5184,7 +5184,7 @@ test_conv_bitfield(void)
goto error;
if (buf[0] != 0xAA || buf[1] != 0xAA || buf[2] != 0 || buf[3] != 0) {
H5_FAILED();
- printf(" s=0xaaaa, d=0x%02x%02x%02x%02x (test 1)\n", buf[3], buf[2], buf[1], buf[0]);
+ HDprintf(" s=0xaaaa, d=0x%02x%02x%02x%02x (test 1)\n", buf[3], buf[2], buf[1], buf[0]);
goto error;
}
@@ -5205,7 +5205,7 @@ test_conv_bitfield(void)
goto error;
if (buf[0] != 0 || buf[1] != 0xA8 || buf[2] != 0x2A || buf[3] != 0) {
H5_FAILED();
- printf(" s=0x2AA8 d=0x%02x%02x%02x%02x (test 2)\n", buf[3], buf[2], buf[1], buf[0]);
+ HDprintf(" s=0x2AA8 d=0x%02x%02x%02x%02x (test 2)\n", buf[3], buf[2], buf[1], buf[0]);
goto error;
}
@@ -5221,7 +5221,7 @@ test_conv_bitfield(void)
goto error;
if (buf[0] != 0xff || buf[1] != 0xAB || buf[2] != 0xEA || buf[3] != 0xff) {
H5_FAILED();
- printf(" s=0x2AA8 d=0x%02x%02x%02x%02x (test 3)\n", buf[3], buf[2], buf[1], buf[0]);
+ HDprintf(" s=0x2AA8 d=0x%02x%02x%02x%02x (test 3)\n", buf[3], buf[2], buf[1], buf[0]);
goto error;
}
@@ -5475,7 +5475,7 @@ opaque_check(int tag_it)
H5E_END_TRY;
if (status >= 0) {
H5_FAILED();
- printf(" opaque conversion should have failed but succeeded\n");
+ HDprintf(" opaque conversion should have failed but succeeded\n");
goto error;
}
@@ -5488,7 +5488,7 @@ opaque_check(int tag_it)
goto error;
if (saved + 1 != num_opaque_conversions_g) {
H5_FAILED();
- printf(" unexpected number of opaque conversions\n");
+ HDprintf(" unexpected number of opaque conversions\n");
goto error;
}
@@ -8529,7 +8529,7 @@ int
main(void)
{
long nerrors = 0;
- hid_t fapl = -1;
+ hid_t fapl = H5I_INVALID_HID;
/* Set the random # seed */
HDsrandom((unsigned)HDtime(NULL));
@@ -8538,7 +8538,7 @@ main(void)
fapl = h5_fileaccess();
if (ALIGNMENT)
- printf("Testing non-aligned conversions (ALIGNMENT=%d)....\n", ALIGNMENT);
+ HDprintf("Testing non-aligned conversions (ALIGNMENT=%d)....\n", ALIGNMENT);
/* Do the tests */
nerrors += test_classes();
diff --git a/test/earray.c b/test/earray.c
index 95ef728..79bf0f1 100644
--- a/test/earray.c
+++ b/test/earray.c
@@ -332,52 +332,63 @@ check_stats(const H5EA_t *ea, const earray_state_t *state)
/* Compare information */
if (earray_stats.stored.max_idx_set != state->max_idx_set) {
- HDfprintf(stdout, "earray_stats.stored.max_idx_set = %Hu, state->max_idx_set = %Hu\n",
+ HDfprintf(stdout,
+ "earray_stats.stored.max_idx_set = %" PRIuHSIZE ", state->max_idx_set = %" PRIuHSIZE "\n",
earray_stats.stored.max_idx_set, state->max_idx_set);
TEST_ERROR
} /* end if */
if (earray_stats.stored.nelmts != state->nelmts) {
- HDfprintf(stdout, "earray_stats.stored.nelmts = %Hu, state->nelmts = %Hu\n",
+ HDfprintf(stdout, "earray_stats.stored.nelmts = %" PRIuHSIZE ", state->nelmts = %" PRIuHSIZE "\n",
earray_stats.stored.nelmts, state->nelmts);
TEST_ERROR
} /* end if */
if (earray_stats.computed.hdr_size != state->hdr_size) {
- HDfprintf(stdout, "earray_stats.computed.hdr_size = %Hu, state->hdr_size = %Hu\n",
+ HDfprintf(stdout,
+ "earray_stats.computed.hdr_size = %" PRIuHSIZE ", state->hdr_size = %" PRIuHSIZE "\n",
earray_stats.computed.hdr_size, state->hdr_size);
TEST_ERROR
} /* end if */
if (earray_stats.computed.nindex_blks != state->nindex_blks) {
- HDfprintf(stdout, "earray_stats.computed.nindex_blks = %Hu, state->nindex_blks = %Hu\n",
+ HDfprintf(stdout,
+ "earray_stats.computed.nindex_blks = %" PRIuHSIZE ", state->nindex_blks = %" PRIuHSIZE "\n",
earray_stats.computed.nindex_blks, state->nindex_blks);
TEST_ERROR
} /* end if */
if (earray_stats.computed.index_blk_size != state->index_blk_size) {
- HDfprintf(stdout, "earray_stats.computed.index_blk_size = %Hu, state->index_blk_size = %Hu\n",
+ HDfprintf(stdout,
+ "earray_stats.computed.index_blk_size = %" PRIuHSIZE ", state->index_blk_size = %" PRIuHSIZE
+ "\n",
earray_stats.computed.index_blk_size, state->index_blk_size);
TEST_ERROR
} /* end if */
if (earray_stats.stored.ndata_blks != state->ndata_blks) {
- HDfprintf(stdout, "earray_stats.stored.ndata_blks = %Hu, state->ndata_blks = %Hu\n",
+ HDfprintf(stdout,
+ "earray_stats.stored.ndata_blks = %" PRIuHSIZE ", state->ndata_blks = %" PRIuHSIZE "\n",
earray_stats.stored.ndata_blks, state->ndata_blks);
TEST_ERROR
} /* end if */
/* Don't compare this currently, it's very hard to compute */
#ifdef NOT_YET
if (earray_stats.stored.data_blk_size != state->data_blk_size) {
- HDfprintf(stdout, "earray_stats.stored.data_blk_size = %Hu, state->data_blk_size = %Hu\n",
+ HDfprintf(stdout,
+ "earray_stats.stored.data_blk_size = %" PRIuHSIZE ", state->data_blk_size = %" PRIuHSIZE
+ "\n",
earray_stats.stored.data_blk_size, state->data_blk_size);
TEST_ERROR
} /* end if */
#endif /* NOT_YET */
if (earray_stats.stored.nsuper_blks != state->nsuper_blks) {
- HDfprintf(stdout, "earray_stats.stored.nsuper_blks = %Hu, state->nsuper_blks = %Hu\n",
+ HDfprintf(stdout,
+ "earray_stats.stored.nsuper_blks = %" PRIuHSIZE ", state->nsuper_blks = %" PRIuHSIZE "\n",
earray_stats.stored.nsuper_blks, state->nsuper_blks);
TEST_ERROR
} /* end if */
/* Don't compare this currently, it's very hard to compute */
#ifdef NOT_YET
if (earray_stats.stored.super_blk_size != state->super_blk_size) {
- HDfprintf(stdout, "earray_stats.stored.super_blk_size = %Hu, state->super_blk_size = %Hu\n",
+ HDfprintf(stdout,
+ "earray_stats.stored.super_blk_size = %" PRIuHSIZE ", state->super_blk_size = %" PRIuHSIZE
+ "\n",
earray_stats.stored.super_blk_size, state->super_blk_size);
TEST_ERROR
} /* end if */
diff --git a/test/farray.c b/test/farray.c
index a108512..b6a6c31 100644
--- a/test/farray.c
+++ b/test/farray.c
@@ -178,20 +178,20 @@ check_stats(const H5FA_t *fa, const farray_state_t *state)
/* Compare information */
if (farray_stats.hdr_size != state->hdr_size) {
- HDfprintf(stdout, "farray_stats.hdr_size = %Hu, state->hdr_size = %Hu\n", farray_stats.hdr_size,
- state->hdr_size);
+ HDfprintf(stdout, "farray_stats.hdr_size = %" PRIuHSIZE ", state->hdr_size = %" PRIuHSIZE "\n",
+ farray_stats.hdr_size, state->hdr_size);
TEST_ERROR
}
if (farray_stats.dblk_size != state->dblk_size) {
- HDfprintf(stdout, "farray_stats.dblk_size = %Hu, state->dblk_size = %Hu\n", farray_stats.dblk_size,
- state->dblk_size);
+ HDfprintf(stdout, "farray_stats.dblk_size = %" PRIuHSIZE ", state->dblk_size = %" PRIuHSIZE "\n",
+ farray_stats.dblk_size, state->dblk_size);
TEST_ERROR
}
if (farray_stats.nelmts != state->nelmts) {
- HDfprintf(stdout, "farray_stats.nelmts = %Hu, state->nelmts = %Hu\n", farray_stats.nelmts,
- state->nelmts);
+ HDfprintf(stdout, "farray_stats.nelmts = %" PRIuHSIZE ", state->nelmts = %" PRIuHSIZE "\n",
+ farray_stats.nelmts, state->nelmts);
TEST_ERROR
}
diff --git a/test/fheap.c b/test/fheap.c
index 8bf1ba6..9a73cd0 100644
--- a/test/fheap.c
+++ b/test/fheap.c
@@ -272,43 +272,45 @@ check_stats(const H5HF_t *fh, const fheap_heap_state_t *state)
if (H5HF_stat_info(fh, &heap_stats) < 0)
FAIL_STACK_ERROR
if (heap_stats.man_nobjs != state->man_nobjs) {
- HDfprintf(stdout, "heap_stats.man_nobjs = %Hu, state->man_nobjs = %Zu\n", heap_stats.man_nobjs,
- state->man_nobjs);
+ HDfprintf(stdout, "heap_stats.man_nobjs = %" PRIuHSIZE ", state->man_nobjs = %zu\n",
+ heap_stats.man_nobjs, state->man_nobjs);
TEST_ERROR
} /* end if */
if (heap_stats.man_size != state->man_size) {
- HDfprintf(stdout, "heap_stats.man_size = %Hu, state->man_size = %Hu\n", heap_stats.man_size,
- state->man_size);
+ HDfprintf(stdout, "heap_stats.man_size = %" PRIuHSIZE ", state->man_size = %" PRIuHSIZE "\n",
+ heap_stats.man_size, state->man_size);
TEST_ERROR
} /* end if */
if (heap_stats.man_alloc_size != state->man_alloc_size) {
- HDfprintf(stdout, "heap_stats.man_alloc_size = %Hu, state->man_alloc_size = %Hu\n",
+ HDfprintf(stdout,
+ "heap_stats.man_alloc_size = %" PRIuHSIZE ", state->man_alloc_size = %" PRIuHSIZE "\n",
heap_stats.man_alloc_size, state->man_alloc_size);
TEST_ERROR
} /* end if */
if (heap_stats.man_free_space != state->man_free_space) {
- HDfprintf(stdout, "heap_stats.man_free_space = %Hu, state->man_free_space = %Hu\n",
+ HDfprintf(stdout,
+ "heap_stats.man_free_space = %" PRIuHSIZE ", state->man_free_space = %" PRIuHSIZE "\n",
heap_stats.man_free_space, state->man_free_space);
TEST_ERROR
} /* end if */
if (heap_stats.huge_nobjs != state->huge_nobjs) {
- HDfprintf(stdout, "heap_stats.huge_nobjs = %Hu, state->huge_nobjs = %Zu\n", heap_stats.huge_nobjs,
- state->huge_nobjs);
+ HDfprintf(stdout, "heap_stats.huge_nobjs = %" PRIuHSIZE ", state->huge_nobjs = %zu\n",
+ heap_stats.huge_nobjs, state->huge_nobjs);
TEST_ERROR
} /* end if */
if (heap_stats.huge_size != state->huge_size) {
- HDfprintf(stdout, "heap_stats.huge_size = %Hu, state->huge_size = %Hu\n", heap_stats.huge_size,
- state->huge_size);
+ HDfprintf(stdout, "heap_stats.huge_size = %" PRIuHSIZE ", state->huge_size = %" PRIuHSIZE "\n",
+ heap_stats.huge_size, state->huge_size);
TEST_ERROR
} /* end if */
if (heap_stats.tiny_nobjs != state->tiny_nobjs) {
- HDfprintf(stdout, "heap_stats.tiny_nobjs = %Hu, state->tiny_nobjs = %Zu\n", heap_stats.tiny_nobjs,
- state->tiny_nobjs);
+ HDfprintf(stdout, "heap_stats.tiny_nobjs = %" PRIuHSIZE ", state->tiny_nobjs = %zu\n",
+ heap_stats.tiny_nobjs, state->tiny_nobjs);
TEST_ERROR
} /* end if */
if (heap_stats.tiny_size != state->tiny_size) {
- HDfprintf(stdout, "heap_stats.tiny_size = %Hu, state->tiny_size = %Hu\n", heap_stats.tiny_size,
- state->tiny_size);
+ HDfprintf(stdout, "heap_stats.tiny_size = %" PRIuHSIZE ", state->tiny_size = %" PRIuHSIZE "\n",
+ heap_stats.tiny_size, state->tiny_size);
TEST_ERROR
} /* end if */
diff --git a/test/fillval.c b/test/fillval.c
index 2cd6989..05570f0 100644
--- a/test/fillval.c
+++ b/test/fillval.c
@@ -927,7 +927,8 @@ test_rdwr_cases(hid_t file, hid_t dcpl, const char *dname, void *_fillval, H5D_f
H5_FAILED();
HDfprintf(stdout, "%u: Value read was not a fill value.\n", (unsigned)__LINE__);
HDfprintf(stdout,
- " Elmt={%Hu,%Hu,%Hu,%Hu,%Hu}, read: %u, "
+ " Elmt={%" PRIuHSIZE ",%" PRIuHSIZE ",%" PRIuHSIZE ",%" PRIuHSIZE ",%" PRIuHSIZE
+ "}, read: %u, "
"Fill value: %u\n",
hs_offset[0], hs_offset[1], hs_offset[2], hs_offset[3], hs_offset[4], val_rd,
fillval);
@@ -944,7 +945,8 @@ test_rdwr_cases(hid_t file, hid_t dcpl, const char *dname, void *_fillval, H5D_f
H5_FAILED();
HDfprintf(stdout, "%u: Value read was not a fill value.\n", (unsigned)__LINE__);
HDfprintf(stdout,
- " Elmt={%Hu,%Hu,%Hu,%Hu,%Hu}, read: %f, %d, %f, %c"
+ " Elmt={%" PRIuHSIZE ",%" PRIuHSIZE ",%" PRIuHSIZE ",%" PRIuHSIZE ",%" PRIuHSIZE
+ "}, read: %f, %d, %f, %c"
"Fill value: %f, %d, %f, %c\n",
hs_offset[0], hs_offset[1], hs_offset[2], hs_offset[3], hs_offset[4],
(double)rd_c.a, rd_c.x, rd_c.y, rd_c.z, (double)fill_c.a, fill_c.x, fill_c.y,
@@ -986,7 +988,8 @@ test_rdwr_cases(hid_t file, hid_t dcpl, const char *dname, void *_fillval, H5D_f
H5_FAILED();
HDfprintf(stdout, "%u: Value read was not a fill value.\n", (unsigned)__LINE__);
HDfprintf(stdout,
- " Elmt={%Hu, %Hu, %Hu, %Hu, %Hu}, read: %u, "
+ " Elmt={%" PRIuHSIZE ", %" PRIuHSIZE ", %" PRIuHSIZE ", %" PRIuHSIZE
+ ", %" PRIuHSIZE "}, read: %u, "
"Fill value: %u\n",
hs_offset[0], hs_offset[1], hs_offset[2], hs_offset[3], hs_offset[4], buf[u],
fillval);
@@ -1012,7 +1015,8 @@ test_rdwr_cases(hid_t file, hid_t dcpl, const char *dname, void *_fillval, H5D_f
H5_FAILED();
HDfprintf(stdout, "%u: Value read was not a fill value.\n", (unsigned)__LINE__);
HDfprintf(stdout,
- " Elmt={%Hu, %Hu, %Hu, %Hu, %Hu}, read: %f, %d, %f, %c"
+ " Elmt={%" PRIuHSIZE ", %" PRIuHSIZE ", %" PRIuHSIZE ", %" PRIuHSIZE
+ ", %" PRIuHSIZE "}, read: %f, %d, %f, %c"
"Fill value: %f, %d, %f, %c\n",
hs_offset[0], hs_offset[1], hs_offset[2], hs_offset[3], hs_offset[4],
(double)buf_c[u].a, buf_c[u].x, buf_c[u].y, buf_c[u].z, (double)fill_c.a,
@@ -1437,7 +1441,8 @@ test_extend_verify_integer(unsigned lineno, const hsize_t *offset, const void *_
if (*test_val != *compare_val) {
HDfprintf(stdout, "%u: Value read was not expected.\n", lineno);
HDfprintf(stdout,
- " Elmt = {%Hu, %Hu, %Hu, %Hu, %Hu}, read: %d, "
+ " Elmt = {%" PRIuHSIZE ", %" PRIuHSIZE ", %" PRIuHSIZE ", %" PRIuHSIZE ", %" PRIuHSIZE
+ "}, read: %d, "
"expected: %d\n",
offset[0], offset[1], offset[2], offset[3], offset[4], *test_val, *compare_val);
goto error;
@@ -1528,7 +1533,8 @@ test_extend_verify_cmpd_vl(unsigned lineno, const hsize_t *offset, const void *_
HDstrcmp(test_val->b, compare_val->b) || (test_val->y != compare_val->y)) {
HDfprintf(stdout, "%u: Value read was not expected.\n", lineno);
HDfprintf(stdout,
- " Elmt = {%Hu, %Hu, %Hu, %Hu, %Hu}, read: {%d, '%s', '%s', %d} "
+ " Elmt = {%" PRIuHSIZE ", %" PRIuHSIZE ", %" PRIuHSIZE ", %" PRIuHSIZE ", %" PRIuHSIZE
+ "}, read: {%d, '%s', '%s', %d} "
"expected: {%d, '%s', '%s', %d}\n",
offset[0], offset[1], offset[2], offset[3], offset[4], test_val->x, test_val->a,
test_val->b, test_val->y, compare_val->x, compare_val->a, compare_val->b, compare_val->y);
diff --git a/test/filter_plugin.c b/test/filter_plugin.c
index b807218..7956ab3 100644
--- a/test/filter_plugin.c
+++ b/test/filter_plugin.c
@@ -1053,7 +1053,7 @@ test_path_api_calls(void)
/* Get the path */
if ((path_len = H5PLget(0, path, 256)) <= 0) {
- HDfprintf(stderr, " get 0 len: %u : %s\n", path_len, path);
+ HDfprintf(stderr, " get 0 len: %zd : %s\n", path_len, path);
TEST_ERROR;
}
if (HDstrcmp(path, "a_path_0") != 0) {
diff --git a/test/freespace.c b/test/freespace.c
index cf9460c..4b6f54c 100644
--- a/test/freespace.c
+++ b/test/freespace.c
@@ -400,22 +400,27 @@ check_stats(const H5F_t *f, const H5FS_t *frsp, frspace_state_t *state)
FAIL_STACK_ERROR
if (frspace_stats.tot_space != state->tot_space) {
- HDfprintf(stdout, "frspace_stats.tot_space = %Hu, state->tot_space = %Zu\n", frspace_stats.tot_space,
- state->tot_space);
+ HDfprintf(stdout, "frspace_stats.tot_space = %" PRIuHSIZE ", state->tot_space = %" PRIuHSIZE "\n",
+ frspace_stats.tot_space, state->tot_space);
TEST_ERROR
} /* end if */
if (frspace_stats.tot_sect_count != state->tot_sect_count) {
- HDfprintf(stdout, "frspace_stats.tot_sect_count = %Hu, state->tot_sect_count = %Hu\n",
+ HDfprintf(stdout,
+ "frspace_stats.tot_sect_count = %" PRIuHSIZE ", state->tot_sect_count = %" PRIuHSIZE "\n",
frspace_stats.tot_sect_count, state->tot_sect_count);
TEST_ERROR
} /* end if */
if (frspace_stats.serial_sect_count != state->serial_sect_count) {
- HDfprintf(stdout, "frspace_stats.serial_sect_count = %Hu, state->serial_sect_count = %Hu\n",
+ HDfprintf(stdout,
+ "frspace_stats.serial_sect_count = %" PRIuHSIZE ", state->serial_sect_count = %" PRIuHSIZE
+ "\n",
frspace_stats.serial_sect_count, state->serial_sect_count);
TEST_ERROR
} /* end if */
if (frspace_stats.ghost_sect_count != state->ghost_sect_count) {
- HDfprintf(stdout, "frspace_stats.ghost_sect_count = %Hu, state->ghost_sect_count = %Hu\n",
+ HDfprintf(stdout,
+ "frspace_stats.ghost_sect_count = %" PRIuHSIZE ", state->ghost_sect_count = %" PRIuHSIZE
+ "\n",
frspace_stats.ghost_sect_count, state->ghost_sect_count);
TEST_ERROR
} /* end if */
diff --git a/test/gen_new_super.c b/test/gen_new_super.c
index 69bf5fa..c3c22c1 100644
--- a/test/gen_new_super.c
+++ b/test/gen_new_super.c
@@ -49,10 +49,10 @@ main(void)
/* Create a file creation property list */
fcpl = H5Pcreate(H5P_FILE_CREATE);
- assert(fcpl >= 0);
+ HDassert(fcpl >= 0);
ret = H5Pset_istore_k(fcpl, ISTORE_IK);
- assert(ret >= 0);
+ HDassert(ret >= 0);
/* Creating a file with the non-default file creation property list should
* create a version 1 superblock
@@ -60,15 +60,15 @@ main(void)
/* Create file with custom file creation property list */
file = H5Fcreate(TESTFILE, H5F_ACC_TRUNC, fcpl, H5P_DEFAULT);
- assert(file >= 0);
+ HDassert(file >= 0);
/* Close FCPL */
ret = H5Pclose(fcpl);
- assert(ret >= 0);
+ HDassert(ret >= 0);
/* Close file */
ret = H5Fclose(file);
- assert(ret >= 0);
+ HDassert(ret >= 0);
- return 0;
+ return EXIT_SUCCESS;
}
diff --git a/test/gen_nullspace.c b/test/gen_nullspace.c
index 5205b21..9002309 100644
--- a/test/gen_nullspace.c
+++ b/test/gen_nullspace.c
@@ -42,42 +42,42 @@ main(void)
/* Create the file */
fid = H5Fcreate(NULLFILE, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
- assert(fid > 0);
+ HDassert(fid > 0);
sid = H5Screate(H5S_NULL);
- assert(sid > 0);
+ HDassert(sid > 0);
/* Create dataset */
did = H5Dcreate2(fid, NULLDATASET, H5T_NATIVE_UINT, sid, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
- assert(did > 0);
+ HDassert(did > 0);
/* Close the dataset */
ret = H5Dclose(did);
- assert(ret >= 0);
+ HDassert(ret >= 0);
/* Open the root group */
gid = H5Gopen2(fid, "/", H5P_DEFAULT);
- assert(gid > 0);
+ HDassert(gid > 0);
/* Create an attribute for the group */
attr = H5Acreate2(gid, NULLATTR, H5T_NATIVE_INT, sid, H5P_DEFAULT, H5P_DEFAULT);
- assert(attr > 0);
+ HDassert(attr > 0);
/* Close attribute */
ret = H5Aclose(attr);
- assert(ret >= 0);
+ HDassert(ret >= 0);
/* Close the group */
ret = H5Gclose(gid);
- assert(ret >= 0);
+ HDassert(ret >= 0);
/* Close the dataspace */
ret = H5Sclose(sid);
- assert(ret >= 0);
+ HDassert(ret >= 0);
/* Close the file */
ret = H5Fclose(fid);
- assert(ret >= 0);
+ HDassert(ret >= 0);
- return 0;
+ return EXIT_SUCCESS;
}
diff --git a/test/h5test.c b/test/h5test.c
index 3033d97..33af30d 100644
--- a/test/h5test.c
+++ b/test/h5test.c
@@ -2089,13 +2089,13 @@ h5_compare_file_bytes(char *f1name, char *f2name)
int ret_value = 0; /* for error handling */
/* Open files for reading */
- f1ptr = HDfopen(f1name, "r");
+ f1ptr = HDfopen(f1name, "rb");
if (f1ptr == NULL) {
HDfprintf(stderr, "Unable to fopen() %s\n", f1name);
ret_value = -1;
goto done;
}
- f2ptr = HDfopen(f2name, "r");
+ f2ptr = HDfopen(f2name, "rb");
if (f2ptr == NULL) {
HDfprintf(stderr, "Unable to fopen() %s\n", f2name);
ret_value = -1;
@@ -2110,7 +2110,8 @@ h5_compare_file_bytes(char *f1name, char *f2name)
f2size = HDftell(f2ptr);
if (f1size != f2size) {
- HDfprintf(stderr, "Files differ in size, %llu vs. %llu\n", f1size, f2size);
+ HDfprintf(stderr, "Files differ in size, %" PRIuHSIZE " vs. %" PRIuHSIZE "\n", (hsize_t)f1size,
+ (hsize_t)f2size);
ret_value = -1;
goto done;
}
@@ -2119,23 +2120,27 @@ h5_compare_file_bytes(char *f1name, char *f2name)
HDrewind(f1ptr);
HDrewind(f2ptr);
for (ii = 0; ii < f1size; ii++) {
- HDfread(&f1char, 1, 1, f1ptr);
- HDfread(&f2char, 1, 1, f2ptr);
+ if (HDfread(&f1char, 1, 1, f1ptr) != 1) {
+ ret_value = -1;
+ goto done;
+ }
+ if (HDfread(&f2char, 1, 1, f2ptr) != 1) {
+ ret_value = -1;
+ goto done;
+ }
if (f1char != f2char) {
- HDfprintf(stderr, "Mismatch @ 0x%llX: 0x%X != 0x%X\n", ii, f1char, f2char);
+ HDfprintf(stderr, "Mismatch @ 0x%" PRIXHSIZE ": 0x%X != 0x%X\n", (hsize_t)ii, f1char, f2char);
ret_value = -1;
goto done;
}
}
done:
- if (f1ptr) {
+ if (f1ptr)
HDfclose(f1ptr);
- }
- if (f2ptr) {
+ if (f2ptr)
HDfclose(f2ptr);
- }
- return (ret_value);
+ return ret_value;
} /* end h5_compare_file_bytes() */
/*-------------------------------------------------------------------------
@@ -2220,7 +2225,7 @@ h5_duplicate_file_by_bytes(const char *orig, const char *dest)
max_buf = 4096 * sizeof(char);
- orig_ptr = HDfopen(orig, "r");
+ orig_ptr = HDfopen(orig, "rb");
if (NULL == orig_ptr) {
ret_value = -1;
goto done;
@@ -2230,7 +2235,7 @@ h5_duplicate_file_by_bytes(const char *orig, const char *dest)
fsize = (hsize_t)HDftell(orig_ptr);
HDrewind(orig_ptr);
- dest_ptr = HDfopen(dest, "w");
+ dest_ptr = HDfopen(dest, "wb");
if (NULL == dest_ptr) {
ret_value = -1;
goto done;
@@ -2244,7 +2249,10 @@ h5_duplicate_file_by_bytes(const char *orig, const char *dest)
}
while (read_size > 0) {
- HDfread(dup_buf, read_size, 1, orig_ptr); /* warning: no error-check */
+ if (HDfread(dup_buf, read_size, 1, orig_ptr) != 1) {
+ ret_value = -1;
+ goto done;
+ }
HDfwrite(dup_buf, read_size, 1, dest_ptr);
fsize -= read_size;
read_size = MIN(fsize, max_buf);
diff --git a/test/hyperslab.c b/test/hyperslab.c
index 42cdafa..43992de 100644
--- a/test/hyperslab.c
+++ b/test/hyperslab.c
@@ -1117,8 +1117,8 @@ test_array_offset_n_calc(size_t n, size_t x, size_t y, size_t z)
/* Check computed coordinates */
for (v = 0; v < ARRAY_OFFSET_NDIMS; v++)
if (coords[v] != new_coords[v]) {
- HDfprintf(stderr, "coords[%u]=%Hu, new_coords[%u]=%Hu\n", (unsigned)v, coords[v], (unsigned)v,
- new_coords[v]);
+ HDfprintf(stderr, "coords[%zu]=%" PRIuHSIZE ", new_coords[%zu]=%" PRIuHSIZE "\n", v,
+ coords[v], v, new_coords[v]);
TEST_ERROR;
} /* end if */
} /* end for */
diff --git a/test/mf.c b/test/mf.c
index 4f224af..c4a2aa1 100644
--- a/test/mf.c
+++ b/test/mf.c
@@ -168,22 +168,27 @@ check_stats(const H5F_t *f, const H5FS_t *frsp, H5FS_stat_t *state)
FAIL_STACK_ERROR
if (frspace_stats.tot_space != state->tot_space) {
- HDfprintf(stdout, "frspace_stats.tot_space = %Hu, state->tot_space = %Zu\n", frspace_stats.tot_space,
- state->tot_space);
+ HDfprintf(stdout, "frspace_stats.tot_space = %" PRIuHSIZE ", state->tot_space = %" PRIuHSIZE "\n",
+ frspace_stats.tot_space, state->tot_space);
TEST_ERROR
} /* end if */
if (frspace_stats.tot_sect_count != state->tot_sect_count) {
- HDfprintf(stdout, "frspace_stats.tot_sect_count = %Hu, state->tot_sect_count = %Hu\n",
+ HDfprintf(stdout,
+ "frspace_stats.tot_sect_count = %" PRIuHSIZE ", state->tot_sect_count = %" PRIuHSIZE "\n",
frspace_stats.tot_sect_count, state->tot_sect_count);
TEST_ERROR
} /* end if */
if (frspace_stats.serial_sect_count != state->serial_sect_count) {
- HDfprintf(stdout, "frspace_stats.serial_sect_count = %Hu, state->serial_sect_count = %Hu\n",
+ HDfprintf(stdout,
+ "frspace_stats.serial_sect_count = %" PRIuHSIZE ", state->serial_sect_count = %" PRIuHSIZE
+ "\n",
frspace_stats.serial_sect_count, state->serial_sect_count);
TEST_ERROR
} /* end if */
if (frspace_stats.ghost_sect_count != state->ghost_sect_count) {
- HDfprintf(stdout, "frspace_stats.ghost_sect_count = %Hu, state->ghost_sect_count = %Hu\n",
+ HDfprintf(stdout,
+ "frspace_stats.ghost_sect_count = %" PRIuHSIZE ", state->ghost_sect_count = %" PRIuHSIZE
+ "\n",
frspace_stats.ghost_sect_count, state->ghost_sect_count);
TEST_ERROR
} /* end if */
diff --git a/test/mirror_vfd.c b/test/mirror_vfd.c
index 416a338..325999b 100644
--- a/test/mirror_vfd.c
+++ b/test/mirror_vfd.c
@@ -2341,7 +2341,7 @@ test_vanishing_datasets(void)
TEST_ERROR;
}
if (group_info.nlinks > 0) {
- HDfprintf(stderr, "links in rw file: %d\n", group_info.nlinks);
+ HDfprintf(stderr, "links in rw file: %" PRIuHSIZE "\n", group_info.nlinks);
HDfflush(stderr);
TEST_ERROR;
}
@@ -2356,7 +2356,7 @@ test_vanishing_datasets(void)
TEST_ERROR;
}
if (group_info.nlinks > 0) {
- HDfprintf(stderr, "links in wo file: %d\n", group_info.nlinks);
+ HDfprintf(stderr, "links in wo file: %" PRIuHSIZE "\n", group_info.nlinks);
HDfflush(stderr);
TEST_ERROR;
}
diff --git a/test/ros3.c b/test/ros3.c
index 856160d..7ecba0e 100644
--- a/test/ros3.c
+++ b/test/ros3.c
@@ -193,15 +193,21 @@
*
*----------------------------------------------------------------------------
*/
+static inline void
+jserr_long(long expected, long actual, const char *reason)
+{
+ if (reason != NULL) {
+ HDprintf("%s\n", reason);
+ }
+ else {
+ HDprintf(" ! Expected %ld\n ! Actual %ld\n", expected, actual);
+ }
+}
+
#define JSERR_LONG(expected, actual, reason) \
{ \
JSFAILED_AT() \
- if (reason != NULL) { \
- HDprintf("%s\n", (reason)); \
- } \
- else { \
- HDprintf(" ! Expected %ld\n ! Actual %ld\n", (long)(expected), (long)(actual)); \
- } \
+ jserr_long((long)(expected), (long)(actual), (reason)); \
}
/*----------------------------------------------------------------------------
@@ -232,15 +238,21 @@
*
*----------------------------------------------------------------------------
*/
+static inline void
+jserr_str(const char *expected, const char *actual, const char *reason)
+{
+ if (reason != NULL) {
+ HDprintf("%s\n", reason);
+ }
+ else {
+ HDprintf("!!! Expected:\n%s\n!!!Actual:\n%s\n", expected, actual);
+ }
+}
+
#define JSERR_STR(expected, actual, reason) \
{ \
JSFAILED_AT() \
- if ((reason) != NULL) { \
- HDprintf("%s\n", (reason)); \
- } \
- else { \
- HDprintf("!!! Expected:\n%s\n!!!Actual:\n%s\n", (expected), (actual)); \
- } \
+ jserr_str((expected), (actual), (reason)); \
}
#ifdef JSVERIFY_EXP_ACT
diff --git a/test/s3comms.c b/test/s3comms.c
index 73d59a4..862914e 100644
--- a/test/s3comms.c
+++ b/test/s3comms.c
@@ -181,15 +181,21 @@
*
*----------------------------------------------------------------------------
*/
+static inline void
+jserr_long(long expected, long actual, const char *reason)
+{
+ if (reason != NULL) {
+ HDprintf("%s\n", reason);
+ }
+ else {
+ HDprintf(" ! Expected %ld\n ! Actual %ld\n", expected, actual);
+ }
+}
+
#define JSERR_LONG(expected, actual, reason) \
{ \
JSFAILED_AT() \
- if (reason != NULL) { \
- HDprintf("%s\n", (reason)); \
- } \
- else { \
- HDprintf(" ! Expected %ld\n ! Actual %ld\n", (long)(expected), (long)(actual)); \
- } \
+ jserr_long((long)(expected), (long)(actual), reason); \
}
/*----------------------------------------------------------------------------
@@ -220,15 +226,21 @@
*
*----------------------------------------------------------------------------
*/
+static inline void
+jserr_str(const char *expected, const char *actual, const char *reason)
+{
+ if (reason != NULL) {
+ HDprintf("%s\n", reason);
+ }
+ else {
+ HDprintf("!!! Expected:\n%s\n!!!Actual:\n%s\n", expected, actual);
+ }
+}
+
#define JSERR_STR(expected, actual, reason) \
{ \
JSFAILED_AT() \
- if ((reason) != NULL) { \
- HDprintf("%s\n", (reason)); \
- } \
- else { \
- HDprintf("!!! Expected:\n%s\n!!!Actual:\n%s\n", (expected), (actual)); \
- } \
+ jserr_str((expected), (actual), (reason)); \
}
#ifdef JSVERIFY_EXP_ACT
@@ -2218,7 +2230,7 @@ test_signing_key(void)
NULL)
JSVERIFY(0, strncmp((const char *)cases[i].exp, (const char *)key, SHA256_DIGEST_LENGTH),
- cases[i].exp)
+ (const char *)cases[i].exp)
free(key);
key = NULL;
diff --git a/test/swmr.c b/test/swmr.c
index df52037..44f4277 100644
--- a/test/swmr.c
+++ b/test/swmr.c
@@ -5575,7 +5575,7 @@ test_file_lock_swmr_concur(hid_t in_fapl)
}
/* Open the test file */
- H5E_BEGIN_TRY { child_fid = H5Fopen(filename, H5F_ACC_RDWR, H5P_DEFAULT); }
+ H5E_BEGIN_TRY { child_fid = H5Fopen(filename, H5F_ACC_RDWR, fapl); }
H5E_END_TRY;
/* Should fail */
@@ -5900,7 +5900,7 @@ test_file_lock_swmr_concur(hid_t in_fapl)
FAIL_STACK_ERROR
/* Open the test file */
- if ((fid = H5Fopen(filename, H5F_ACC_RDONLY, H5P_DEFAULT)) < 0)
+ if ((fid = H5Fopen(filename, H5F_ACC_RDONLY, fapl)) < 0)
FAIL_STACK_ERROR
/* Notify child process */
@@ -6092,7 +6092,7 @@ test_file_lock_env_var(hid_t in_fapl)
/* Child process */
- hid_t child_fid; /* File ID */
+ hid_t child_fid = H5I_INVALID_HID; /* File ID */
int child_notify = 0;
/* Close unused write end for out_pdf */
@@ -6103,7 +6103,7 @@ test_file_lock_env_var(hid_t in_fapl)
while (child_notify != 1) {
if (HDread(out_pdf[0], &child_notify, sizeof(int)) < 0)
HDexit(EXIT_FAILURE);
- } /* end while */
+ }
/* Open the test file */
if ((child_fid = H5Fopen(filename, H5F_ACC_RDWR, fapl)) < 0)
@@ -7013,7 +7013,7 @@ error:
}
H5E_END_TRY;
- return -1;
+ return 1;
} /* test_multiple_same() */
diff --git a/test/vfd.c b/test/vfd.c
index 076273b..fb20c50 100644
--- a/test/vfd.c
+++ b/test/vfd.c
@@ -3336,7 +3336,7 @@ main(void)
nerrors += test_stdio() < 0 ? 1 : 0;
nerrors += test_windows() < 0 ? 1 : 0;
nerrors += test_ros3() < 0 ? 1 : 0;
-/* nerrors += test_splitter() < 0 ? 1 : 0; */
+ /* nerrors += test_splitter() < 0 ? 1 : 0; */
if (nerrors) {
HDprintf("***** %d Virtual File Driver TEST%s FAILED! *****\n", nerrors, nerrors > 1 ? "S" : "");
diff --git a/testpar/t_2Gio.c b/testpar/t_2Gio.c
index 4bba243..3e92f18 100644
--- a/testpar/t_2Gio.c
+++ b/testpar/t_2Gio.c
@@ -578,8 +578,9 @@ MpioTest2G(MPI_Comm comm)
MPI_Comm_rank(comm, &mpi_rank);
if (mpi_rank == 0) {
- HDprintf("Using %d process on dataset shape [%llu, %llu, %llu]\n", mpi_size, shape[0], shape[1],
- shape[2]);
+ HDprintf("Using %d process on dataset shape "
+ "[%" PRIuHSIZE ", %" PRIuHSIZE ", %" PRIuHSIZE "]\n",
+ mpi_size, shape[0], shape[1], shape[2]);
}
/*
@@ -606,7 +607,7 @@ MpioTest2G(MPI_Comm comm)
tot_size_bytes *= shape[i];
}
if (mpi_rank == 0) {
- HDprintf("Dataset of %llu bytes\n", tot_size_bytes);
+ HDprintf("Dataset of %zu bytes\n", tot_size_bytes);
}
filespace = H5Screate_simple(3, shape, NULL);
VRFY((filespace >= 0), "H5Screate_simple succeeded");
@@ -681,7 +682,7 @@ MpioTest2G(MPI_Comm comm)
H5Fclose(file_id);
free(data);
- HDprintf("Proc %d - MpioTest2G test succeeded\n", mpi_rank, data_size_bytes);
+ HDprintf("Proc %d - MpioTest2G test succeeded\n", mpi_rank);
if (mpi_rank == 0)
HDremove(FILENAME[1]);
diff --git a/testpar/t_bigio.c b/testpar/t_bigio.c
index 60faf68..7884ecb 100644
--- a/testpar/t_bigio.c
+++ b/testpar/t_bigio.c
@@ -131,12 +131,13 @@ point_set(hsize_t start[], hsize_t count[], hsize_t stride[], hsize_t block[], s
}
if (VERBOSE_MED) {
- HDprintf("start[]=(%lu, %lu), count[]=(%lu, %lu), stride[]=(%lu, %lu), block[]=(%lu, %lu), total "
- "datapoints=%lu\n",
- (unsigned long)start[0], (unsigned long)start[1], (unsigned long)count[0],
- (unsigned long)count[1], (unsigned long)stride[0], (unsigned long)stride[1],
- (unsigned long)block[0], (unsigned long)block[1],
- (unsigned long)(block[0] * block[1] * count[0] * count[1]));
+ HDprintf("start[]=(%" PRIuHSIZE ", %" PRIuHSIZE "), "
+ "count[]=(%" PRIuHSIZE ", %" PRIuHSIZE "), "
+ "stride[]=(%" PRIuHSIZE ", %" PRIuHSIZE "), "
+ "block[]=(%" PRIuHSIZE ", %" PRIuHSIZE "), "
+ "total datapoints=%" PRIuHSIZE "\n",
+ start[0], start[1], count[0], count[1], stride[0], stride[1], block[0], block[1],
+ block[0] * block[1] * count[0] * count[1]);
k = 0;
for (i = 0; i < num_points; i++) {
HDprintf("(%d, %d)\n", (int)coords[k], (int)coords[k + 1]);
@@ -157,15 +158,15 @@ dataset_print(hsize_t start[], hsize_t block[], B_DATATYPE *dataset)
/* print the column heading */
HDprintf("%-8s", "Cols:");
for (j = 0; j < block[1]; j++) {
- HDprintf("%3lu ", (unsigned long)(start[1] + j));
+ HDprintf("%3" PRIuHSIZE " ", start[1] + j);
}
HDprintf("\n");
/* print the slab data */
for (i = 0; i < block[0]; i++) {
- HDprintf("Row %2lu: ", (unsigned long)(i + start[0]));
+ HDprintf("Row %2" PRIuHSIZE ": ", i + start[0]);
for (j = 0; j < block[1]; j++) {
- HDprintf("%llu ", *dataptr++);
+ HDprintf("%" PRIuHSIZE " ", *dataptr++);
}
HDprintf("\n");
}
@@ -184,10 +185,11 @@ verify_data(hsize_t start[], hsize_t count[], hsize_t stride[], hsize_t block[],
/* print it if VERBOSE_MED */
if (VERBOSE_MED) {
HDprintf("verify_data dumping:::\n");
- HDprintf("start(%lu, %lu), count(%lu, %lu), stride(%lu, %lu), block(%lu, %lu)\n",
- (unsigned long)start[0], (unsigned long)start[1], (unsigned long)count[0],
- (unsigned long)count[1], (unsigned long)stride[0], (unsigned long)stride[1],
- (unsigned long)block[0], (unsigned long)block[1]);
+ HDprintf("start(%" PRIuHSIZE ", %" PRIuHSIZE "), "
+ "count(%" PRIuHSIZE ", %" PRIuHSIZE "), "
+ "stride(%" PRIuHSIZE ", %" PRIuHSIZE "), "
+ "block(%" PRIuHSIZE ", %" PRIuHSIZE ")\n",
+ start[0], start[1], count[0], count[1], stride[0], stride[1], block[0], block[1]);
HDprintf("original values:\n");
dataset_print(start, block, original);
HDprintf("compared values:\n");
@@ -199,9 +201,10 @@ verify_data(hsize_t start[], hsize_t count[], hsize_t stride[], hsize_t block[],
for (j = 0; j < block[1]; j++) {
if (*dataset != *original) {
if (vrfyerrs++ < MAX_ERR_REPORT || VERBOSE_MED) {
- HDprintf("Dataset Verify failed at [%lu][%lu](row %lu, col %lu): expect %llu, got %llu\n",
- (unsigned long)i, (unsigned long)j, (unsigned long)(i + start[0]),
- (unsigned long)(j + start[1]), *(original), *(dataset));
+ HDprintf("Dataset Verify failed at [%" PRIuHSIZE "][%" PRIuHSIZE "]"
+ "(row %" PRIuHSIZE ", col %" PRIuHSIZE "): "
+ "expect %" PRIuHSIZE ", got %" PRIuHSIZE "\n",
+ i, j, i + start[0], j + start[1], *(original), *(dataset));
}
dataset++;
original++;
diff --git a/testpar/t_cache.c b/testpar/t_cache.c
index bb5f22c..e0e03f2 100644
--- a/testpar/t_cache.c
+++ b/testpar/t_cache.c
@@ -1253,7 +1253,7 @@ reset_server_counters(void)
success = FALSE;
nerrors++;
if (verbose) {
- HDfprintf(stdout, "%d:%s: actual/total reads mismatch (%ld/%ld).\n", world_mpi_rank, FUNC,
+ HDfprintf(stdout, "%d:%s: actual/total reads mismatch (%ld/%d).\n", world_mpi_rank, FUNC,
actual_total_reads, total_reads);
}
}
@@ -1263,7 +1263,7 @@ reset_server_counters(void)
success = FALSE;
nerrors++;
if (verbose) {
- HDfprintf(stdout, "%d:%s: actual/total writes mismatch (%ld/%ld).\n", world_mpi_rank, FUNC,
+ HDfprintf(stdout, "%d:%s: actual/total writes mismatch (%ld/%d).\n", world_mpi_rank, FUNC,
actual_total_writes, total_writes);
}
}
@@ -1467,7 +1467,8 @@ serve_read_request(struct mssg_t *mssg_ptr)
nerrors++;
success = FALSE;
if (verbose) {
- HDfprintf(stdout, "%d:%s: addr lookup failed for %a.\n", world_mpi_rank, FUNC, target_addr);
+ HDfprintf(stdout, "%d:%s: addr lookup failed for %" PRIuHADDR ".\n", world_mpi_rank, FUNC,
+ target_addr);
}
}
else if (data[target_index].len != mssg_ptr->len) {
@@ -1475,7 +1476,7 @@ serve_read_request(struct mssg_t *mssg_ptr)
nerrors++;
success = FALSE;
if (verbose) {
- HDfprintf(stdout, "%d:%s: data[i].len = %Zu != mssg->len = %d.\n", world_mpi_rank, FUNC,
+ HDfprintf(stdout, "%d:%s: data[i].len = %zu != mssg->len = %d.\n", world_mpi_rank, FUNC,
data[target_index].len, mssg_ptr->len);
}
}
@@ -1484,7 +1485,9 @@ serve_read_request(struct mssg_t *mssg_ptr)
nerrors++;
success = FALSE;
if (verbose) {
- HDfprintf(stdout, "%d:%s: proc %d read invalid entry. idx/base_addr = %d/%a.\n",
+ HDfprintf(stdout,
+ "%d:%s: proc %d read invalid entry. "
+ "idx/base_addr = %d/%" PRIuHADDR ".\n",
world_mpi_rank, FUNC, mssg_ptr->src, target_index, data[target_index].base_addr);
}
}
@@ -1653,7 +1656,8 @@ serve_write_request(struct mssg_t *mssg_ptr)
nerrors++;
success = FALSE;
if (verbose) {
- HDfprintf(stdout, "%d:%s: addr lookup failed for %a.\n", world_mpi_rank, FUNC, target_addr);
+ HDfprintf(stdout, "%d:%s: addr lookup failed for %" PRIuHADDR ".\n", world_mpi_rank, FUNC,
+ target_addr);
}
}
else if (data[target_index].len != mssg_ptr->len) {
@@ -1661,7 +1665,7 @@ serve_write_request(struct mssg_t *mssg_ptr)
nerrors++;
success = FALSE;
if (verbose) {
- HDfprintf(stdout, "%d:%s: data[i].len = %Zu != mssg->len = %d.\n", world_mpi_rank, FUNC,
+ HDfprintf(stdout, "%d:%s: data[i].len = %zu != mssg->len = %d.\n", world_mpi_rank, FUNC,
data[target_index].len, mssg_ptr->len);
}
}
@@ -1790,11 +1794,11 @@ serve_total_writes_request(struct mssg_t *mssg_ptr)
if (success) {
- HDfprintf(stdout, "%d request total writes %ld.\n", (int)(mssg_ptr->src), total_writes);
+ HDfprintf(stdout, "%d request total writes %d.\n", (int)(mssg_ptr->src), total_writes);
}
else {
- HDfprintf(stdout, "%d request total writes %ld -- FAILED.\n", (int)(mssg_ptr->src), total_writes);
+ HDfprintf(stdout, "%d request total writes %d -- FAILED.\n", (int)(mssg_ptr->src), total_writes);
}
}
@@ -1860,11 +1864,11 @@ serve_total_reads_request(struct mssg_t *mssg_ptr)
if (success) {
- HDfprintf(stdout, "%d request total reads %ld.\n", (int)(mssg_ptr->src), total_reads);
+ HDfprintf(stdout, "%d request total reads %d.\n", (int)(mssg_ptr->src), total_reads);
}
else {
- HDfprintf(stdout, "%d request total reads %ld -- FAILED.\n", (int)(mssg_ptr->src), total_reads);
+ HDfprintf(stdout, "%d request total reads %d -- FAILED.\n", (int)(mssg_ptr->src), total_reads);
}
}
@@ -1919,7 +1923,8 @@ serve_entry_writes_request(struct mssg_t *mssg_ptr)
nerrors++;
success = FALSE;
if (verbose) {
- HDfprintf(stdout, "%d:%s: addr lookup failed for %a.\n", world_mpi_rank, FUNC, target_addr);
+ HDfprintf(stdout, "%d:%s: addr lookup failed for %" PRIuHADDR ".\n", world_mpi_rank, FUNC,
+ target_addr);
}
}
else {
@@ -2007,7 +2012,8 @@ serve_entry_reads_request(struct mssg_t *mssg_ptr)
nerrors++;
success = FALSE;
if (verbose) {
- HDfprintf(stdout, "%d:%s: addr lookup failed for %a.\n", world_mpi_rank, FUNC, target_addr);
+ HDfprintf(stdout, "%d:%s: addr lookup failed for %" PRIuHADDR ".\n", world_mpi_rank, FUNC,
+ target_addr);
}
}
else {
@@ -2488,10 +2494,10 @@ datum_notify(H5C_notify_action_t action, void *thing)
HDfprintf(stdout,
"%d:%s: mssg.base_addr != entry_ptr->base_addr.\n",
world_mpi_rank, FUNC);
- HDfprintf(stdout, "%d:%s: mssg.base_addr = %a.\n",
+ HDfprintf(stdout, "%d:%s: mssg.base_addr = %" PRIuHADDR ".\n",
world_mpi_rank, FUNC, mssg.base_addr);
HDfprintf(stdout,
- "%d:%s: entry_ptr->base_addr = %a.\n",
+ "%d:%s: entry_ptr->base_addr = %" PRIuHADDR ".\n",
world_mpi_rank, FUNC,
entry_ptr->base_addr);
}
@@ -2501,7 +2507,7 @@ datum_notify(H5C_notify_action_t action, void *thing)
HDfprintf(stdout,
"%d:%s: mssg.len != entry_ptr->len.\n",
world_mpi_rank, FUNC);
- HDfprintf(stdout, "%d:%s: mssg.len = %a.\n",
+ HDfprintf(stdout, "%d:%s: mssg.len = %" PRIuHADDR ".\n",
world_mpi_rank, FUNC, mssg.len);
}
@@ -4296,8 +4302,8 @@ verify_entry_reads(haddr_t addr, int expected_entry_reads)
nerrors++;
success = FALSE;
if (verbose) {
- HDfprintf(stdout, "%d:%s: rep/exp entry 0x%llx reads mismatch (%ld/%ld).\n", world_mpi_rank,
- FUNC, (long long)addr, reported_entry_reads, expected_entry_reads);
+ HDfprintf(stdout, "%d:%s: rep/exp entry 0x%" PRIxHADDR " reads mismatch (%d/%d).\n",
+ world_mpi_rank, FUNC, addr, reported_entry_reads, expected_entry_reads);
}
}
}
@@ -4393,7 +4399,7 @@ verify_entry_writes(haddr_t addr, int expected_entry_writes)
nerrors++;
success = FALSE;
if (verbose) {
- HDfprintf(stdout, "%d:%s: rep/exp entry 0x%llx writes mismatch (%ld/%ld).\n", world_mpi_rank,
+ HDfprintf(stdout, "%d:%s: rep/exp entry 0x%llx writes mismatch (%d/%d).\n", world_mpi_rank,
FUNC, (long long)addr, reported_entry_writes, expected_entry_writes);
}
}
@@ -4485,8 +4491,8 @@ verify_total_reads(int expected_total_reads)
nerrors++;
success = FALSE;
if (verbose) {
- HDfprintf(stdout, "%d:%s: reported/expected total reads mismatch (%ld/%ld).\n",
- world_mpi_rank, FUNC, reported_total_reads, expected_total_reads);
+ HDfprintf(stdout, "%d:%s: reported/expected total reads mismatch (%ld/%d).\n", world_mpi_rank,
+ FUNC, reported_total_reads, expected_total_reads);
}
}
}
@@ -6513,15 +6519,15 @@ trace_file_check(int metadata_write_strategy)
HDfprintf(stdout, "%d:%s: Unexpected data in trace file line %d.\n", world_mpi_rank,
FUNC, i);
if (expected_line_len == 0) {
- HDfprintf(stdout, "%d:%s: expected = \"%s\" %d\n", world_mpi_rank, FUNC,
+ HDfprintf(stdout, "%d:%s: expected = \"%s\" %zu\n", world_mpi_rank, FUNC,
"<EMPTY>", expected_line_len);
- HDfprintf(stdout, "%d:%s: actual = \"%s\" %d\n", world_mpi_rank, FUNC, buffer,
+ HDfprintf(stdout, "%d:%s: actual = \"%s\" %zu\n", world_mpi_rank, FUNC, buffer,
actual_line_len);
}
if (actual_line_len == 0) {
- HDfprintf(stdout, "%d:%s: expected = \"%s\" %d\n", world_mpi_rank, FUNC,
+ HDfprintf(stdout, "%d:%s: expected = \"%s\" %zu\n", world_mpi_rank, FUNC,
(*expected_output)[i], expected_line_len);
- HDfprintf(stdout, "%d:%s: actual = \"%s\" %d\n", world_mpi_rank, FUNC,
+ HDfprintf(stdout, "%d:%s: actual = \"%s\" %zu\n", world_mpi_rank, FUNC,
"<EMPTY>", actual_line_len);
}
}
@@ -6537,9 +6543,9 @@ trace_file_check(int metadata_write_strategy)
if (verbose) {
HDfprintf(stdout, "%d:%s: Unexpected data in trace file line %d.\n", world_mpi_rank,
FUNC, i);
- HDfprintf(stdout, "%d:%s: expected = \"%s\" %d\n", world_mpi_rank, FUNC,
+ HDfprintf(stdout, "%d:%s: expected = \"%s\" %zu\n", world_mpi_rank, FUNC,
(*expected_output)[i], expected_line_len);
- HDfprintf(stdout, "%d:%s: actual = \"%s\" %d\n", world_mpi_rank, FUNC, buffer,
+ HDfprintf(stdout, "%d:%s: actual = \"%s\" %zu\n", world_mpi_rank, FUNC, buffer,
actual_line_len);
}
}
diff --git a/testpar/t_cache_image.c b/testpar/t_cache_image.c
index 39cfbf3..776da2e 100644
--- a/testpar/t_cache_image.c
+++ b/testpar/t_cache_image.c
@@ -3117,8 +3117,9 @@ verify_cache_image_RO(int file_name_id, int md_write_strat, int mpi_rank)
H5_FAILED();
- if (show_progress)
- HDfprintf(stdout, "%s: failure_mssg = \"%s\"\n", failure_mssg);
+ if (show_progress) {
+ HDfprintf(stdout, "%s: failure_mssg = \"%s\"\n", fcn_name, failure_mssg);
+ }
}
}
@@ -3401,8 +3402,9 @@ verify_cache_image_RW(int file_name_id, int md_write_strat, int mpi_rank)
H5_FAILED();
- if (show_progress)
- HDfprintf(stdout, "%s: failure_mssg = \"%s\"\n", failure_mssg);
+ if (show_progress) {
+ HDfprintf(stdout, "%s: failure_mssg = \"%s\"\n", fcn_name, failure_mssg);
+ }
}
}
diff --git a/testpar/t_filters_parallel.c b/testpar/t_filters_parallel.c
index 37479b3..5153bce 100644
--- a/testpar/t_filters_parallel.c
+++ b/testpar/t_filters_parallel.c
@@ -255,8 +255,9 @@ test_write_one_chunk_filtered_dataset(void)
start[1] = 0;
if (VERBOSE_MED) {
- HDprintf("Process %d is writing with count[ %llu, %llu ], stride[ %llu, %llu ], start[ %llu, %llu ], "
- "block size[ %llu, %llu ]\n",
+ HDprintf("Process %d is writing with count[ %" PRIuHSIZE ", %" PRIuHSIZE " ], stride[ %" PRIuHSIZE
+ ", %" PRIuHSIZE " ], start[ %" PRIuHSIZE ", %" PRIuHSIZE " ], block size[ %" PRIuHSIZE
+ ", %" PRIuHSIZE " ]\n",
mpi_rank, count[0], count[1], stride[0], stride[1], start[0], start[1], block[0], block[1]);
HDfflush(stdout);
}
@@ -418,8 +419,9 @@ test_write_filtered_dataset_no_overlap(void)
start[1] = 0;
if (VERBOSE_MED) {
- HDprintf("Process %d is writing with count[ %llu, %llu ], stride[ %llu, %llu ], start[ %llu, %llu ], "
- "block size[ %llu, %llu ]\n",
+ HDprintf("Process %d is writing with count[ %" PRIuHSIZE ", %" PRIuHSIZE " ], stride[ %" PRIuHSIZE
+ ", %" PRIuHSIZE " ], start[ %" PRIuHSIZE ", %" PRIuHSIZE " ], block size[ %" PRIuHSIZE
+ ", %" PRIuHSIZE " ]\n",
mpi_rank, count[0], count[1], stride[0], stride[1], start[0], start[1], block[0], block[1]);
HDfflush(stdout);
}
@@ -578,8 +580,9 @@ test_write_filtered_dataset_overlap(void)
start[1] = 0;
if (VERBOSE_MED) {
- HDprintf("Process %d is writing with count[ %llu, %llu ], stride[ %llu, %llu ], start[ %llu, %llu ], "
- "block size[ %llu, %llu ]\n",
+ HDprintf("Process %d is writing with count[ %" PRIuHSIZE ", %" PRIuHSIZE " ], stride[ %" PRIuHSIZE
+ ", %" PRIuHSIZE " ], start[ %" PRIuHSIZE ", %" PRIuHSIZE " ], block size[ %" PRIuHSIZE
+ ", %" PRIuHSIZE " ]\n",
mpi_rank, count[0], count[1], stride[0], stride[1], start[0], start[1], block[0], block[1]);
HDfflush(stdout);
}
@@ -746,8 +749,9 @@ test_write_filtered_dataset_single_no_selection(void)
start[1] = 0;
if (VERBOSE_MED) {
- HDprintf("Process %d is writing with count[ %llu, %llu ], stride[ %llu, %llu ], start[ %llu, %llu ], "
- "block size[ %llu, %llu ]\n",
+ HDprintf("Process %d is writing with count[ %" PRIuHSIZE ", %" PRIuHSIZE " ], stride[ %" PRIuHSIZE
+ ", %" PRIuHSIZE " ], start[ %" PRIuHSIZE ", %" PRIuHSIZE " ], block size[ %" PRIuHSIZE
+ ", %" PRIuHSIZE " ]\n",
mpi_rank, count[0], count[1], stride[0], stride[1], start[0], start[1], block[0], block[1]);
HDfflush(stdout);
}
@@ -1202,8 +1206,9 @@ test_write_filtered_dataset_interleaved_write(void)
start[1] = 0;
if (VERBOSE_MED) {
- HDprintf("Process %d is writing with count[ %llu, %llu ], stride[ %llu, %llu ], start[ %llu, %llu ], "
- "block size[ %llu, %llu ]\n",
+ HDprintf("Process %d is writing with count[ %" PRIuHSIZE ", %" PRIuHSIZE " ], stride[ %" PRIuHSIZE
+ ", %" PRIuHSIZE " ], start[ %" PRIuHSIZE ", %" PRIuHSIZE " ], block size[ %" PRIuHSIZE
+ ", %" PRIuHSIZE " ]\n",
mpi_rank, count[0], count[1], stride[0], stride[1], start[0], start[1], block[0], block[1]);
HDfflush(stdout);
}
@@ -1379,8 +1384,10 @@ test_write_3d_filtered_dataset_no_overlap_separate_pages(void)
start[2] = (hsize_t)mpi_rank;
if (VERBOSE_MED) {
- HDprintf("Process %d is writing with count[ %llu, %llu, %llu ], stride[ %llu, %llu, %llu ], start[ "
- "%llu, %llu, %llu ], block size[ %llu, %llu, %llu ]\n",
+ HDprintf("Process %d is writing with count[ %" PRIuHSIZE ", %" PRIuHSIZE ", %" PRIuHSIZE
+ " ], stride[ %" PRIuHSIZE ", %" PRIuHSIZE ", %" PRIuHSIZE " ], start[ %" PRIuHSIZE
+ ", %" PRIuHSIZE ", %" PRIuHSIZE " ], block size[ %" PRIuHSIZE ", %" PRIuHSIZE ", %" PRIuHSIZE
+ " ]\n",
mpi_rank, count[0], count[1], count[2], stride[0], stride[1], stride[2], start[0], start[1],
start[2], block[0], block[1], block[2]);
HDfflush(stdout);
@@ -1547,8 +1554,10 @@ test_write_3d_filtered_dataset_no_overlap_same_pages(void)
start[2] = 0;
if (VERBOSE_MED) {
- HDprintf("Process %d is writing with count[ %llu, %llu, %llu ], stride[ %llu, %llu, %llu ], start[ "
- "%llu, %llu, %llu ], block size[ %llu, %llu, %llu ]\n",
+ HDprintf("Process %d is writing with count[ %" PRIuHSIZE ", %" PRIuHSIZE ", %" PRIuHSIZE
+ " ], stride[ %" PRIuHSIZE ", %" PRIuHSIZE ", %" PRIuHSIZE " ], start[ %" PRIuHSIZE
+ ", %" PRIuHSIZE ", %" PRIuHSIZE " ], block size[ %" PRIuHSIZE ", %" PRIuHSIZE ", %" PRIuHSIZE
+ " ]\n",
mpi_rank, count[0], count[1], count[2], stride[0], stride[1], stride[2], start[0], start[1],
start[2], block[0], block[1], block[2]);
HDfflush(stdout);
@@ -1714,8 +1723,10 @@ test_write_3d_filtered_dataset_overlap(void)
start[2] = 0;
if (VERBOSE_MED) {
- HDprintf("Process %d is writing with count[ %llu, %llu, %llu ], stride[ %llu, %llu, %llu ], start[ "
- "%llu, %llu, %llu ], block size[ %llu, %llu, %llu ]\n",
+ HDprintf("Process %d is writing with count[ %" PRIuHSIZE ", %" PRIuHSIZE ", %" PRIuHSIZE
+ " ], stride[ %" PRIuHSIZE ", %" PRIuHSIZE ", %" PRIuHSIZE " ], start[ %" PRIuHSIZE
+ ", %" PRIuHSIZE ", %" PRIuHSIZE " ], block size[ %" PRIuHSIZE ", %" PRIuHSIZE ", %" PRIuHSIZE
+ " ]\n",
mpi_rank, count[0], count[1], count[2], stride[0], stride[1], stride[2], start[0], start[1],
start[2], block[0], block[1], block[2]);
HDfflush(stdout);
@@ -1900,8 +1911,9 @@ test_write_cmpd_filtered_dataset_no_conversion_unshared(void)
start[1] = ((hsize_t)mpi_rank * WRITE_COMPOUND_FILTERED_CHUNKS_NO_CONVERSION_UNSHARED_CH_NCOLS);
if (VERBOSE_MED) {
- HDprintf("Process %d is writing with count[ %llu, %llu ], stride[ %llu, %llu ], start[ %llu, %llu ], "
- "block size[ %llu, %llu ]\n",
+ HDprintf("Process %d is writing with count[ %" PRIuHSIZE ", %" PRIuHSIZE " ], stride[ %" PRIuHSIZE
+ ", %" PRIuHSIZE " ], start[ %" PRIuHSIZE ", %" PRIuHSIZE " ], block size[ %" PRIuHSIZE
+ ", %" PRIuHSIZE " ]\n",
mpi_rank, count[0], count[1], stride[0], stride[1], start[0], start[1], block[0], block[1]);
HDfflush(stdout);
}
@@ -2080,8 +2092,9 @@ test_write_cmpd_filtered_dataset_no_conversion_shared(void)
start[1] = 0;
if (VERBOSE_MED) {
- HDprintf("Process %d is writing with count[ %llu, %llu ], stride[ %llu, %llu ], start[ %llu, %llu ], "
- "block size[ %llu, %llu ]\n",
+ HDprintf("Process %d is writing with count[ %" PRIuHSIZE ", %" PRIuHSIZE " ], stride[ %" PRIuHSIZE
+ ", %" PRIuHSIZE " ], start[ %" PRIuHSIZE ", %" PRIuHSIZE " ], block size[ %" PRIuHSIZE
+ ", %" PRIuHSIZE " ]\n",
mpi_rank, count[0], count[1], stride[0], stride[1], start[0], start[1], block[0], block[1]);
HDfflush(stdout);
}
@@ -2279,8 +2292,9 @@ test_write_cmpd_filtered_dataset_type_conversion_unshared(void)
start[1] = ((hsize_t)mpi_rank * WRITE_COMPOUND_FILTERED_CHUNKS_TYPE_CONVERSION_UNSHARED_CH_NCOLS);
if (VERBOSE_MED) {
- HDprintf("Process %d is writing with count[ %llu, %llu ], stride[ %llu, %llu ], start[ %llu, %llu ], "
- "block size[ %llu, %llu ]\n",
+ HDprintf("Process %d is writing with count[ %" PRIuHSIZE ", %" PRIuHSIZE " ], stride[ %" PRIuHSIZE
+ ", %" PRIuHSIZE " ], start[ %" PRIuHSIZE ", %" PRIuHSIZE " ], block size[ %" PRIuHSIZE
+ ", %" PRIuHSIZE " ]\n",
mpi_rank, count[0], count[1], stride[0], stride[1], start[0], start[1], block[0], block[1]);
HDfflush(stdout);
}
@@ -2471,8 +2485,9 @@ test_write_cmpd_filtered_dataset_type_conversion_shared(void)
start[1] = 0;
if (VERBOSE_MED) {
- HDprintf("Process %d is writing with count[ %llu, %llu ], stride[ %llu, %llu ], start[ %llu, %llu ], "
- "block size[ %llu, %llu ]\n",
+ HDprintf("Process %d is writing with count[ %" PRIuHSIZE ", %" PRIuHSIZE " ], stride[ %" PRIuHSIZE
+ ", %" PRIuHSIZE " ], start[ %" PRIuHSIZE ", %" PRIuHSIZE " ], block size[ %" PRIuHSIZE
+ ", %" PRIuHSIZE " ]\n",
mpi_rank, count[0], count[1], stride[0], stride[1], start[0], start[1], block[0], block[1]);
HDfflush(stdout);
}
@@ -2687,8 +2702,9 @@ test_read_one_chunk_filtered_dataset(void)
start[1] = 0;
if (VERBOSE_MED) {
- HDprintf("Process %d is reading with count[ %llu, %llu ], stride[ %llu, %llu ], start[ %llu, %llu ], "
- "block size[ %llu, %llu ]\n",
+ HDprintf("Process %d is reading with count[ %" PRIuHSIZE ", %" PRIuHSIZE " ], stride[ %" PRIuHSIZE
+ ", %" PRIuHSIZE " ], start[ %" PRIuHSIZE ", %" PRIuHSIZE " ], block size[ %" PRIuHSIZE
+ ", %" PRIuHSIZE " ]\n",
mpi_rank, count[0], count[1], stride[0], stride[1], start[0], start[1], block[0], block[1]);
HDfflush(stdout);
}
@@ -2890,8 +2906,9 @@ test_read_filtered_dataset_no_overlap(void)
start[1] = 0;
if (VERBOSE_MED) {
- HDprintf("Process %d is reading with count[ %llu, %llu ], stride[ %llu, %llu ], start[ %llu, %llu ], "
- "block size[ %llu, %llu ]\n",
+ HDprintf("Process %d is reading with count[ %" PRIuHSIZE ", %" PRIuHSIZE " ], stride[ %" PRIuHSIZE
+ ", %" PRIuHSIZE " ], start[ %" PRIuHSIZE ", %" PRIuHSIZE " ], block size[ %" PRIuHSIZE
+ ", %" PRIuHSIZE " ]\n",
mpi_rank, count[0], count[1], stride[0], stride[1], start[0], start[1], block[0], block[1]);
HDfflush(stdout);
}
@@ -3094,8 +3111,9 @@ test_read_filtered_dataset_overlap(void)
start[1] = 0;
if (VERBOSE_MED) {
- HDprintf("Process %d is reading with count[ %llu, %llu ], stride[ %llu, %llu ], start[ %llu, %llu ], "
- "block size[ %llu, %llu ]\n",
+ HDprintf("Process %d is reading with count[ %" PRIuHSIZE ", %" PRIuHSIZE " ], stride[ %" PRIuHSIZE
+ ", %" PRIuHSIZE " ], start[ %" PRIuHSIZE ", %" PRIuHSIZE " ], block size[ %" PRIuHSIZE
+ ", %" PRIuHSIZE " ]\n",
mpi_rank, count[0], count[1], stride[0], stride[1], start[0], start[1], block[0], block[1]);
HDfflush(stdout);
}
@@ -3324,8 +3342,9 @@ test_read_filtered_dataset_single_no_selection(void)
start[1] = 0;
if (VERBOSE_MED) {
- HDprintf("Process %d is reading with count[ %llu, %llu ], stride[ %llu, %llu ], start[ %llu, %llu ], "
- "block size[ %llu, %llu ]\n",
+ HDprintf("Process %d is reading with count[ %" PRIuHSIZE ", %" PRIuHSIZE " ], stride[ %" PRIuHSIZE
+ ", %" PRIuHSIZE " ], start[ %" PRIuHSIZE ", %" PRIuHSIZE " ], block size[ %" PRIuHSIZE
+ ", %" PRIuHSIZE " ]\n",
mpi_rank, count[0], count[1], stride[0], stride[1], start[0], start[1], block[0], block[1]);
HDfflush(stdout);
}
@@ -3906,8 +3925,9 @@ test_read_filtered_dataset_interleaved_read(void)
start[1] = 0;
if (VERBOSE_MED) {
- HDprintf("Process %d is reading with count[ %llu, %llu ], stride[ %llu, %llu ], start[ %llu, %llu ], "
- "block size[ %llu, %llu ]\n",
+ HDprintf("Process %d is reading with count[ %" PRIuHSIZE ", %" PRIuHSIZE " ], stride[ %" PRIuHSIZE
+ ", %" PRIuHSIZE " ], start[ %" PRIuHSIZE ", %" PRIuHSIZE " ], block size[ %" PRIuHSIZE
+ ", %" PRIuHSIZE " ]\n",
mpi_rank, count[0], count[1], stride[0], stride[1], start[0], start[1], block[0], block[1]);
HDfflush(stdout);
}
@@ -4135,8 +4155,9 @@ test_read_3d_filtered_dataset_no_overlap_separate_pages(void)
start[2] = (hsize_t)mpi_rank;
if (VERBOSE_MED) {
- HDprintf("Process %d is reading with count[ %llu, %llu ], stride[ %llu, %llu ], start[ %llu, %llu ], "
- "block size[ %llu, %llu ]\n",
+ HDprintf("Process %d is reading with count[ %" PRIuHSIZE ", %" PRIuHSIZE " ], stride[ %" PRIuHSIZE
+ ", %" PRIuHSIZE " ], start[ %" PRIuHSIZE ", %" PRIuHSIZE " ], block size[ %" PRIuHSIZE
+ ", %" PRIuHSIZE " ]\n",
mpi_rank, count[0], count[1], stride[0], stride[1], start[0], start[1], block[0], block[1]);
HDfflush(stdout);
}
@@ -4351,8 +4372,9 @@ test_read_3d_filtered_dataset_no_overlap_same_pages(void)
start[2] = 0;
if (VERBOSE_MED) {
- HDprintf("Process %d is reading with count[ %llu, %llu ], stride[ %llu, %llu ], start[ %llu, %llu ], "
- "block size[ %llu, %llu ]\n",
+ HDprintf("Process %d is reading with count[ %" PRIuHSIZE ", %" PRIuHSIZE " ], stride[ %" PRIuHSIZE
+ ", %" PRIuHSIZE " ], start[ %" PRIuHSIZE ", %" PRIuHSIZE " ], block size[ %" PRIuHSIZE
+ ", %" PRIuHSIZE " ]\n",
mpi_rank, count[0], count[1], stride[0], stride[1], start[0], start[1], block[0], block[1]);
HDfflush(stdout);
}
@@ -4574,8 +4596,9 @@ test_read_3d_filtered_dataset_overlap(void)
start[2] = 0;
if (VERBOSE_MED) {
- HDprintf("Process %d is reading with count[ %llu, %llu ], stride[ %llu, %llu ], start[ %llu, %llu ], "
- "block size[ %llu, %llu ]\n",
+ HDprintf("Process %d is reading with count[ %" PRIuHSIZE ", %" PRIuHSIZE " ], stride[ %" PRIuHSIZE
+ ", %" PRIuHSIZE " ], start[ %" PRIuHSIZE ", %" PRIuHSIZE " ], block size[ %" PRIuHSIZE
+ ", %" PRIuHSIZE " ]\n",
mpi_rank, count[0], count[1], stride[0], stride[1], start[0], start[1], block[0], block[1]);
HDfflush(stdout);
}
@@ -4807,8 +4830,9 @@ test_read_cmpd_filtered_dataset_no_conversion_unshared(void)
start[1] = ((hsize_t)mpi_rank * READ_COMPOUND_FILTERED_CHUNKS_NO_CONVERSION_UNSHARED_CH_NCOLS);
if (VERBOSE_MED) {
- HDprintf("Process %d is reading with count[ %llu, %llu ], stride[ %llu, %llu ], start[ %llu, %llu ], "
- "block size[ %llu, %llu ]\n",
+ HDprintf("Process %d is reading with count[ %" PRIuHSIZE ", %" PRIuHSIZE " ], stride[ %" PRIuHSIZE
+ ", %" PRIuHSIZE " ], start[ %" PRIuHSIZE ", %" PRIuHSIZE " ], block size[ %" PRIuHSIZE
+ ", %" PRIuHSIZE " ]\n",
mpi_rank, count[0], count[1], stride[0], stride[1], start[0], start[1], block[0], block[1]);
HDfflush(stdout);
}
@@ -5035,8 +5059,9 @@ test_read_cmpd_filtered_dataset_no_conversion_shared(void)
start[1] = 0;
if (VERBOSE_MED) {
- HDprintf("Process %d is reading with count[ %llu, %llu ], stride[ %llu, %llu ], start[ %llu, %llu ], "
- "block size[ %llu, %llu ]\n",
+ HDprintf("Process %d is reading with count[ %" PRIuHSIZE ", %" PRIuHSIZE " ], stride[ %" PRIuHSIZE
+ ", %" PRIuHSIZE " ], start[ %" PRIuHSIZE ", %" PRIuHSIZE " ], block size[ %" PRIuHSIZE
+ ", %" PRIuHSIZE " ]\n",
mpi_rank, count[0], count[1], stride[0], stride[1], start[0], start[1], block[0], block[1]);
HDfflush(stdout);
}
@@ -5265,8 +5290,9 @@ test_read_cmpd_filtered_dataset_type_conversion_unshared(void)
start[1] = ((hsize_t)mpi_rank * READ_COMPOUND_FILTERED_CHUNKS_TYPE_CONVERSION_UNSHARED_CH_NCOLS);
if (VERBOSE_MED) {
- HDprintf("Process %d is reading with count[ %llu, %llu ], stride[ %llu, %llu ], start[ %llu, %llu ], "
- "block size[ %llu, %llu ]\n",
+ HDprintf("Process %d is reading with count[ %" PRIuHSIZE ", %" PRIuHSIZE " ], stride[ %" PRIuHSIZE
+ ", %" PRIuHSIZE " ], start[ %" PRIuHSIZE ", %" PRIuHSIZE " ], block size[ %" PRIuHSIZE
+ ", %" PRIuHSIZE " ]\n",
mpi_rank, count[0], count[1], stride[0], stride[1], start[0], start[1], block[0], block[1]);
HDfflush(stdout);
}
@@ -5502,8 +5528,9 @@ test_read_cmpd_filtered_dataset_type_conversion_shared(void)
start[1] = 0;
if (VERBOSE_MED) {
- HDprintf("Process %d is reading with count[ %llu, %llu ], stride[ %llu, %llu ], start[ %llu, %llu ], "
- "block size[ %llu, %llu ]\n",
+ HDprintf("Process %d is reading with count[ %" PRIuHSIZE ", %" PRIuHSIZE " ], stride[ %" PRIuHSIZE
+ ", %" PRIuHSIZE " ], start[ %" PRIuHSIZE ", %" PRIuHSIZE " ], block size[ %" PRIuHSIZE
+ ", %" PRIuHSIZE " ]\n",
mpi_rank, count[0], count[1], stride[0], stride[1], start[0], start[1], block[0], block[1]);
HDfflush(stdout);
}
@@ -5803,8 +5830,10 @@ test_write_parallel_read_serial(void)
offset[2] = 0;
if (VERBOSE_MED) {
- HDprintf("Process %d is writing with count[ %llu, %llu, %llu ], stride[ %llu, %llu, %llu ], offset[ "
- "%llu, %llu, %llu ], block size[ %llu, %llu, %llu ]\n",
+ HDprintf("Process %d is writing with count[ %" PRIuHSIZE ", %" PRIuHSIZE ", %" PRIuHSIZE
+ " ], stride[ %" PRIuHSIZE ", %" PRIuHSIZE ", %" PRIuHSIZE " ], offset[ %" PRIuHSIZE
+ ", %" PRIuHSIZE ", %" PRIuHSIZE " ], block size[ %" PRIuHSIZE ", %" PRIuHSIZE ", %" PRIuHSIZE
+ " ]\n",
mpi_rank, count[0], count[1], count[2], stride[0], stride[1], stride[2], offset[0],
offset[1], offset[2], block[0], block[1], block[2]);
HDfflush(stdout);
@@ -5973,8 +6002,9 @@ test_shrinking_growing_chunks(void)
start[1] = 0;
if (VERBOSE_MED) {
- HDprintf("Process %d is writing with count[ %llu, %llu ], stride[ %llu, %llu ], start[ %llu, %llu ], "
- "block size[ %llu, %llu ]\n",
+ HDprintf("Process %d is writing with count[ %" PRIuHSIZE ", %" PRIuHSIZE " ], stride[ %" PRIuHSIZE
+ ", %" PRIuHSIZE " ], start[ %" PRIuHSIZE ", %" PRIuHSIZE " ], block size[ %" PRIuHSIZE
+ ", %" PRIuHSIZE " ]\n",
mpi_rank, count[0], count[1], stride[0], stride[1], start[0], start[1], block[0], block[1]);
HDfflush(stdout);
}
diff --git a/testpar/t_shapesame.c b/testpar/t_shapesame.c
index 9ef3178..1c5e875 100644
--- a/testpar/t_shapesame.c
+++ b/testpar/t_shapesame.c
@@ -2000,8 +2000,8 @@ contig_hs_dr_pio_test(ShapeSameTestMethods sstest_type)
}
if ((MAINPROCESS) && (tests_skipped > 0)) {
- HDfprintf(stdout, " %lld of %lld subtests skipped to expedite testing.\n", tests_skipped,
- total_tests);
+ HDfprintf(stdout, " %" PRId64 " of %" PRId64 " subtests skipped to expedite testing.\n",
+ tests_skipped, total_tests);
}
return;
@@ -3913,16 +3913,16 @@ ckrbrd_hs_dr_pio_test(ShapeSameTestMethods sstest_type)
} /* end of switch(sstest_type) */
#if CONTIG_HS_DR_PIO_TEST__DEBUG
if ((MAINPROCESS) && (tests_skipped > 0)) {
- HDfprintf(stdout, " run/skipped/total = %lld/%lld/%lld.\n", tests_run, tests_skipped,
- total_tests);
+ HDfprintf(stdout, " run/skipped/total = %" PRId64 "/%" PRId64 "/%" PRId64 ".\n",
+ tests_run, tests_skipped, total_tests);
}
#endif /* CONTIG_HS_DR_PIO_TEST__DEBUG */
}
}
if ((MAINPROCESS) && (tests_skipped > 0)) {
- HDfprintf(stdout, " %lld of %lld subtests skipped to expedite testing.\n", tests_skipped,
- total_tests);
+ HDfprintf(stdout, " %" PRId64 " of %" PRId64 " subtests skipped to expedite testing.\n",
+ tests_skipped, total_tests);
}
return;
diff --git a/tools/lib/h5diff_util.c b/tools/lib/h5diff_util.c
index ade7dcd..0c20447 100644
--- a/tools/lib/h5diff_util.c
+++ b/tools/lib/h5diff_util.c
@@ -322,9 +322,9 @@ void
print_found(hsize_t nfound)
{
if (g_Parallel)
- parallel_print("%" H5_PRINTF_LL_WIDTH "u differences found\n", (unsigned long long)nfound);
+ parallel_print("%" PRIuHSIZE " differences found\n", nfound);
else
- HDfprintf(stdout, "%Hu differences found\n", nfound);
+ HDfprintf(stdout, "%" PRIuHSIZE " differences found\n", nfound);
}
/*-----------------------------------------------------------------
diff --git a/tools/lib/h5tools_dump.c b/tools/lib/h5tools_dump.c
index 34b70ac..56ffd27 100644
--- a/tools/lib/h5tools_dump.c
+++ b/tools/lib/h5tools_dump.c
@@ -81,8 +81,8 @@ h5tool_format_t h5tools_dataformat = {
1, /*skip_first */
- 1, /*obj_hidefileno */
- " " H5_PRINTF_HADDR_FMT, /*obj_format */
+ 1, /*obj_hidefileno */
+ " %" PRIuHADDR, /*obj_format */
1, /*dset_hidefileno */
"DATASET %s ", /*dset_format */
@@ -3331,7 +3331,7 @@ h5tools_dump_dcpl(FILE *stream, const h5tool_format_t *info, h5tools_context_t *
if (HADDR_UNDEF == ioffset)
h5tools_str_append(&buffer, "OFFSET HADDR_UNDEF");
else
- h5tools_str_append(&buffer, "OFFSET " H5_PRINTF_HADDR_FMT, ioffset);
+ h5tools_str_append(&buffer, "OFFSET %" PRIuHADDR, ioffset);
h5tools_render_element(stream, info, ctx, &buffer, &curr_pos, (size_t)ncols, (hsize_t)0,
(hsize_t)0);
}
diff --git a/tools/src/h5dump/h5dump_ddl.c b/tools/src/h5dump/h5dump_ddl.c
index 94dc1fd..8c637b1 100644
--- a/tools/src/h5dump/h5dump_ddl.c
+++ b/tools/src/h5dump/h5dump_ddl.c
@@ -1252,9 +1252,9 @@ dump_fcpl(hid_t fid)
indentation(dump_indent + COL);
PRINTSTREAM(rawoutstream, "%s %s\n", "FREE_SPACE_PERSIST", fs_persist ? "TRUE" : "FALSE");
indentation(dump_indent + COL);
- PRINTSTREAM(rawoutstream, "%s %Hu\n", "FREE_SPACE_SECTION_THRESHOLD", fs_threshold);
+ PRINTSTREAM(rawoutstream, "%s %" PRIuHSIZE "\n", "FREE_SPACE_SECTION_THRESHOLD", fs_threshold);
indentation(dump_indent + COL);
- PRINTSTREAM(rawoutstream, "%s %Hu\n", "FILE_SPACE_PAGE_SIZE", fsp_size);
+ PRINTSTREAM(rawoutstream, "%s %" PRIuHSIZE "\n", "FILE_SPACE_PAGE_SIZE", fsp_size);
/*-------------------------------------------------------------------------
* USER_BLOCK
@@ -1263,7 +1263,7 @@ dump_fcpl(hid_t fid)
indentation(dump_indent + COL);
PRINTSTREAM(rawoutstream, "USER_BLOCK %s\n", BEGIN);
indentation(dump_indent + COL + COL);
- PRINTSTREAM(rawoutstream, "%s %Hu\n", "USERBLOCK_SIZE", userblock);
+ PRINTSTREAM(rawoutstream, "%s %" PRIuHSIZE "\n", "USERBLOCK_SIZE", userblock);
indentation(dump_indent + COL);
PRINTSTREAM(rawoutstream, "%s\n", END);
diff --git a/tools/src/h5dump/h5dump_xml.c b/tools/src/h5dump/h5dump_xml.c
index e4bbb9b..0457d32 100644
--- a/tools/src/h5dump/h5dump_xml.c
+++ b/tools/src/h5dump/h5dump_xml.c
@@ -93,8 +93,8 @@ static h5tool_format_t xml_dataformat = {
1, /*skip_first */
- 1, /*obj_hidefileno */
- " " H5_PRINTF_HADDR_FMT, /*obj_format */
+ 1, /*obj_hidefileno */
+ " %" PRIuHADDR, /*obj_format */
1, /*dset_hidefileno */
"DATASET %s ", /*dset_format */
diff --git a/tools/src/h5import/h5import.c b/tools/src/h5import/h5import.c
index 14de44b..7a7887f 100644
--- a/tools/src/h5import/h5import.c
+++ b/tools/src/h5import/h5import.c
@@ -946,7 +946,7 @@ readFloatData(FILE *strm, struct Input *in)
*
* Return: 0, ok, -1 no
*
- * Programmer: Pedro Vicente, pvn@hdfgroup.org
+ * Programmer: Pedro Vicente
*
* Date: July, 26, 2007
*
diff --git a/tools/src/h5ls/h5ls.c b/tools/src/h5ls/h5ls.c
index 68a8647..9ebd4d5 100644
--- a/tools/src/h5ls/h5ls.c
+++ b/tools/src/h5ls/h5ls.c
@@ -95,8 +95,8 @@ static h5tool_format_t ls_dataformat = {
0, /*skip_first */
- 0, /*obj_hidefileno */
- "-%lu:" H5_PRINTF_HADDR_FMT, /*obj_format */
+ 0, /*obj_hidefileno */
+ "-%lu:%" PRIuHADDR, /*obj_format */
0, /*dset_hidefileno */
"DSET-%s ", /*dset_format */
@@ -965,7 +965,7 @@ print_enum_type(h5tools_str_t *buffer, hid_t type, int ind)
/*On SGI Altix(cobalt), wrong values were printed out with "value+i*dst_size"
*strangely, unless use another pointer "copy".*/
copy = value + i * dst_size;
- h5tools_str_append(buffer, "%" H5_PRINTF_LL_WIDTH "d", *((long long *)((void *)copy)));
+ h5tools_str_append(buffer, "%lld", *((long long *)((void *)copy)));
}
}
@@ -1908,10 +1908,9 @@ dataset_list2(hid_t dset, const char H5_ATTR_UNUSED *name)
print_string(&buffer, f_name, TRUE);
}
else {
- h5tools_str_append(&buffer,
- " #%03d %10" H5_PRINTF_LL_WIDTH
- "u %10" H5_PRINTF_LL_WIDTH "u %10" H5_PRINTF_LL_WIDTH "u ",
- i, total, (hsize_t)f_offset, f_size);
+ h5tools_str_append(
+ &buffer, " #%03d %10" PRIuHSIZE " %10" PRIuHSIZE " %10" PRIuHSIZE " ",
+ i, total, (hsize_t)f_offset, f_size);
print_string(&buffer, f_name, TRUE);
}
h5tools_str_append(&buffer, "\n");
diff --git a/tools/src/h5repack/h5repack.c b/tools/src/h5repack/h5repack.c
index 395b66b..a1764df 100644
--- a/tools/src/h5repack/h5repack.c
+++ b/tools/src/h5repack/h5repack.c
@@ -718,7 +718,7 @@ check_options(pack_opt_t *options)
}
if (options->ublock_filename == NULL && options->ublock_size != 0)
- H5TOOLS_GOTO_ERROR((-1), "file name missing for user block", options->ublock_filename);
+ H5TOOLS_GOTO_ERROR((-1), "file name missing for user block");
/*------------------------------------------------------------------------
* Verify alignment options; threshold is zero default but alignment not
diff --git a/tools/src/h5stat/h5stat.c b/tools/src/h5stat/h5stat.c
index f834706..12a408e 100644
--- a/tools/src/h5stat/h5stat.c
+++ b/tools/src/h5stat/h5stat.c
@@ -1196,7 +1196,7 @@ print_file_info(const iter_t *iter)
HDprintf("\t# of unique links: %lu\n", iter->uniq_links);
HDprintf("\t# of unique other: %lu\n", iter->uniq_others);
HDprintf("\tMax. # of links to object: %lu\n", iter->max_links);
- HDfprintf(stdout, "\tMax. # of objects in group: %Hu\n", iter->max_fanout);
+ HDfprintf(stdout, "\tMax. # of objects in group: %" PRIuHSIZE "\n", iter->max_fanout);
return 0;
} /* print_file_info() */
@@ -1219,40 +1219,40 @@ static herr_t
print_file_metadata(const iter_t *iter)
{
HDfprintf(stdout, "File space information for file metadata (in bytes):\n");
- HDfprintf(stdout, "\tSuperblock: %Hu\n", iter->super_size);
- HDfprintf(stdout, "\tSuperblock extension: %Hu\n", iter->super_ext_size);
- HDfprintf(stdout, "\tUser block: %Hu\n", iter->ublk_size);
+ HDfprintf(stdout, "\tSuperblock: %" PRIuHSIZE "\n", iter->super_size);
+ HDfprintf(stdout, "\tSuperblock extension: %" PRIuHSIZE "\n", iter->super_ext_size);
+ HDfprintf(stdout, "\tUser block: %" PRIuHSIZE "\n", iter->ublk_size);
HDfprintf(stdout, "\tObject headers: (total/unused)\n");
- HDfprintf(stdout, "\t\tGroups: %Hu/%Hu\n", iter->group_ohdr_info.total_size,
+ HDfprintf(stdout, "\t\tGroups: %" PRIuHSIZE "/%" PRIuHSIZE "\n", iter->group_ohdr_info.total_size,
iter->group_ohdr_info.free_size);
- HDfprintf(stdout, "\t\tDatasets(exclude compact data): %Hu/%Hu\n", iter->dset_ohdr_info.total_size,
- iter->dset_ohdr_info.free_size);
- HDfprintf(stdout, "\t\tDatatypes: %Hu/%Hu\n", iter->dtype_ohdr_info.total_size,
+ HDfprintf(stdout, "\t\tDatasets(exclude compact data): %" PRIuHSIZE "/%" PRIuHSIZE "\n",
+ iter->dset_ohdr_info.total_size, iter->dset_ohdr_info.free_size);
+ HDfprintf(stdout, "\t\tDatatypes: %" PRIuHSIZE "/%" PRIuHSIZE "\n", iter->dtype_ohdr_info.total_size,
iter->dtype_ohdr_info.free_size);
HDfprintf(stdout, "\tGroups:\n");
- HDfprintf(stdout, "\t\tB-tree/List: %Hu\n", iter->groups_btree_storage_size);
- HDfprintf(stdout, "\t\tHeap: %Hu\n", iter->groups_heap_storage_size);
+ HDfprintf(stdout, "\t\tB-tree/List: %" PRIuHSIZE "\n", iter->groups_btree_storage_size);
+ HDfprintf(stdout, "\t\tHeap: %" PRIuHSIZE "\n", iter->groups_heap_storage_size);
HDfprintf(stdout, "\tAttributes:\n");
- HDfprintf(stdout, "\t\tB-tree/List: %Hu\n", iter->attrs_btree_storage_size);
- HDfprintf(stdout, "\t\tHeap: %Hu\n", iter->attrs_heap_storage_size);
+ HDfprintf(stdout, "\t\tB-tree/List: %" PRIuHSIZE "\n", iter->attrs_btree_storage_size);
+ HDfprintf(stdout, "\t\tHeap: %" PRIuHSIZE "\n", iter->attrs_heap_storage_size);
HDfprintf(stdout, "\tChunked datasets:\n");
- HDfprintf(stdout, "\t\tIndex: %Hu\n", iter->datasets_index_storage_size);
+ HDfprintf(stdout, "\t\tIndex: %" PRIuHSIZE "\n", iter->datasets_index_storage_size);
HDfprintf(stdout, "\tDatasets:\n");
- HDfprintf(stdout, "\t\tHeap: %Hu\n", iter->datasets_heap_storage_size);
+ HDfprintf(stdout, "\t\tHeap: %" PRIuHSIZE "\n", iter->datasets_heap_storage_size);
HDfprintf(stdout, "\tShared Messages:\n");
- HDfprintf(stdout, "\t\tHeader: %Hu\n", iter->SM_hdr_storage_size);
- HDfprintf(stdout, "\t\tB-tree/List: %Hu\n", iter->SM_index_storage_size);
- HDfprintf(stdout, "\t\tHeap: %Hu\n", iter->SM_heap_storage_size);
+ HDfprintf(stdout, "\t\tHeader: %" PRIuHSIZE "\n", iter->SM_hdr_storage_size);
+ HDfprintf(stdout, "\t\tB-tree/List: %" PRIuHSIZE "\n", iter->SM_index_storage_size);
+ HDfprintf(stdout, "\t\tHeap: %" PRIuHSIZE "\n", iter->SM_heap_storage_size);
HDfprintf(stdout, "\tFree-space managers:\n");
- HDfprintf(stdout, "\t\tHeader: %Hu\n", iter->free_hdr);
- HDfprintf(stdout, "\t\tAmount of free space: %Hu\n", iter->free_space);
+ HDfprintf(stdout, "\t\tHeader: %" PRIuHSIZE "\n", iter->free_hdr);
+ HDfprintf(stdout, "\t\tAmount of free space: %" PRIuHSIZE "\n", iter->free_space);
return 0;
} /* print_file_metadata() */
@@ -1330,11 +1330,11 @@ print_group_metadata(const iter_t *iter)
{
HDprintf("File space information for groups' metadata (in bytes):\n");
- HDfprintf(stdout, "\tObject headers (total/unused): %Hu/%Hu\n", iter->group_ohdr_info.total_size,
- iter->group_ohdr_info.free_size);
+ HDfprintf(stdout, "\tObject headers (total/unused): %" PRIuHSIZE "/%" PRIuHSIZE "\n",
+ iter->group_ohdr_info.total_size, iter->group_ohdr_info.free_size);
- HDfprintf(stdout, "\tB-tree/List: %Hu\n", iter->groups_btree_storage_size);
- HDfprintf(stdout, "\tHeap: %Hu\n", iter->groups_heap_storage_size);
+ HDfprintf(stdout, "\tB-tree/List: %" PRIuHSIZE "\n", iter->groups_btree_storage_size);
+ HDfprintf(stdout, "\tHeap: %" PRIuHSIZE "\n", iter->groups_heap_storage_size);
return 0;
} /* print_group_metadata() */
@@ -1368,7 +1368,7 @@ print_dataset_info(const iter_t *iter)
HDprintf("\t\t# of dataset with rank %u: %lu\n", u, iter->dset_rank_count[u]);
HDprintf("1-D Dataset information:\n");
- HDfprintf(stdout, "\tMax. dimension size of 1-D datasets: %Hu\n", iter->max_dset_dims);
+ HDfprintf(stdout, "\tMax. dimension size of 1-D datasets: %" PRIuHSIZE "\n", iter->max_dset_dims);
HDprintf("\tSmall 1-D datasets (with dimension sizes 0 to %u):\n", sdsets_threshold - 1);
total = 0;
for (u = 0; u < (unsigned)sdsets_threshold; u++) {
@@ -1400,8 +1400,9 @@ print_dataset_info(const iter_t *iter)
} /* end if */
HDprintf("Dataset storage information:\n");
- HDfprintf(stdout, "\tTotal raw data size: %Hu\n", iter->dset_storage_size);
- HDfprintf(stdout, "\tTotal external raw data size: %Hu\n", iter->dset_external_storage_size);
+ HDfprintf(stdout, "\tTotal raw data size: %" PRIuHSIZE "\n", iter->dset_storage_size);
+ HDfprintf(stdout, "\tTotal external raw data size: %" PRIuHSIZE "\n",
+ iter->dset_external_storage_size);
HDprintf("Dataset layout information:\n");
for (u = 0; u < H5D_NLAYOUTS; u++)
@@ -1445,11 +1446,11 @@ print_dset_metadata(const iter_t *iter)
{
HDprintf("File space information for datasets' metadata (in bytes):\n");
- HDfprintf(stdout, "\tObject headers (total/unused): %Hu/%Hu\n", iter->dset_ohdr_info.total_size,
- iter->dset_ohdr_info.free_size);
+ HDfprintf(stdout, "\tObject headers (total/unused): %" PRIuHSIZE "/%" PRIuHSIZE "\n",
+ iter->dset_ohdr_info.total_size, iter->dset_ohdr_info.free_size);
- HDfprintf(stdout, "\tIndex for Chunked datasets: %Hu\n", iter->datasets_index_storage_size);
- HDfprintf(stdout, "\tHeap: %Hu\n", iter->datasets_heap_storage_size);
+ HDfprintf(stdout, "\tIndex for Chunked datasets: %" PRIuHSIZE "\n", iter->datasets_index_storage_size);
+ HDfprintf(stdout, "\tHeap: %" PRIuHSIZE "\n", iter->datasets_heap_storage_size);
return 0;
} /* print_dset_metadata() */
@@ -1563,7 +1564,7 @@ print_freespace_info(const iter_t *iter)
unsigned u; /* Local index variable */
HDfprintf(stdout, "Free-space persist: %s\n", iter->fs_persist ? "TRUE" : "FALSE");
- HDfprintf(stdout, "Free-space section threshold: %Hu bytes\n", iter->fs_threshold);
+ HDfprintf(stdout, "Free-space section threshold: %" PRIuHSIZE " bytes\n", iter->fs_threshold);
HDprintf("Small size free-space sections (< %u bytes):\n", (unsigned)SIZE_SMALL_SECTS);
total = 0;
for (u = 0; u < SIZE_SMALL_SECTS; u++) {
@@ -1611,7 +1612,7 @@ print_storage_summary(const iter_t *iter)
double percent = 0.0f;
HDfprintf(stdout, "File space management strategy: %s\n", FS_STRATEGY_NAME[iter->fs_strategy]);
- HDfprintf(stdout, "File space page size: %Hu bytes\n", iter->fsp_size);
+ HDfprintf(stdout, "File space page size: %" PRIuHSIZE " bytes\n", iter->fsp_size);
HDprintf("Summary of file space information:\n");
total_meta =
iter->super_size + iter->super_ext_size + iter->ublk_size + iter->group_ohdr_info.total_size +
@@ -1620,27 +1621,28 @@ print_storage_summary(const iter_t *iter)
iter->datasets_index_storage_size + iter->datasets_heap_storage_size + iter->SM_hdr_storage_size +
iter->SM_index_storage_size + iter->SM_heap_storage_size + iter->free_hdr;
- HDfprintf(stdout, " File metadata: %Hu bytes\n", total_meta);
- HDfprintf(stdout, " Raw data: %Hu bytes\n", iter->dset_storage_size);
+ HDfprintf(stdout, " File metadata: %" PRIuHSIZE " bytes\n", total_meta);
+ HDfprintf(stdout, " Raw data: %" PRIuHSIZE " bytes\n", iter->dset_storage_size);
percent = ((double)iter->free_space / (double)iter->filesize) * (double)100.0f;
- HDfprintf(stdout, " Amount/Percent of tracked free space: %Hu bytes/%3.1f%\n", iter->free_space,
- percent);
+ HDfprintf(stdout, " Amount/Percent of tracked free space: %" PRIuHSIZE " bytes/%3.1f%%\n",
+ iter->free_space, percent);
if (iter->filesize < (total_meta + iter->dset_storage_size + iter->free_space)) {
unaccount = (total_meta + iter->dset_storage_size + iter->free_space) - iter->filesize;
- HDfprintf(stdout, " ??? File has %Hu more bytes accounted for than its size! ???\n", unaccount);
+ HDfprintf(stdout, " ??? File has %" PRIuHSIZE " more bytes accounted for than its size! ???\n",
+ unaccount);
}
else {
unaccount = iter->filesize - (total_meta + iter->dset_storage_size + iter->free_space);
- HDfprintf(stdout, " Unaccounted space: %Hu bytes\n", unaccount);
+ HDfprintf(stdout, " Unaccounted space: %" PRIuHSIZE " bytes\n", unaccount);
}
- HDfprintf(stdout, "Total space: %Hu bytes\n",
+ HDfprintf(stdout, "Total space: %" PRIuHSIZE " bytes\n",
total_meta + iter->dset_storage_size + iter->free_space + unaccount);
if (iter->nexternal)
- HDfprintf(stdout, "External raw data: %Hu bytes\n", iter->dset_external_storage_size);
+ HDfprintf(stdout, "External raw data: %" PRIuHSIZE " bytes\n", iter->dset_external_storage_size);
return 0;
} /* print_storage_summary() */
diff --git a/tools/src/misc/h5clear.c b/tools/src/misc/h5clear.c
index 0ef9483..a931833 100644
--- a/tools/src/misc/h5clear.c
+++ b/tools/src/misc/h5clear.c
@@ -358,7 +358,7 @@ main(int argc, const char *argv[])
h5tools_setstatus(EXIT_FAILURE);
goto done;
}
- HDfprintf(stdout, "EOA is %a; EOF is %a \n", eoa, st.st_size);
+ HDfprintf(stdout, "EOA is %" PRIuHADDR "; EOF is %" PRIuHADDR " \n", eoa, (haddr_t)st.st_size);
}
/* --increment option */
diff --git a/tools/src/misc/h5debug.c b/tools/src/misc/h5debug.c
index 268498f..85abb8a 100644
--- a/tools/src/misc/h5debug.c
+++ b/tools/src/misc/h5debug.c
@@ -347,7 +347,7 @@ main(int argc, char *argv[])
/*
* Read the signature at the specified file position.
*/
- HDfprintf(stdout, "Reading signature at address %a (rel)\n", addr);
+ HDfprintf(stdout, "Reading signature at address %" PRIuHADDR " (rel)\n", addr);
if (H5F_block_read(f, H5FD_MEM_SUPER, addr, sizeof(sig), sig) < 0) {
HDfprintf(stderr, "cannot read signature\n");
exit_value = 3;
diff --git a/tools/test/perform/chunk.c b/tools/test/perform/chunk.c
index 90ae815..9f99ce9 100644
--- a/tools/test/perform/chunk.c
+++ b/tools/test/perform/chunk.c
@@ -12,7 +12,7 @@
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/*
- * Programmer: Robb Matzke <robb@arborea.spizella.com>
+ * Programmer: Robb Matzke
* Thursday, May 14, 1998
*
* Purpose: Checks the effect of various I/O request sizes and raw data
diff --git a/tools/test/perform/chunk_cache.c b/tools/test/perform/chunk_cache.c
index 9a6d5fa..3a6a209 100644
--- a/tools/test/perform/chunk_cache.c
+++ b/tools/test/perform/chunk_cache.c
@@ -259,11 +259,11 @@ check_partial_chunks_perf(hid_t file)
end_t = H5_get_time();
if ((end_t - start_t) > (double)0.0f)
- printf("1. Partial chunks: total read time is %lf; number of bytes being read from file is %lu\n",
+ printf("1. Partial chunks: total read time is %lf; number of bytes being read from file is %zu\n",
(end_t - start_t), nbytes_global);
else
printf("1. Partial chunks: no total read time because timer is not available; number of bytes being "
- "read from file is %lu\n",
+ "read from file is %zu\n",
nbytes_global);
H5Dclose(dataset);
@@ -337,11 +337,11 @@ check_hash_value_perf(hid_t file)
end_t = H5_get_time();
if ((end_t - start_t) > (double)0.0f)
- printf("2. Hash value: total read time is %lf; number of bytes being read from file is %lu\n",
+ printf("2. Hash value: total read time is %lf; number of bytes being read from file is %zu\n",
(end_t - start_t), nbytes_global);
else
printf("2. Hash value: no total read time because timer is not available; number of bytes being read "
- "from file is %lu\n",
+ "from file is %zu\n",
nbytes_global);
H5Dclose(dataset);
diff --git a/tools/test/perform/perf.c b/tools/test/perform/perf.c
index 6d467e1..22aca04 100644
--- a/tools/test/perform/perf.c
+++ b/tools/test/perform/perf.c
@@ -313,7 +313,7 @@ main(int argc, char **argv)
VRFY((ret >= 0), "H5Dwrite dataset1 succeeded", !H5FATAL);
if (ret < 0)
- HDfprintf(stderr, "node %d, read error, loc = %Ld: %s\n", mynod, mynod * opt_block,
+ HDfprintf(stderr, "node %d, read error, loc = %" PRId64 ": %s\n", mynod, mynod * opt_block,
strerror(myerrno));
/* if the user wanted to check correctness, compare the write
@@ -427,7 +427,8 @@ parse_args(int argc, char **argv)
if (NULL != (p = (char *)HDstrchr(optarg, '/')))
opt_threshold = (hsize_t)HDatoi(p + 1);
}
- HDfprintf(stdout, "alignment/threshold=%Hu/%Hu\n", opt_alignment, opt_threshold);
+ HDfprintf(stdout, "alignment/threshold=%" PRIuHSIZE "/%" PRIuHSIZE "\n", opt_alignment,
+ opt_threshold);
break;
case '2': /* use 2-files, i.e., split file driver */
opt_split_vfd = 1;
diff --git a/tools/test/perform/pio_standalone.h b/tools/test/perform/pio_standalone.h
index 0e0ac26..d64f421 100644
--- a/tools/test/perform/pio_standalone.h
+++ b/tools/test/perform/pio_standalone.h
@@ -130,12 +130,12 @@
#else /* H5_HAVE_WIN32_API */
#define HDfileno(F) fileno(F)
#endif /* H5_HAVE_WIN32_API */
-#define HDfloor(X) floor(X)
-#define HDfmod(X, Y) fmod(X, Y)
-#define HDfopen(S, M) fopen(S, M)
-#define HDfork() fork()
-#define HDfpathconf(F, N) fpathconf(F, N)
-H5_DLL int HDfprintf(FILE *stream, const char *fmt, ...);
+#define HDfloor(X) floor(X)
+#define HDfmod(X, Y) fmod(X, Y)
+#define HDfopen(S, M) fopen(S, M)
+#define HDfork() fork()
+#define HDfpathconf(F, N) fpathconf(F, N)
+#define HDfprintf fprintf
#define HDfputc(C, F) fputc(C, F)
#define HDfputs(S, F) fputs(S, F)
#define HDfread(M, Z, N, F) fread(M, Z, N, F)
diff --git a/tools/test/perform/sio_engine.c b/tools/test/perform/sio_engine.c
index 79577b3..11001c6 100644
--- a/tools/test/perform/sio_engine.c
+++ b/tools/test/perform/sio_engine.c
@@ -783,7 +783,7 @@ do_read(results *res, file_descr *fd, parameters *parms, void *buffer)
/* Allocate data verification buffer */
if (NULL == (buffer2 = (char *)malloc(linear_buf_size))) {
- HDfprintf(stderr, "malloc for data verification buffer size (%Zu) failed\n", linear_buf_size);
+ HDfprintf(stderr, "malloc for data verification buffer size (%zu) failed\n", linear_buf_size);
GOTOERROR(FAIL);
} /* end if */
diff --git a/tools/test/perform/sio_perf.c b/tools/test/perform/sio_perf.c
index d2425fd..fb31080 100644
--- a/tools/test/perform/sio_perf.c
+++ b/tools/test/perform/sio_perf.c
@@ -872,9 +872,9 @@ report_parameters(struct options *opts)
HDfprintf(output, "\n");
if (opts->page_size) {
- HDfprintf(output, "Page Aggregation Enabled. Page size = %ld\n", opts->page_size);
+ HDfprintf(output, "Page Aggregation Enabled. Page size = %zu\n", opts->page_size);
if (opts->page_buffer_size)
- HDfprintf(output, "Page Buffering Enabled. Page Buffer size = %ld\n", opts->page_buffer_size);
+ HDfprintf(output, "Page Buffering Enabled. Page Buffer size = %zu\n", opts->page_buffer_size);
else
HDfprintf(output, "Page Buffering Disabled\n");
}
diff --git a/tools/test/perform/sio_standalone.h b/tools/test/perform/sio_standalone.h
index 02ec6c6..4001257 100644
--- a/tools/test/perform/sio_standalone.h
+++ b/tools/test/perform/sio_standalone.h
@@ -145,12 +145,12 @@
#else /* H5_HAVE_WIN32_API */
#define HDfileno(F) fileno(F)
#endif /* H5_HAVE_WIN32_API */
-#define HDfloor(X) floor(X)
-#define HDfmod(X, Y) fmod(X, Y)
-#define HDfopen(S, M) fopen(S, M)
-#define HDfork() fork()
-#define HDfpathconf(F, N) fpathconf(F, N)
-H5_DLL int HDfprintf(FILE *stream, const char *fmt, ...);
+#define HDfloor(X) floor(X)
+#define HDfmod(X, Y) fmod(X, Y)
+#define HDfopen(S, M) fopen(S, M)
+#define HDfork() fork()
+#define HDfpathconf(F, N) fpathconf(F, N)
+#define HDfprintf fprintf
#define HDfputc(C, F) fputc(C, F)
#define HDfputs(S, F) fputs(S, F)
#define HDfread(M, Z, N, F) fread(M, Z, N, F)