2
0
mirror of https://github.com/HDFGroup/hdf5.git synced 2025-03-19 16:50:46 +08:00

Merge remote-tracking branch 'hdffv/develop' into rebased-fprintf-experiment

This commit is contained in:
David Young 2020-09-03 16:13:47 -05:00
commit d85cd245d2
588 changed files with 18813 additions and 16901 deletions

@ -236,7 +236,7 @@ string (REGEX REPLACE ".*#define[ \t]+H5_VERS_MINOR[ \t]+([0-9]*).*$"
"\\1" H5_VERS_MINOR ${_h5public_h_contents})
string (REGEX REPLACE ".*#define[ \t]+H5_VERS_RELEASE[ \t]+([0-9]*).*$"
"\\1" H5_VERS_RELEASE ${_h5public_h_contents})
string (REGEX REPLACE ".*#define[ \t]+H5_VERS_SUBRELEASE[ \t]+\"([0-9A-Za-z._]*)\".*$"
string (REGEX REPLACE ".*#define[ \t]+H5_VERS_SUBRELEASE[ \t]+\"([0-9A-Za-z._\-]*)\".*$"
"\\1" H5_VERS_SUBRELEASE ${_h5public_h_contents})
#message (STATUS "VERSION: ${H5_VERS_MAJOR}.${H5_VERS_MINOR}.${H5_VERS_RELEASE}-${H5_VERS_SUBRELEASE}")
@ -339,9 +339,11 @@ set (HDF5_PACKAGE_VERSION "${H5_VERS_MAJOR}.${H5_VERS_MINOR}.${H5_VERS_RELEASE}"
set (HDF5_PACKAGE_VERSION_MAJOR "${H5_VERS_MAJOR}.${H5_VERS_MINOR}")
set (HDF5_PACKAGE_VERSION_MINOR "${H5_VERS_RELEASE}")
if (H5_VERS_SUBRELEASE)
set (HDF5_PACKAGE_VERSION_STRING "${HDF5_PACKAGE_VERSION}-${H5_VERS_SUBRELEASE}")
set (HDF5_PACKAGE_VERSION_STRING "${HDF5_PACKAGE_VERSION}.${H5_VERS_SUBRELEASE}")
set (HDF5_RELEASE_VERSION_STRING "${HDF5_PACKAGE_VERSION}-${H5_VERS_SUBRELEASE}")
else ()
set (HDF5_PACKAGE_VERSION_STRING "${HDF5_PACKAGE_VERSION}")
set (HDF5_RELEASE_VERSION_STRING "${HDF5_PACKAGE_VERSION}")
endif ()
set (HDF5_LIB_PACKAGE_SOVERSION "${H5_LIB_SOVERS_MAJOR}.${H5_LIB_SOVERS_RELEASE}.${H5_LIB_SOVERS_MINOR}")
set (HDF5_LIB_PACKAGE_SOVERSION_MAJOR "${H5_LIB_SOVERS_MAJOR}")

@ -692,6 +692,7 @@
./src/H5FDlog.h
./src/H5FDmirror.c
./src/H5FDmirror.h
./src/H5FDmirror_priv.h
./src/H5FDmodule.h
./src/H5FDmpi.c
./src/H5FDmpi.h
@ -2492,6 +2493,7 @@
./tools/test/h5diff/testfiles/h5diff_80.txt
./tools/test/h5diff/testfiles/h5diff_800.txt
./tools/test/h5diff/testfiles/h5diff_801.txt
./tools/test/h5diff/testfiles/h5diff_830.txt
./tools/test/h5diff/testfiles/h5diff_90.txt
./tools/test/h5diff/testfiles/h5diff_100.txt
./tools/test/h5diff/testfiles/h5diff_101.txt
@ -2662,6 +2664,7 @@
#test files for h5repack
./tools/test/h5repack/testfiles/README
./tools/test/h5repack/testfiles/bounds_latest_latest.h5
./tools/test/h5repack/testfiles/h5copy_extlinks_src.h5
./tools/test/h5repack/testfiles/h5repack_aggr.h5
./tools/test/h5repack/testfiles/h5repack_attr.h5
./tools/test/h5repack/testfiles/h5repack_attr_refs.h5
@ -2740,6 +2743,31 @@
./tools/test/h5repack/testfiles/4_vds.h5-vds_compa-v.ddl
./tools/test/h5repack/testfiles/attrregion.tattrreg.h5.ddl
./tools/test/h5repack/testfiles/dataregion.tdatareg.h5.ddl
./tools/test/h5repack/testfiles/textlink-base.textlink.h5.ddl
./tools/test/h5repack/testfiles/textlink-merge.textlink.h5.tst
./tools/test/h5repack/testfiles/textlink-mergeprune.textlink.h5.ddl
./tools/test/h5repack/testfiles/textlink-prune.textlink.h5.ddl
./tools/test/h5repack/testfiles/textlinkfar-base.textlinkfar.h5.ddl
./tools/test/h5repack/testfiles/textlinkfar-merge.textlinkfar.h5.tst
./tools/test/h5repack/testfiles/textlinkfar-mergeprune.textlinkfar.h5.ddl
./tools/test/h5repack/testfiles/textlinkfar-prune.textlinkfar.h5.ddl
./tools/test/h5repack/testfiles/textlinksrc-base.textlinksrc.h5.ddl
./tools/test/h5repack/testfiles/textlinksrc-merge.textlinksrc.h5.tst
./tools/test/h5repack/testfiles/textlinksrc-mergeprune.textlinksrc.h5.ddl
./tools/test/h5repack/testfiles/textlinksrc-prune.textlinksrc.h5.ddl
./tools/test/h5repack/testfiles/textlinktar-base.textlinktar.h5.ddl
./tools/test/h5repack/testfiles/textlinktar-merge.textlinktar.h5.tst
./tools/test/h5repack/testfiles/textlinktar-mergeprune.textlinktar.h5.ddl
./tools/test/h5repack/testfiles/textlinktar-prune.textlinktar.h5.ddl
./tools/test/h5repack/testfiles/tsoftlinks-base.tsoftlinks.h5.ddl
./tools/test/h5repack/testfiles/tsoftlinks-merge.tsoftlinks.h5.tst
./tools/test/h5repack/testfiles/tsoftlinks-mergeprune.tsoftlinks.h5.ddl
./tools/test/h5repack/testfiles/tsoftlinks-prune.tsoftlinks.h5.ddl
./tools/test/h5repack/testfiles/h5copy_extlinks_src-base.h5copy_extlinks_src.h5.ddl
./tools/test/h5repack/testfiles/h5copy_extlinks_src-merge.h5copy_extlinks_src.h5.tst
./tools/test/h5repack/testfiles/h5copy_extlinks_src-mergeprune.h5copy_extlinks_src.h5.ddl
./tools/test/h5repack/testfiles/h5copy_extlinks_src-prune.h5copy_extlinks_src.h5.ddl
./tools/test/h5repack/testfiles/h5copy_extlinks_trg.h5
# jam utility and tests
./tools/src/h5jam/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.

@ -17,7 +17,7 @@ use Text::Tabs;
# If you do not have access to either file, you may request a copy from
# help@hdfgroup.org.
#
# Robb Matzke, matzke@llnl.gov
# Robb Matzke
# 30 Aug 1997
#
# Purpose: This script will read standard input which should be a

@ -17,7 +17,7 @@ use strict;
# If you do not have access to either file, you may request a copy from
# help@hdfgroup.org.
#
# Robb Matzke <matzke@llnl.gov>
# Robb Matzke
# 17 July 1998
### Purpose

@ -39,7 +39,7 @@ USAGE()
{
cat << EOF
Usage: $0 -d <dir> [--docver BRANCHNAME] [-h] [--nocheck] [--private] <methods> ...
-d DIR The name of the directory where the releas(es) should be
-d DIR The name of the directory where the releas(es) should be
placed.
--docver BRANCHNAME This is added for 1.8 and beyond to get the correct
version of documentation files from the hdf5docs
@ -53,10 +53,10 @@ The other command-line options are the names of the programs to use
for compressing the resulting tar archive (if none are given then
"tar" is assumed):
tar -- use tar and don't do any compressing.
gzip -- use gzip with "-9" and append ".gz" to the output name.
tar -- use tar and don't do any compressing.
gzip -- use gzip with "-9" and append ".gz" to the output name.
bzip2 -- use bzip2 with "-9" and append ".bz2" to the output name.
zip -- convert all text files to DOS style and form a zip file for Windows use.
zip -- convert all text files to DOS style and form a zip file for Windows use.
cmake-tgz -- create a tar file using the gzip default level with a build-unix.sh
command file and all other CMake files needed to build HDF5 source
using CMake on unix machines.
@ -122,8 +122,8 @@ EOF
tar2zip()
{
if [ $# -ne 3 ]; then
echo "usage: tar2zip <tarfilename> <zipfilename>"
return 1
echo "usage: tar2zip <tarfilename> <zipfilename>"
return 1
fi
ztmpdir=/tmp/ztmpdir$$
mkdir -p $ztmpdir
@ -135,10 +135,10 @@ tar2zip()
(cd $ztmpdir; tar xf -) < $tarfile
# sanity check
if [ ! -d $ztmpdir/$version ]; then
echo "untar did not create $ztmpdir/$version source dir"
# cleanup
rm -rf $ztmpdir
return 1
echo "untar did not create $ztmpdir/$version source dir"
# cleanup
rm -rf $ztmpdir
return 1
fi
# step 2: convert text files
# There maybe a simpler way to do this.
@ -147,11 +147,11 @@ tar2zip()
# -q quiet mode
# grep redirect output to /dev/null because -q or -s are not portable.
find $ztmpdir/$version | \
while read inf; do \
if file $inf | grep "$inf\: .*text" > /dev/null 2>&1 ; then \
unix2dos -q -k $inf; \
fi\
done
while read inf; do \
if file $inf | grep "$inf\: .*text" > /dev/null 2>&1 ; then \
unix2dos -q -k $inf; \
fi\
done
# step 3: make zipball
# -9 maximum compression
# -y Store symbolic links as such in the zip archive
@ -202,8 +202,8 @@ tar2zip()
tar2cmakezip()
{
if [ $# -ne 3 ]; then
echo "usage: tar2cmakezip <tarfilename> <zipfilename>"
return 1
echo "usage: tar2cmakezip <tarfilename> <zipfilename>"
return 1
fi
cmziptmpdir=/tmp/cmziptmpdir$$
cmziptmpsubdir=$cmziptmpdir/CMake-$HDF5_VERS
@ -216,10 +216,10 @@ tar2cmakezip()
(cd $cmziptmpsubdir; tar xf -) < $tarfile
# sanity check
if [ ! -d $cmziptmpsubdir/$version ]; then
echo "untar did not create $cmziptmpsubdir/$version source dir"
# cleanup
rm -rf $cmziptmpdir
return 1
echo "untar did not create $cmziptmpsubdir/$version source dir"
# cleanup
rm -rf $cmziptmpdir
return 1
fi
# step 2: add batch file for building CMake on window
@ -245,11 +245,11 @@ tar2cmakezip()
# -q quiet mode
# grep redirect output to /dev/null because -q or -s are not portable.
find $cmziptmpsubdir/$version | \
while read inf; do \
if file $inf | grep "$inf\: .*text" > /dev/null 2>&1 ; then \
unix2dos -q -k $inf; \
fi\
done
while read inf; do \
if file $inf | grep "$inf\: .*text" > /dev/null 2>&1 ; then \
unix2dos -q -k $inf; \
fi\
done
# step 3: make zipball
# -9 maximum compression
@ -301,8 +301,8 @@ tar2cmakezip()
tar2cmaketgz()
{
if [ $# -ne 3 ]; then
echo "usage: tar2cmaketgz <tarfilename> <tgzfilename>"
return 1
echo "usage: tar2cmaketgz <tarfilename> <tgzfilename>"
return 1
fi
cmgztmpdir=/tmp/cmgztmpdir$$
cmgztmpsubdir=$cmgztmpdir/CMake-$HDF5_VERS
@ -315,10 +315,10 @@ tar2cmaketgz()
(cd $cmgztmpsubdir; tar xf -) < $tarfile
# sanity check
if [ ! -d $cmgztmpsubdir/$version ]; then
echo "untar did not create $cmgztmpsubdir/$version source dir"
# cleanup
rm -rf $cmgztmpdir
return 1
echo "untar did not create $cmgztmpsubdir/$version source dir"
# cleanup
rm -rf $cmgztmpdir
return 1
fi
@ -384,8 +384,8 @@ tar2cmaketgz()
tar2hpccmaketgz()
{
if [ $# -ne 3 ]; then
echo "usage: tar2hpccmaketgz <tarfilename> <tgzfilename>"
return 1
echo "usage: tar2hpccmaketgz <tarfilename> <tgzfilename>"
return 1
fi
cmgztmpdir=/tmp/cmgztmpdir$$
cmgztmpsubdir=$cmgztmpdir/HPC-CMake-$HDF5_VERS
@ -398,10 +398,10 @@ tar2hpccmaketgz()
(cd $cmgztmpsubdir; tar xf -) < $tarfile
# sanity check
if [ ! -d $cmgztmpsubdir/$version ]; then
echo "untar did not create $cmgztmpsubdir/$version source dir"
# cleanup
rm -rf $cmgztmpdir
return 1
echo "untar did not create $cmgztmpsubdir/$version source dir"
# cleanup
rm -rf $cmgztmpdir
return 1
fi
@ -442,7 +442,7 @@ check=yes
release_date=`date +%F`
today=`date +%Y%m%d`
pmode='no'
tmpdir="../#release_tmp.$$" # tmp work directory
tmpdir="../#release_tmp.$$" # tmp work directory
DOC_URL=https://git@bitbucket.hdfgroup.org/scm/hdffv/hdf5doc.git
CPPLUS_RM_NAME=cpplus_RM
MAINT_MODE_ENABLED=""
@ -459,11 +459,11 @@ fi
RESTORE_VERSION()
{
if [ X-${VERS_OLD} != X- ]; then
echo restoring version information back to $VERS_OLD
rm -f config/lt_vers.am
cp $tmpdir/lt_vers.am config/lt_vers.am
bin/h5vers -s $VERS_OLD
VERS_OLD=
echo restoring version information back to $VERS_OLD
rm -f config/lt_vers.am
cp $tmpdir/lt_vers.am config/lt_vers.am
bin/h5vers -s $VERS_OLD
VERS_OLD=
fi
}
@ -473,32 +473,32 @@ while [ -n "$1" ]; do
arg=$1
shift
case "$arg" in
-d)
DEST=$1
shift
;;
--nocheck)
check=no
;;
-h)
USAGE
exit 0
;;
--private)
pmode=yes
;;
-d)
DEST=$1
shift
;;
--nocheck)
check=no
;;
-h)
USAGE
exit 0
;;
--private)
pmode=yes
;;
--docver)
DOCVERSION=$1
shift
;;
-*)
echo "Unknown switch: $arg" 1>&2
USAGE
exit 1
;;
*)
methods="$methods $arg"
;;
-*)
echo "Unknown switch: $arg" 1>&2
USAGE
exit 1
;;
*)
methods="$methods $arg"
;;
esac
done
@ -553,7 +553,7 @@ if [ "X$fail" = "Xyes" ]; then
echo "--nocheck argument to the bin/release command."
exit 1
else
echo "Continuing anyway..."
echo "Continuing anyway..."
fi
fi
@ -595,61 +595,61 @@ MD5file=$HDF5_VERS.md5
cp /dev/null $DEST/$MD5file
for comp in $methods; do
case $comp in
tar)
cp -p $tmpdir/$HDF5_VERS.tar $DEST/$HDF5_VERS.tar
(cd $DEST; md5sum $HDF5_VERS.tar >> $MD5file)
;;
gzip)
test "$verbose" && echo " Running gzip..." 1>&2
gzip -9 <$tmpdir/$HDF5_VERS.tar >$DEST/$HDF5_VERS.tar.gz
(cd $DEST; md5sum $HDF5_VERS.tar.gz >> $MD5file)
;;
tar)
cp -p $tmpdir/$HDF5_VERS.tar $DEST/$HDF5_VERS.tar
(cd $DEST; md5sum $HDF5_VERS.tar >> $MD5file)
;;
gzip)
test "$verbose" && echo " Running gzip..." 1>&2
gzip -9 <$tmpdir/$HDF5_VERS.tar >$DEST/$HDF5_VERS.tar.gz
(cd $DEST; md5sum $HDF5_VERS.tar.gz >> $MD5file)
;;
cmake-tgz)
test "$verbose" && echo " Creating CMake tar.gz file..." 1>&2
tar2cmaketgz $HDF5_VERS $tmpdir/$HDF5_VERS.tar $DEST/CMake-$HDF5_VERS.tar.gz 1>&2
(cd $DEST; md5sum CMake-$HDF5_VERS.tar.gz >> $MD5file)
test "$verbose" && echo " Creating CMake tar.gz file..." 1>&2
tar2cmaketgz $HDF5_VERS $tmpdir/$HDF5_VERS.tar $DEST/CMake-$HDF5_VERS.tar.gz 1>&2
(cd $DEST; md5sum CMake-$HDF5_VERS.tar.gz >> $MD5file)
;;
hpc-cmake-tgz)
test "$verbose" && echo " Creating HPC-CMake tar.gz file..." 1>&2
tar2hpccmaketgz $HDF5_VERS $tmpdir/$HDF5_VERS.tar $DEST/HPC-CMake-$HDF5_VERS.tar.gz 1>&2
(cd $DEST; md5sum HPC-CMake-$HDF5_VERS.tar.gz >> $MD5file)
test "$verbose" && echo " Creating HPC-CMake tar.gz file..." 1>&2
tar2hpccmaketgz $HDF5_VERS $tmpdir/$HDF5_VERS.tar $DEST/HPC-CMake-$HDF5_VERS.tar.gz 1>&2
(cd $DEST; md5sum HPC-CMake-$HDF5_VERS.tar.gz >> $MD5file)
;;
bzip2)
test "$verbose" && echo " Running bzip2..." 1>&2
bzip2 -9 <$tmpdir/$HDF5_VERS.tar >$DEST/$HDF5_VERS.tar.bz2
(cd $DEST; md5sum $HDF5_VERS.tar.bz2 >> $MD5file)
;;
zip)
test "$verbose" && echo " Creating zip ball..." 1>&2
tar2zip $HDF5_VERS $tmpdir/$HDF5_VERS.tar $DEST/$HDF5_VERS.zip 1>&2
(cd $DEST; md5sum $HDF5_VERS.zip >> $MD5file)
;;
bzip2)
test "$verbose" && echo " Running bzip2..." 1>&2
bzip2 -9 <$tmpdir/$HDF5_VERS.tar >$DEST/$HDF5_VERS.tar.bz2
(cd $DEST; md5sum $HDF5_VERS.tar.bz2 >> $MD5file)
;;
zip)
test "$verbose" && echo " Creating zip ball..." 1>&2
tar2zip $HDF5_VERS $tmpdir/$HDF5_VERS.tar $DEST/$HDF5_VERS.zip 1>&2
(cd $DEST; md5sum $HDF5_VERS.zip >> $MD5file)
;;
cmake-zip)
test "$verbose" && echo " Creating CMake-zip ball..." 1>&2
tar2cmakezip $HDF5_VERS $tmpdir/$HDF5_VERS.tar $DEST/CMake-$HDF5_VERS.zip 1>&2
(cd $DEST; md5sum CMake-$HDF5_VERS.zip >> $MD5file)
;;
doc)
doc)
if [ "${DOCVERSION}" = "" ]; then
DOCVERSION=master
fi
test "$verbose" && echo " Creating docs..." 1>&2
# Check out docs from git repo
(cd $tmpdir; git clone -q $DOC_URL ${DOCVERSION} > /dev/null) || exit 1
test "$verbose" && echo " Creating docs..." 1>&2
# Check out docs from git repo
(cd $tmpdir; git clone -q $DOC_URL ${DOCVERSION} > /dev/null) || exit 1
# Create doxygen C++ RM
(cd c++/src && doxygen cpp_doc_config > /dev/null ) || exit 1
# Replace version of C++ RM with just-created version
rm -rf $tmpdir/${DOCVERSION}/html/$CPPLUS_RM_NAME || exit 1
mv c++/src/$CPPLUS_RM_NAME $tmpdir/${DOCVERSION}/html/$CPPLUS_RM_NAME || exit 1
(cd c++/src && doxygen cpp_doc_config > /dev/null ) || exit 1
# Replace version of C++ RM with just-created version
rm -rf $tmpdir/${DOCVERSION}/html/$CPPLUS_RM_NAME || exit 1
mv c++/src/$CPPLUS_RM_NAME $tmpdir/${DOCVERSION}/html/$CPPLUS_RM_NAME || exit 1
# Compress the docs and move them to the release area
mv $tmpdir/${DOCVERSION} $tmpdir/${HDF5_VERS}_docs || exit 1
(cd $tmpdir && tar cf ${HDF5_VERS}_docs.tar ${HDF5_VERS}_docs) || exit 1
mv $tmpdir/${HDF5_VERS}_docs.tar $DEST || exit 1
;;
*)
echo "***Error*** Unknown method $comp"
exit 1
;;
mv $tmpdir/${DOCVERSION} $tmpdir/${HDF5_VERS}_docs || exit 1
(cd $tmpdir && tar cf ${HDF5_VERS}_docs.tar ${HDF5_VERS}_docs) || exit 1
mv $tmpdir/${HDF5_VERS}_docs.tar $DEST || exit 1
;;
*)
echo "***Error*** Unknown method $comp"
exit 1
;;
esac
done

@ -15,7 +15,7 @@ use warnings;
# http://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have
# access to either file, you may request a copy from help@hdfgroup.org.
#
# Quincey Koziol, koziol@hdfgroup.org
# Quincey Koziol
# 9 Aug 2013
#
# Purpose: Given an input file containing the output from a build of the

@ -684,6 +684,53 @@ unsigned FileAccPropList::getGcReferences() const
return(gc_ref);
}
//--------------------------------------------------------------------------
// Function: FileAccPropList::setFileLocking
///\brief Sets file locking flags.
///\param use_file_locking - IN: Flag that determines if file locks should
// be used or not.
///\param ignore_when_disabled - IN: Flag that determines if file locks
// should be be used when disabled on the file system or not.
///\exception H5::PropListIException
///\par Description
/// For information, please refer to the H5Pset_file_locking API in
/// the HDF5 C Reference Manual.
// Programmer Dana Robinson - 2020
//--------------------------------------------------------------------------
void FileAccPropList::setFileLocking(hbool_t use_file_locking, hbool_t ignore_when_disabled) const
{
herr_t ret_value = H5Pset_file_locking(id, use_file_locking, ignore_when_disabled);
if (ret_value < 0)
{
throw PropListIException("FileAccPropList::setFileLocking", "H5Pset_file_locking failed");
}
}
//--------------------------------------------------------------------------
// Function: FileAccPropList::getFileLocking
///\brief Gets file locking flags.
///\param use_file_locking - OUT: Flag that determines if file locks
// should be used or not.
///\param ignore_when_disabled - OUT: Flag that determines if file locks
// should be be used when disabled on the file system or not.
///\exception H5::PropListIException
///\par Description
/// For information, please refer to the H5Pget_file_locking API in
/// the HDF5 C Reference Manual.
// Programmer Dana Robinson - 2020
//--------------------------------------------------------------------------
void FileAccPropList::getFileLocking(hbool_t& use_file_locking, hbool_t& ignore_when_disabled) const
{
herr_t ret_value = H5Pget_file_locking(id, &use_file_locking, &ignore_when_disabled);
if (ret_value < 0)
{
throw PropListIException("FileAccPropList::getFileLocking", "H5Pget_file_locking failed");
}
}
//--------------------------------------------------------------------------
// Function: FileAccPropList::setLibverBounds
///\brief Sets bounds on versions of library format to be used when creating

@ -126,6 +126,12 @@ class H5_DLLCPP FileAccPropList : public PropList {
// Returns garbage collecting references setting.
unsigned getGcReferences() const;
// Sets file locking parameters.
void setFileLocking(hbool_t use_file_locking, hbool_t ignore_when_disabled) const;
// Gets file locking parameters.
void getFileLocking(hbool_t& use_file_locking, hbool_t& ignore_when_disabled) const;
// Sets bounds on versions of library format to be used when creating
// or writing objects.
void setLibverBounds(H5F_libver_t libver_low, H5F_libver_t libver_high) const;

@ -61,6 +61,31 @@ if (HDF5_ENABLE_CODESTACK)
endif ()
MARK_AS_ADVANCED (HDF5_ENABLE_CODESTACK)
# ----------------------------------------------------------------------
# Check if they would like to use file locking by default
#-----------------------------------------------------------------------------
option (HDF5_USE_FILE_LOCKING "Use file locking by default (mainly for SWMR)" ON)
if (HDF5_USE_FILE_LOCKING)
set (${HDF_PREFIX}_USE_FILE_LOCKING 1)
endif ()
# ----------------------------------------------------------------------
# Check if they would like to ignore file locks when disabled on a file system
#-----------------------------------------------------------------------------
option (HDF5_IGNORE_DISABLED_FILE_LOCKS "Ignore file locks when disabled on file system" ON)
if (HDF5_IGNORE_DISABLED_FILE_LOCKS)
set (${HDF_PREFIX}_IGNORE_DISABLED_FILE_LOCKS 1)
endif ()
# Set the libhdf5.settings file variable
if (HDF5_IGNORE_DISABLED_FILE_LOCKS AND HDF5_USE_FILE_LOCKING)
set (HDF5_FILE_LOCKING_SETTING "best-effort")
elseif (HDF5_IGNORE_DISABLED_FILE_LOCKS)
set (HDF5_FILE_LOCKING_SETTING "yes")
else ()
set (HDF5_FILE_LOCKING_SETTING "no")
endif ()
#-----------------------------------------------------------------------------
# Are we going to use HSIZE_T
#-----------------------------------------------------------------------------

@ -489,6 +489,9 @@
/* Define if the compiler understands __inline__ */
#cmakedefine H5_HAVE___INLINE__ @H5_HAVE___INLINE__@
/* Define if the library will ignore file locks when disabled */
#cmakedefine H5_IGNORE_DISABLED_FILE_LOCKS @H5_IGNORE_DISABLED_FILE_LOCKS@
/* Define if the high-level library headers should be included in hdf5.h */
#cmakedefine H5_INCLUDE_HL @H5_INCLUDE_HL@
@ -729,6 +732,9 @@
/* Define using v1.14 public API symbols by default */
#cmakedefine H5_USE_114_API_DEFAULT @H5_USE_114_API_DEFAULT@
/* Define if the library will use file locking */
#cmakedefine H5_USE_FILE_LOCKING @H5_USE_FILE_LOCKING@
/* Define if a memory checking tool will be used on the library, to cause
library to be very picky about memory operations and also disable the
internal free list manager code. */

@ -85,5 +85,6 @@ Parallel Filtered Dataset Writes: @PARALLEL_FILTERED_WRITES@
Using memory checker: @HDF5_ENABLE_USING_MEMCHECKER@
Memory allocation sanity checks: @HDF5_MEMORY_ALLOC_SANITY_CHECK@
Function Stack Tracing: @HDF5_ENABLE_CODESTACK@
Use file locking: @HDF5_FILE_LOCKING_SETTING@
Strict File Format Checks: @HDF5_STRICT_FORMAT_CHECKS@
Optimization Instrumentation: @HDF5_Enable_Instrument@

@ -21,6 +21,7 @@ cmake_minimum_required (VERSION 3.12)
# ctest -S HDF5config.cmake,OPTION=VALUE -C Release -VV -O test.log
# where valid options for OPTION are:
# BUILD_GENERATOR - The cmake build generator:
# MinGW * MinGW Makefiles
# Unix * Unix Makefiles
# VS2019 * Visual Studio 16 2019
# VS201964 * Visual Studio 16 2019
@ -167,7 +168,11 @@ if (NOT DEFINED HPC)
## Set the following to unique id your computer ##
set (CTEST_SITE "WIN7${BUILD_GENERATOR}.XXXX")
else ()
set (CTEST_CMAKE_GENERATOR "Unix Makefiles")
if (MINGW)
set (CTEST_CMAKE_GENERATOR "MinGW Makefiles")
else ()
set (CTEST_CMAKE_GENERATOR "Unix Makefiles")
endif ()
## Set the following to unique id your computer ##
if (APPLE)
set (CTEST_SITE "MAC.XXXX")

@ -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

@ -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

@ -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

@ -1594,19 +1594,19 @@ case "X-$withval" in
AM_CPPFLAGS="$AM_CPPFLAGS -I$szlib_inc"
fi
AC_CHECK_HEADERS([szlib.h],
[HAVE_SZLIB_H="yes"],
[CPPFLAGS="$saved_CPPFLAGS"; AM_CPPFLAGS="$saved_AM_CPPFLAGS"] [unset HAVE_SZLIB])
if test -n "$szlib_lib"; then
LDFLAGS="$LDFLAGS -L$szlib_lib"
AM_LDFLAGS="$AM_LDFLAGS -L$szlib_lib"
fi
if test "x$HAVE_SZLIB" = "xyes" -a "x$HAVE_SZLIB_H" = "xyes"; then
if test "x$HAVE_SZLIB" = "xyes"; then
AC_CHECK_LIB([sz], [SZ_BufftoBuffCompress],,
[CPPFLAGS="$saved_CPPFLAGS"; AM_CPPFLAGS="$saved_AM_CPPFLAGS"; LDFLAGS="$saved_LDFLAGS"; AM_LDFLAGS="$saved_AM_LDFLAGS"; unset HAVE_SZLIB])
if test -z "$HAVE_SZLIB"; then
if test -n "$HAVE_SZLIB"; then
AC_CHECK_HEADERS([szlib.h],
[HAVE_SZLIB_H="yes"],
[CPPFLAGS="$saved_CPPFLAGS"; AM_CPPFLAGS="$saved_AM_CPPFLAGS"] [unset HAVE_SZLIB])
else
AC_MSG_RESULT([Using SZ_BufftoBuffCompress from libsz in $szlib_lib failed. Szip not enabled.])
fi
fi
@ -2315,6 +2315,56 @@ case "X-$OPTIMIZATION" in
;;
esac
## ----------------------------------------------------------------------
## Check if file locking should be used
##
AC_MSG_CHECKING([enable file locking])
AC_ARG_ENABLE([file-locking],
[AS_HELP_STRING([--enable-file-locking=(yes|no|best-effort)],
[Sets the default for whether or not to use file
locking when opening files. Can be overridden
with the HDF5_USE_FILE_LOCKING environment variable
and the H5Pset_file_locking() API call.
best-effort attempts to use file locking but does
not fail when file locks have been disabled on
the file system (useful with Lustre).
[default=best-effort]
])],
[DESIRED_FILE_LOCKING=$enableval])
## Set defaults
if test "X-$DESIRED_FILE_LOCKING" = X- ; then
DESIRED_FILE_LOCKING=best-effort
fi
## Allow this variable to be substituted in
## other files (src/libhdf5.settings.in, etc.)
AC_SUBST([DESIRED_FILE_LOCKING])
AC_SUBST([USE_FILE_LOCKING])
AC_SUBST([IGNORE_DISABLED_FILE_LOCKS])
case "X-$DESIRED_FILE_LOCKING" in
X-best-effort)
AC_MSG_RESULT([best-effort])
AC_DEFINE([USE_FILE_LOCKING], [1],
[Define if the library will use file locking])
AC_DEFINE([IGNORE_DISABLED_FILE_LOCKS], [1],
[Define if the library will ignore file locks when disabled])
;;
X-yes)
AC_MSG_RESULT([yes])
AC_DEFINE([USE_FILE_LOCKING], [1],
[Define if the library will use file locking])
;;
X-no)
AC_MSG_RESULT([no])
;;
*)
AC_MSG_ERROR([Unrecognized value: $USE_FILE_LOCKING])
;;
esac
## ----------------------------------------------------------------------
## Enable/disable internal package-level debugging output
##

@ -98,7 +98,7 @@ int main () {
for (i=0; i<numfilt; i++) {
nelmts = 0;
filter_type = H5Pget_filter2 (plist_id, 0, &flags, &nelmts, NULL, 0, NULL,
filter_type = H5Pget_filter2 (plist_id, i, &flags, &nelmts, NULL, 0, NULL,
&filter_info);
printf ("Filter Type: ");
switch (filter_type) {

@ -8263,5 +8263,107 @@ END SUBROUTINE h5pget_virtual_dsetname_f
END SUBROUTINE h5pget_vol_id_f
!****s* H5P (F03)/h5pget_file_locking_f_F03
!
! NAME
! h5pget_file_locking_f
!
! PURPOSE
! Gets the file locking properties. File locking is mainly used to help
! enforce SWMR semantics.
!
! INPUTS
! fapl_id - Target file access property list identifier.
!
! OUTPUTS
! use_file_locking - Whether or not to use file locks.
! ignore_disabled_locks - Whether or not to ignore file locks when locking
! is disabled on a file system.
! hdferr - error code:
! 0 on success and -1 on failure
!
! AUTHOR
! Dana Robinson
! Summer 2020
!
! Fortran2003 Interface:
SUBROUTINE h5pget_file_locking_f(fapl_id, use_file_locking, ignore_disabled_locks, hdferr)
IMPLICIT NONE
INTEGER(HID_T) , INTENT(IN) :: fapl_id
LOGICAL , INTENT(OUT) :: use_file_locking
LOGICAL , INTENT(OUT) :: ignore_disabled_locks
INTEGER , INTENT(OUT) :: hdferr
!*****
LOGICAL(C_BOOL) :: c_use_flag
LOGICAL(C_BOOL) :: c_ignore_flag
INTERFACE
INTEGER FUNCTION h5pget_file_locking(fapl_id, use_file_locking, ignore_disabled_locks) BIND(C, NAME='H5Pget_file_locking')
IMPORT :: HID_T, C_BOOL
IMPLICIT NONE
INTEGER(HID_T), INTENT(IN), VALUE :: fapl_id
LOGICAL(C_BOOL), INTENT(OUT) :: use_file_locking
LOGICAL(C_BOOL), INTENT(OUT) :: ignore_disabled_locks
END FUNCTION h5pget_file_locking
END INTERFACE
hdferr = INT(h5pget_file_locking(fapl_id, c_use_flag, c_ignore_flag))
! Transfer value of C C_BOOL type to Fortran LOGICAL
use_file_locking = c_use_flag
ignore_disabled_locks = c_ignore_flag
END SUBROUTINE h5pget_file_locking_f
!****s* H5P (F03)/h5pset_file_locking_f_F03
!
! NAME
! h5pset_file_locking_f
!
! PURPOSE
! Sets the file locking properties. File locking is mainly used to help
! enforce SWMR semantics.
!
! INPUTS
! fapl_id - Target file access property list identifier.
! use_file_locking - Whether or not to use file locks.
! ignore_disabled_locks - Whether or not to ignore file locks when locking
! is disabled on a file system.
! hdferr - error code:
! 0 on success and -1 on failure
!
! AUTHOR
! Dana Robinson
! Summer 2020
!
! Fortran2003 Interface:
SUBROUTINE h5pset_file_locking_f(fapl_id, use_file_locking, ignore_disabled_locks, hdferr)
IMPLICIT NONE
INTEGER(HID_T) , INTENT(IN) :: fapl_id
LOGICAL , INTENT(IN) :: use_file_locking
LOGICAL , INTENT(IN) :: ignore_disabled_locks
INTEGER , INTENT(OUT) :: hdferr
!*****
LOGICAL(C_BOOL) :: c_use_flag
LOGICAL(C_BOOL) :: c_ignore_flag
INTERFACE
INTEGER FUNCTION h5pset_file_locking(fapl_id, use_file_locking, ignore_disabled_locks) BIND(C, NAME='H5Pset_file_locking')
IMPORT :: HID_T, C_BOOL
IMPLICIT NONE
INTEGER(HID_T), INTENT(IN), VALUE :: fapl_id
LOGICAL(C_BOOL), INTENT(IN), VALUE :: use_file_locking
LOGICAL(C_BOOL), INTENT(IN), VALUE :: ignore_disabled_locks
END FUNCTION h5pset_file_locking
END INTERFACE
! Transfer value of Fortran LOGICAL to C C_BOOL type
c_use_flag = use_file_locking
c_ignore_flag = ignore_disabled_locks
hdferr = INT(h5pset_file_locking(fapl_id, c_use_flag, c_ignore_flag))
END SUBROUTINE h5pset_file_locking_f
END MODULE H5P

@ -339,6 +339,8 @@ H5P_mp_H5PGET_DSET_NO_ATTRS_HINT_F
H5P_mp_H5PSET_DSET_NO_ATTRS_HINT_F
H5P_mp_H5PSET_VOL_F
H5P_mp_H5PGET_VOL_ID_F
H5P_mp_H5PSET_FILE_LOCKING_F
H5P_mp_H5PGET_FILE_LOCKING_F
; Parallel
@H5_NOPAREXP@H5P_mp_H5PSET_FAPL_MPIO_F
@H5_NOPAREXP@H5P_mp_H5PGET_FAPL_MPIO_F

@ -183,9 +183,13 @@ 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)
ret_total_error = 0
CALL test_misc_properties(cleanup, ret_total_error)
CALL write_test_status(ret_total_error, ' Miscellaneous properties', total_error)
!
! '========================================='
! 'Testing ATTRIBUTE interface '

@ -724,4 +724,77 @@ SUBROUTINE test_chunk_cache(cleanup, total_error)
END SUBROUTINE test_chunk_cache
!-------------------------------------------------------------------------
! Function: test_misc_properties
!
! Purpose: Tests setting and getting of miscellaneous properties. Does
! not test the underlying functionality as that is done in
! the C library tests.
!
! Tests APIs:
! H5P_GET/SET_FILE_LOCKING_F
!
! Return: Success: 0
! Failure: -1
!
!-------------------------------------------------------------------------
!
SUBROUTINE test_misc_properties(cleanup, total_error)
IMPLICIT NONE
LOGICAL, INTENT(IN) :: cleanup
INTEGER, INTENT(INOUT) :: total_error
INTEGER(hid_t) :: fapl_id = -1 ! Local fapl
LOGICAL :: use_file_locking ! (H5Pset/get_file_locking_f)
LOGICAL :: ignore_disabled_locks ! (H5Pset/get_file_locking_f)
INTEGER :: error
! Create a default fapl
CALL H5Pcreate_f(H5P_FILE_ACCESS_F, fapl_id, error)
CALL check("H5Pcreate_f", error, total_error)
! Test H5Pset/get_file_locking_f
! true values
use_file_locking = .TRUE.
ignore_disabled_locks = .TRUE.
CALL h5pset_file_locking_f(fapl_id, use_file_locking, ignore_disabled_locks, error)
CALL check("h5pset_set_file_locking_f", error, total_error)
use_file_locking = .FALSE.
ignore_disabled_locks = .FALSE.
CALL h5pget_file_locking_f(fapl_id, use_file_locking, ignore_disabled_locks, error)
CALL check("h5pget_set_file_locking_f", error, total_error)
if(use_file_locking .neqv. .TRUE.) then
total_error = total_error + 1
write(*,*) "Got wrong use_file_locking flag from h5pget_file_locking_f"
endif
if(ignore_disabled_locks .neqv. .TRUE.) then
total_error = total_error + 1
write(*,*) "Got wrong ignore_disabled_locks flag from h5pget_file_locking_f"
endif
! false values
use_file_locking = .FALSE.
ignore_disabled_locks = .FALSE.
CALL h5pset_file_locking_f(fapl_id, use_file_locking, ignore_disabled_locks, error)
CALL check("h5pset_set_file_locking_f", error, total_error)
use_file_locking = .TRUE.
ignore_disabled_locks = .TRUE.
CALL h5pget_file_locking_f(fapl_id, use_file_locking, ignore_disabled_locks, error)
CALL check("h5pget_set_file_locking_f", error, total_error)
if(use_file_locking .neqv. .FALSE.) then
total_error = total_error + 1
write(*,*) "Got wrong use_file_locking flag from h5pget_file_locking_f"
endif
if(ignore_disabled_locks .neqv. .FALSE.) then
total_error = total_error + 1
write(*,*) "Got wrong ignore_disabled_locks flag from h5pget_file_locking_f"
endif
! Close the fapl
CALL H5Pclose_f(fapl_id, error)
CALL check("H5Pclose_f", error, total_error)
END SUBROUTINE test_misc_properties
END MODULE TH5P

@ -34,7 +34,7 @@ herr_t H5IM_get_palette(hid_t loc_id,
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente Nunes, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente Nunes
*
* Date: May 10, 2005
*
@ -127,7 +127,7 @@ herr_t H5IMmake_image_8bitf(hid_t loc_id,
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente Nunes, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente Nunes
*
* Date: May 10, 2005
*
@ -244,7 +244,7 @@ herr_t H5IMmake_image_24bitf(hid_t loc_id,
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente Nunes, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente Nunes
*
* Date: May 10, 2005
*
@ -302,7 +302,7 @@ out:
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente Nunes, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente Nunes
*
* Date: May 10, 2005
*
@ -395,7 +395,7 @@ herr_t H5IMmake_palettef(hid_t loc_id,
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente Nunes, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente Nunes
*
* Date: May 10, 2005
*
@ -434,7 +434,7 @@ herr_t H5IMget_palettef(hid_t loc_id,
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente Nunes, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente Nunes
*
* Date: May 10, 2005
*

@ -24,7 +24,7 @@
*
* Return: Success: 0, Failure: -1
*
* Programmer: pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: October 05, 2004
*
@ -85,7 +85,7 @@ done:
*
* Return: Success: 0, Failure: -1
*
* Programmer: pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: October 05, 2004
*
@ -138,7 +138,7 @@ done:
*
* Return: Success: 0, Failure: -1
*
* Programmer: pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: October 05, 2004
*
@ -207,7 +207,7 @@ done:
*
* Return: Success: 0, Failure: -1
*
* Programmer: pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: October 05, 2004
*
@ -292,7 +292,7 @@ done:
*
* Return: Success: 0, Failure: -1
*
* Programmer: pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: October 06, 2004
*
@ -341,7 +341,7 @@ h5imis_image_c(hid_t_f *loc_id,
*
* Return: Success: 0, Failure: -1
*
* Programmer: pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: October 06, 2004
*
@ -396,7 +396,7 @@ done:
*
* Return: Success: 0, Failure: -1
*
* Programmer: pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: October 06, 2004
*
@ -461,7 +461,7 @@ done:
*
* Return: Success: 0, Failure: -1
*
* Programmer: pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: October 06, 2004
*
@ -527,7 +527,7 @@ done:
*
* Return: Success: 0, Failure: -1
*
* Programmer: pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: October 06 2004
*
@ -588,7 +588,7 @@ done:
*
* Return: Success: 0, Failure: -1
*
* Programmer: pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: October 06 2004
*
@ -655,7 +655,7 @@ done:
*
* Return: Success: 0, Failure: -1
*
* Programmer: pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: October 06 2004
*
@ -714,7 +714,7 @@ done:
*
* Return: true, false, fail
*
* Programmer: pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: October 06, 2004
*

@ -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
!

@ -24,7 +24,7 @@
*
* Return: Success: 0, Failure: -1
*
* Programmer: pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: September 09, 2004
*
@ -94,7 +94,7 @@ done:
*
* Return: Success: 0, Failure: -1
*
* Programmer: pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: September 09, 2004
*
@ -153,7 +153,7 @@ done:
*
* Return: Success: 0, Failure: -1
*
* Programmer: pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: September 09, 2004
*
@ -218,7 +218,7 @@ done:
*
* Return: Success: 0, Failure: -1
*
* Programmer: pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: September 09, 2004
*
@ -274,7 +274,7 @@ done:
*
* Return: Success: 0, Failure: -1
*
* Programmer: pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: October 05, 2004
*
@ -373,7 +373,7 @@ done:
*
* Return: Success: 0, Failure: -1
*
* Programmer: pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: October 05, 2004
*
@ -460,7 +460,7 @@ done:
*
* Return: Success: 0, Failure: -1
*
* Programmer: pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: October 05, 2004
*
@ -535,7 +535,7 @@ done:
*
* Return: Success: 0, Failure: -1
*
* Programmer: pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: September 09, 2004
*
@ -595,7 +595,7 @@ done:
*
* Return: Success: 0, Failure: -1
*
* Programmer: pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: September 09, 2004
*
@ -643,7 +643,7 @@ h5ltfind_dataset_c(hid_t_f *loc_id,
*
* Return: Success: 0, Failure: -1
*
* Programmer: pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: September 09, 2004
*
@ -722,7 +722,7 @@ done:
*
* Return: Success: 0, Failure: -1
*
* Programmer: pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: October 05, 2004
*
@ -791,7 +791,7 @@ done:
*
* Return: Success: 0, Failure: -1
*
* Programmer: pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: September 09, 2004
*

@ -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
!

@ -26,7 +26,7 @@
*
* Return: Success: 0, Failure: -1
*
* Programmer: pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: October 06, 2004
*
@ -301,7 +301,7 @@ done:
*
* Return: Success: 0, Failure: -1
*
* Programmer: pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: October 12, 2004
*
@ -350,7 +350,7 @@ done:
*
* Return: Success: 0, Failure: -1
*
* Programmer: pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: October 12, 2004
*
@ -398,7 +398,7 @@ done:
*
* Return: Success: 0, Failure: -1
*
* Programmer: pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: October 12, 2004
*
@ -443,7 +443,7 @@ done:
*
* Return: Success: 0, Failure: -1
*
* Programmer: pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: October 12, 2004
*
@ -487,7 +487,7 @@ done:
*
* Return: Success: 0, Failure: -1
*
* Programmer: pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: October 13, 2004
*
@ -534,7 +534,7 @@ done:
*
* Return: Success: 0, Failure: -1
*
* Programmer: pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: October 13, 2004
*
@ -580,7 +580,7 @@ done:
*
* Return: Success: 0, Failure: -1
*
* Programmer: pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: October 12, 2004
*
@ -627,7 +627,7 @@ done:
*
* Return: Success: 0, Failure: -1
*
* Programmer: pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: October 13, 2004
*

@ -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
!

@ -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"
@ -25,29 +22,24 @@ static herr_t H5DS_is_reserved(hid_t did);
static hid_t H5DS_get_REFLIST_type(void);
/*-------------------------------------------------------------------------
* Function: H5DSset_scale
*
* Purpose: The dataset DSID is converted to a Dimension Scale dataset.
* Creates the CLASS attribute, set to the value "DIMENSION_SCALE"
* and an empty REFERENCE_LIST attribute.
* If DIMNAME is specified, then an attribute called NAME is created,
* with the value DIMNAME.
*
* Return: Success: SUCCEED, Failure: FAIL
*
* Programmer: pvn@ncsa.uiuc.edu
*
* Date: January 04, 2005
*
* Comments:
*
* Modifications:
*
*-------------------------------------------------------------------------
*/
herr_t H5DSset_scale(hid_t dsid,
const char *dimname)
* Function: H5DSset_scale
*
* Purpose: The dataset DSID is converted to a Dimension Scale dataset.
* Creates the CLASS attribute, set to the value "DIMENSION_SCALE"
* and an empty REFERENCE_LIST attribute.
* If DIMNAME is specified, then an attribute called NAME is created,
* with the value DIMNAME.
*
* Return: Success: SUCCEED, Failure: FAIL
*
* Programmer: Pedro Vicente
*
* Date: January 04, 2005
*
*-------------------------------------------------------------------------
*/
herr_t
H5DSset_scale(hid_t dsid, const char *dimname)
{
int has_dimlist;
H5I_type_t it;
@ -95,34 +87,28 @@ herr_t H5DSset_scale(hid_t dsid,
/*-------------------------------------------------------------------------
* Function: H5DSattach_scale
*
* Purpose: Define Dimension Scale DSID to be associated with dimension IDX
* of Dataset DID. Entries are created in the DIMENSION_LIST and
* REFERENCE_LIST attributes.
*
* Return:
* Success: SUCCEED
* Failure: FAIL
*
* Fails if: Bad arguments
* If DSID is not a Dimension Scale
* If DID is a Dimension Scale (A Dimension Scale cannot have scales)
*
* Programmer: pvn@ncsa.uiuc.edu
*
* Date: December 20, 2004
*
* Comments:
*
* Modifications:
*
*-------------------------------------------------------------------------
*/
herr_t H5DSattach_scale(hid_t did,
hid_t dsid,
unsigned int idx)
* Function: H5DSattach_scale
*
* Purpose: Define Dimension Scale DSID to be associated with dimension IDX
* of Dataset DID. Entries are created in the DIMENSION_LIST and
* REFERENCE_LIST attributes.
*
* Return:
* Success: SUCCEED
* Failure: FAIL
*
* Fails if: Bad arguments
* If DSID is not a Dimension Scale
* If DID is a Dimension Scale (A Dimension Scale cannot have scales)
*
* Programmer: Pedro Vicente
*
* Date: December 20, 2004
*
*-------------------------------------------------------------------------
*/
herr_t
H5DSattach_scale(hid_t did, hid_t dsid, unsigned int idx)
{
int has_dimlist;
int has_reflist;
@ -547,39 +533,31 @@ out:
}
/*-------------------------------------------------------------------------
* Function: H5DSdetach_scale
*
* Purpose: If possible, deletes association of Dimension Scale DSID with
* dimension IDX of Dataset DID. This deletes the entries in the
* DIMENSION_LIST and REFERENCE_LIST attributes.
*
* Return:
* Success: SUCCEED
* Failure: FAIL
*
* Fails if: Bad arguments
* The dataset DID or DSID do not exist.
* The DSID is not a Dimension Scale
* DSID is not attached to DID.
* 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
*
* 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)
* Function: H5DSdetach_scale
*
* Purpose: If possible, deletes association of Dimension Scale DSID with
* dimension IDX of Dataset DID. This deletes the entries in the
* DIMENSION_LIST and REFERENCE_LIST attributes.
*
* Return:
* Success: SUCCEED
* Failure: FAIL
*
* Fails if: Bad arguments
* The dataset DID or DSID do not exist.
* The DSID is not a Dimension Scale
* DSID is not attached to DID.
* 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: Pedro Vicente
*
* Date: December 20, 2004
*
*-------------------------------------------------------------------------
*/
herr_t
H5DSdetach_scale(hid_t did, hid_t dsid, unsigned int idx)
{
int has_dimlist;
int has_reflist;
@ -940,35 +918,29 @@ out:
}
/*-------------------------------------------------------------------------
* Function: H5DSis_attached
*
* Purpose: Report if dimension scale DSID is currently attached to
* dimension IDX of dataset DID by checking if DID has a pointer in the REFERENCE_LIST
* attribute and DSID (scale ) has a pointer in the DIMENSION_LIST attribute
*
* Return:
* 1: both the DS and the dataset pointers match
* 0: one of them or both do not match
* FAIL (-1): error
*
* Fails if: Bad arguments
* If DSID is not a Dimension Scale
* If DID is a Dimension Scale (A Dimension Scale cannot have scales)
*
* Programmer: pvn@ncsa.uiuc.edu
*
* Date: February 18, 2005
*
* Comments:
*
* Modifications:
*
*-------------------------------------------------------------------------
*/
htri_t H5DSis_attached(hid_t did,
hid_t dsid,
unsigned int idx)
* Function: H5DSis_attached
*
* Purpose: Report if dimension scale DSID is currently attached to
* dimension IDX of dataset DID by checking if DID has a pointer in the REFERENCE_LIST
* attribute and DSID (scale ) has a pointer in the DIMENSION_LIST attribute
*
* Return:
* 1: both the DS and the dataset pointers match
* 0: one of them or both do not match
* FAIL (-1): error
*
* Fails if: Bad arguments
* If DSID is not a Dimension Scale
* If DID is a Dimension Scale (A Dimension Scale cannot have scales)
*
* Programmer: Pedro Vicente
*
* Date: February 18, 2005
*
*-------------------------------------------------------------------------
*/
htri_t
H5DSis_attached(hid_t did, hid_t dsid, unsigned int idx)
{
int has_dimlist;
int has_reflist;
@ -1249,54 +1221,47 @@ out:
}
/*-------------------------------------------------------------------------
* Function: H5DSiterate_scales
*
* Purpose: H5DSiterate_scales iterates over the scales attached to dimension DIM
* of dataset DID. For each scale in the list, the visitor_data and some
* additional information, specified below, are passed to the visitor function.
* The iteration begins with the IDX object in the group and the next element
* to be processed by the operator is returned in IDX. If IDX is NULL, then the
* iterator starts at zero.
*
* Parameters:
*
* hid_t DID; IN: the dataset
* unsigned int DIM; IN: the dimension of the dataset
* int *DS_IDX; IN/OUT: on input the dimension scale index to start iterating,
* on output the next index to visit. If NULL, start at
* the first position.
* H5DS_iterate_t VISITOR; IN: the visitor function
* void *VISITOR_DATA; IN: arbitrary data to pass to the visitor function.
*
* Iterate over all scales of DIM, calling an application callback
* with the item, key and any operator data.
*
* The operator callback receives a pointer to the item ,
* and the pointer to the operator data passed
* in to H5SL_iterate ('op_data'). The return values from an operator are:
* A. Zero causes the iterator to continue, returning zero when all
* nodes of that type have been processed.
* B. Positive causes the iterator to immediately return that positive
* value, indicating short-circuit success.
* C. Negative causes the iterator to immediately return that value,
* indicating failure.
*
* Programmer: pvn@ncsa.uiuc.edu
*
* 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 )
* Function: H5DSiterate_scales
*
* Purpose: H5DSiterate_scales iterates over the scales attached to dimension DIM
* of dataset DID. For each scale in the list, the visitor_data and some
* additional information, specified below, are passed to the visitor function.
* The iteration begins with the IDX object in the group and the next element
* to be processed by the operator is returned in IDX. If IDX is NULL, then the
* iterator starts at zero.
*
* Parameters:
*
* hid_t DID; IN: the dataset
* unsigned int DIM; IN: the dimension of the dataset
* int *DS_IDX; IN/OUT: on input the dimension scale index to start iterating,
* on output the next index to visit. If NULL, start at
* the first position.
* H5DS_iterate_t VISITOR; IN: the visitor function
* void *VISITOR_DATA; IN: arbitrary data to pass to the visitor function.
*
* Iterate over all scales of DIM, calling an application callback
* with the item, key and any operator data.
*
* The operator callback receives a pointer to the item ,
* and the pointer to the operator data passed
* in to H5SL_iterate ('op_data'). The return values from an operator are:
* A. Zero causes the iterator to continue, returning zero when all
* nodes of that type have been processed.
* B. Positive causes the iterator to immediately return that positive
* value, indicating short-circuit success.
* C. Negative causes the iterator to immediately return that value,
* indicating failure.
*
* Programmer: Pedro Vicente
*
* Date: January 31, 2005
*
*-------------------------------------------------------------------------
*/
herr_t
H5DSiterate_scales(hid_t did, unsigned int dim, int *ds_idx,
H5DS_iterate_t visitor, void *visitor_data )
{
hid_t scale_id;
int rank;
@ -1450,24 +1415,20 @@ out:
}
/*-------------------------------------------------------------------------
* Function: H5DSset_label
*
* Purpose: Set label for the dimension IDX of dataset DID to the value LABEL
*
* Return: Success: SUCCEED, Failure: FAIL
*
* Programmer: pvn@ncsa.uiuc.edu
*
* Date: January 11, 2005
*
* Comments:
*
* Modifications:
*
*-------------------------------------------------------------------------
*/
herr_t H5DSset_label(hid_t did, unsigned int idx, const char *label)
* Function: H5DSset_label
*
* Purpose: Set label for the dimension IDX of dataset DID to the value LABEL
*
* Return: Success: SUCCEED, Failure: FAIL
*
* Programmer: Pedro Vicente
*
* Date: January 11, 2005
*
*-------------------------------------------------------------------------
*/
herr_t
H5DSset_label(hid_t did, unsigned int idx, const char *label)
{
int has_labels;
hid_t sid = -1; /* space ID */
@ -1481,6 +1442,9 @@ herr_t 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
*-------------------------------------------------------------------------
@ -1656,29 +1620,24 @@ out:
}
/*-------------------------------------------------------------------------
* Function: H5DSget_label
*
* Purpose: Read the label LABEL for dimension IDX of dataset DID
* Up to 'size' characters are stored in 'label' followed by a '\0' string
* terminator. If the label is longer than 'size'-1,
* the string terminator is stored in the last position of the buffer to
* properly terminate the string.
*
* Return: 0 if no label found, size of label if found, Failure: FAIL
*
* Programmer: pvn@ncsa.uiuc.edu
*
* 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 H5DSget_label(hid_t did, unsigned int idx, char *label, size_t size)
* Function: H5DSget_label
*
* Purpose: Read the label LABEL for dimension IDX of dataset DID
* Up to 'size' characters are stored in 'label' followed by a '\0' string
* terminator. If the label is longer than 'size'-1,
* the string terminator is stored in the last position of the buffer to
* properly terminate the string.
*
* Return: 0 if no label found, size of label if found, Failure: FAIL
*
* Programmer: Pedro Vicente
*
* Date: January 11, 2005
*
*-------------------------------------------------------------------------
*/
ssize_t
H5DSget_label(hid_t did, unsigned int idx, char *label, size_t size)
{
int has_labels;
hid_t sid = -1; /* space ID */
@ -1818,32 +1777,24 @@ out:
}
/*-------------------------------------------------------------------------
* Function: H5DSget_scale_name
*
* Purpose: Read the name of dataset scale DID into buffer NAME
* Up to 'size' characters are stored in 'name' followed by a '\0' string
* terminator. If the name is longer than 'size'-1,
* the string terminator is stored in the last position of the buffer to
* properly terminate the string.
*
* Return: size of name if found, zero if not found, Failure: FAIL
*
* Programmer: pvn@ncsa.uiuc.edu
*
* 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)
* Function: H5DSget_scale_name
*
* Purpose: Read the name of dataset scale DID into buffer NAME
* Up to 'size' characters are stored in 'name' followed by a '\0' string
* terminator. If the name is longer than 'size'-1,
* the string terminator is stored in the last position of the buffer to
* properly terminate the string.
*
* Return: size of name if found, zero if not found, Failure: FAIL
*
* Programmer: Pedro Vicente
*
* Date: January 04, 2005
*
*-------------------------------------------------------------------------
*/
ssize_t
H5DSget_scale_name(hid_t did, char *name, size_t size)
{
hid_t aid; /* attribute ID */
hid_t tid = -1; /* attribute type ID */
@ -1945,51 +1896,49 @@ out:
}
/*-------------------------------------------------------------------------
* Function: H5DSis_scale
*
* Purpose: check if the dataset DID is a dimension scale
*
* Return: 1, is, 0, not, FAIL, error
*
* Programmer: pvn@ncsa.uiuc.edu
*
* Date: January 04, 2005
*
* Comments:
*
* Modifications:
*
*-------------------------------------------------------------------------
*/
* Function: H5DSis_scale
*
* Purpose: check if the dataset DID is a dimension scale
*
* Return: 1, is, 0, not, FAIL, error
*
* Programmer: Pedro Vicente
*
* Date: January 04, 2005
*
*-------------------------------------------------------------------------
*/
htri_t H5DSis_scale(hid_t did)
{
hid_t tid = -1; /* attribute type ID */
hid_t aid = -1; /* attribute ID */
herr_t has_class; /* has the "CLASS" attribute */
htri_t is_ds; /* boolean return value */
H5I_type_t it; /* ID type */
char *buf; /* Name of attribute */
hsize_t storage_size; /* Size of storage for attribute */
hid_t tid = -1; /* attribute type ID */
hid_t aid = -1; /* attribute ID */
herr_t attr_class; /* has the "CLASS" attribute */
htri_t is_ds = -1; /* set to "not a dimension scale" */
H5I_type_t it; /* type of identifier */
char *buf = NULL; /* buffer to read name of attribute */
size_t string_size; /* size of storage for the attribute */
H5T_class_t type_class;
H5T_str_t strpad;
/*-------------------------------------------------------------------------
/*------------------------------------------------------------------------
* parameter checking
*-------------------------------------------------------------------------
*/
/* get ID type */
if ((it = H5Iget_type(did)) < 0)
return FAIL;
goto out;
if(H5I_DATASET != it)
return FAIL;
goto out;
/* try to find the attribute "CLASS" on the dataset */
if((has_class = H5LT_find_attribute(did, "CLASS")) < 0)
return FAIL;
if((attr_class = H5LT_find_attribute(did, "CLASS")) < 0)
goto out;
if(has_class == 0)
if(attr_class == 0) {
is_ds = 0;
goto out;
}
else
{
if((aid = H5Aopen(did, "CLASS", H5P_DEFAULT)) < 0)
@ -1998,19 +1947,33 @@ htri_t H5DSis_scale(hid_t did)
if((tid = H5Aget_type(aid)) < 0)
goto out;
/* check to make sure attribute is a string */
if(H5T_STRING != H5Tget_class(tid))
/* check to make sure attribute is a string;
if not, then it is not dimension scale */
if((type_class = H5Tget_class(tid)) < 0)
goto out;
/* check to make sure string is null-terminated */
if(H5T_STR_NULLTERM != H5Tget_strpad(tid))
if(H5T_STRING != type_class) {
is_ds = 0;
goto out;
/* allocate buffer large enough to hold string */
if((storage_size = H5Aget_storage_size(aid)) == 0)
}
/* check to make sure string is null-terminated;
if not, then it is not dimension scale */
if((strpad = H5Tget_strpad(tid)) < 0 )
goto out;
if(H5T_STR_NULLTERM != strpad) {
is_ds = 0;
goto out;
}
buf = (char*)HDmalloc( (size_t)storage_size * sizeof(char) + 1);
/* According to Spec string is ASCII and its size should be 16 to hold
"DIMENSION_SCALE" string */
if((string_size = H5Tget_size(tid)) == 0)
goto out;
if(string_size != 16) {
is_ds = 0;
goto out;
}
buf = (char*)HDmalloc((size_t)string_size * sizeof(char));
if(buf == NULL)
goto out;
@ -2019,10 +1982,9 @@ htri_t H5DSis_scale(hid_t did)
goto out;
/* compare strings */
if(HDstrncmp(buf, DIMENSION_SCALE_CLASS, MIN(HDstrlen(DIMENSION_SCALE_CLASS),HDstrlen(buf)))==0)
if(HDstrncmp(buf, DIMENSION_SCALE_CLASS,
MIN(HDstrlen(DIMENSION_SCALE_CLASS),HDstrlen(buf)))==0)
is_ds = 1;
else
is_ds = 0;
HDfree(buf);
@ -2031,44 +1993,35 @@ htri_t H5DSis_scale(hid_t did)
if (H5Aclose(aid) < 0)
goto out;
}
return is_ds;
/* error zone */
out:
H5E_BEGIN_TRY {
H5Aclose(aid);
H5Tclose(tid);
} H5E_END_TRY;
return FAIL;
if(is_ds < 0) {
HDfree(buf);
H5E_BEGIN_TRY {
H5Aclose(aid);
H5Tclose(tid);
} H5E_END_TRY;
}
return is_ds;
}
/*-------------------------------------------------------------------------
* Function: H5DSget_num_scales
*
* Purpose: get the number of scales linked to the IDX dimension of dataset DID
*
* Return:
* Success: number of scales
* Failure: FAIL
*
* Programmer: pvn@ncsa.uiuc.edu
*
* Date: January 13, 2005
*
* Comments:
*
* Modifications:
*
*-------------------------------------------------------------------------
*/
int H5DSget_num_scales(hid_t did,
unsigned int idx)
* Function: H5DSget_num_scales
*
* Purpose: get the number of scales linked to the IDX dimension of dataset DID
*
* Return:
* Success: number of scales
* Failure: FAIL
*
* Programmer: Pedro Vicente
*
* Date: January 13, 2005
*
*-------------------------------------------------------------------------
*/
int
H5DSget_num_scales(hid_t did, unsigned int idx)
{
int has_dimlist;
hid_t sid; /* space ID */
@ -2171,25 +2124,20 @@ out:
}
/*-------------------------------------------------------------------------
* Function: H5DS_is_reserved
*
* Purpose: Verify that a dataset's CLASS is either an image, palette or table
*
* Return: true, false, fail
*
* Programmer: pvn@ncsa.uiuc.edu
*
* Date: March 19, 2005
*
* Comments:
*
* Modifications:
*
*-------------------------------------------------------------------------
*/
static
herr_t H5DS_is_reserved(hid_t did)
* Function: H5DS_is_reserved
*
* Purpose: Verify that a dataset's CLASS is either an image, palette or table
*
* Return: true, false, fail
*
* Programmer: Pedro Vicente
*
* Date: March 19, 2005
*
*-------------------------------------------------------------------------
*/
static herr_t
H5DS_is_reserved(hid_t did)
{
int has_class;
hid_t tid = -1;
@ -2262,26 +2210,21 @@ out:
}
/*-------------------------------------------------------------------------
* Function: H5DS_get_REFLIST_type
*
* Purpose: This is a helper function to return a native type for
* the REFERENCE_LIST attribute.
*
* Return: Type identifier on success and negative on failure
*
* Programmer: epourmal@hdfgroup.org
*
* Date: May 22, 2010
*
* Comments:
*
* Modifications:
*
*-------------------------------------------------------------------------
*/
static
hid_t H5DS_get_REFLIST_type(void)
* Function: H5DS_get_REFLIST_type
*
* Purpose: This is a helper function to return a native type for
* the REFERENCE_LIST attribute.
*
* Return: Type identifier on success and negative on failure
*
* Programmer: Elena Pourmal
*
* Date: May 22, 2010
*
*-------------------------------------------------------------------------
*/
static hid_t
H5DS_get_REFLIST_type(void)
{
hid_t ntid_t = -1;

@ -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
*
@ -77,7 +75,7 @@ herr_t H5IMmake_image_8bit( hid_t loc_id,
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente Nunes, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente Nunes
*
* Date: June 13, 2001
*
@ -162,7 +160,7 @@ herr_t H5IMmake_image_24bit( hid_t loc_id,
*
* Return:
*
* Programmer: Pedro Vicente Nunes, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente Nunes
*
* Date: May 28, 2001
*
@ -204,7 +202,7 @@ static herr_t find_palette(hid_t loc_id,
*
* Return: Success: 1, Failure: 0
*
* Programmer: Pedro Vicente Nunes, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente Nunes
*
* Date: May 11, 2001
*
@ -230,7 +228,7 @@ herr_t 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
*
@ -412,7 +410,7 @@ out:
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente Nunes, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente Nunes
*
* Date: June 13, 2001
*
@ -462,7 +460,7 @@ out:
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente Nunes, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente Nunes
*
* Date: May 01, 2001
*
@ -518,7 +516,7 @@ herr_t H5IMmake_palette( hid_t loc_id,
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente Nunes, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente Nunes
*
* Date: May 01, 2001
*
@ -695,7 +693,7 @@ out:
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente Nunes, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente Nunes
*
* Date: September 10, 2001
*
@ -796,7 +794,7 @@ out:
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente Nunes, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente Nunes
*
* Date: July 22, 2001
*
@ -887,7 +885,7 @@ out:
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente Nunes, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente Nunes
*
* Date: July 22, 2001
*
@ -1003,7 +1001,7 @@ out:
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente Nunes, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente Nunes
*
* Date: August 30, 2001
*
@ -1110,7 +1108,7 @@ out:
*
* Return: true, false, fail
*
* Programmer: Pedro Vicente Nunes, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente Nunes
*
* Date: August 30, 2001
*
@ -1214,7 +1212,7 @@ out:
*
* Return: true, false, fail
*
* Programmer: Pedro Vicente Nunes, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente Nunes
*
* Date: August 30, 2001
*

@ -11,10 +11,6 @@
* help@hdfgroup.org. *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
#include <string.h>
#include <stdlib.h>
#include <assert.h>
#include <stdio.h>
#include "H5LDprivate.h"
/*-------------------------------------------------------------------------

@ -11,11 +11,6 @@
* help@hdfgroup.org. *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "H5LTprivate.h"
/* For Lex and Yacc */
@ -504,7 +499,7 @@ static herr_t H5LT_get_attribute_mem(hid_t loc_id,
*
* Return: Success: 0, Failure: -1
*
* Programmer: Quincey Koziol, koziol@hdfgroup.org
* Programmer: Quincey Koziol
*
* Date: October 10, 2007
*
@ -570,7 +565,7 @@ out:
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: March 19, 2001
*
@ -599,7 +594,7 @@ herr_t H5LTmake_dataset( hid_t loc_id,
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: September 14, 2001
*
@ -628,7 +623,7 @@ herr_t H5LTmake_dataset_char( hid_t loc_id,
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: September 14, 2001
*
@ -657,7 +652,7 @@ herr_t H5LTmake_dataset_short( hid_t loc_id,
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: September 14, 2001
*
@ -688,7 +683,7 @@ herr_t H5LTmake_dataset_int( hid_t loc_id,
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: September 14, 2001
*
@ -717,7 +712,7 @@ herr_t H5LTmake_dataset_long( hid_t loc_id,
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: September 14, 2001
*
@ -748,7 +743,7 @@ herr_t H5LTmake_dataset_float( hid_t loc_id,
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: September 14, 2001
*
@ -778,7 +773,7 @@ herr_t H5LTmake_dataset_double( hid_t loc_id,
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: October 05, 2004
*
@ -970,7 +965,7 @@ out:
*
* Return: Success: 0, Failure: -1
*
* Programmer: Quincey Koziol, koziol@hdfgroup.org
* Programmer: Quincey Koziol
*
* Date: October 8, 2007
*
@ -1012,7 +1007,7 @@ out:
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: June 13, 2001
*
@ -1035,7 +1030,7 @@ herr_t H5LTread_dataset(hid_t loc_id,
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: November 5, 2001
*
@ -1056,7 +1051,7 @@ herr_t H5LTread_dataset_char( hid_t loc_id,
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: November 5, 2001
*
@ -1077,7 +1072,7 @@ herr_t H5LTread_dataset_short( hid_t loc_id,
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: November 5, 2001
*
@ -1098,7 +1093,7 @@ herr_t H5LTread_dataset_int( hid_t loc_id,
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: November 5, 2001
*
@ -1119,7 +1114,7 @@ herr_t H5LTread_dataset_long( hid_t loc_id,
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: November 5, 2001
*
@ -1141,7 +1136,7 @@ herr_t H5LTread_dataset_float( hid_t loc_id,
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: November 5, 2001
*
@ -1163,7 +1158,7 @@ herr_t H5LTread_dataset_double( hid_t loc_id,
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: October 05, 2004
*
@ -1216,7 +1211,7 @@ out:
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: September 4, 2001
*
@ -1272,7 +1267,7 @@ out:
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: September 4, 2001
* Modified: February 28, 2006: checked for NULL parameters
@ -1348,7 +1343,7 @@ out:
*
* Purpose: operator function used by H5LTfind_dataset
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: June 21, 2001
*
@ -1392,7 +1387,7 @@ find_dataset(hid_t loc_id, const char *name, const H5L_info2_t *linfo, void *op_
* Purpose: Inquires if a dataset named dset_name exists attached
* to the object loc_id.
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: July 15, 2001
*
@ -1436,7 +1431,7 @@ H5_GCC_DIAG_ON(cast-qual)
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: July 23, 2001
*
@ -1534,7 +1529,7 @@ out:
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: July 25, 2001
*
@ -1613,7 +1608,7 @@ out:
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: November 7, 2001
*
@ -1643,7 +1638,7 @@ herr_t H5LTset_attribute_char( hid_t loc_id,
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: March 8, 2004
*
@ -1674,7 +1669,7 @@ herr_t H5LTset_attribute_uchar( hid_t loc_id,
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: November 7, 2001
*
@ -1705,7 +1700,7 @@ herr_t H5LTset_attribute_short( hid_t loc_id,
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: March 8, 2004
*
@ -1736,7 +1731,7 @@ herr_t H5LTset_attribute_ushort( hid_t loc_id,
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: November 7, 2001
*
@ -1767,7 +1762,7 @@ herr_t H5LTset_attribute_int( hid_t loc_id,
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: March 8, 2004
*
@ -1799,7 +1794,7 @@ herr_t H5LTset_attribute_uint( hid_t loc_id,
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: November 7, 2001
*
@ -1829,7 +1824,7 @@ herr_t H5LTset_attribute_long( hid_t loc_id,
*
* Return: Success: 0, Failure: -1
*
* Programmer: Elena Pourmal, epourmal@ncsa.uiuc.edu
* Programmer: Elena Pourmal
*
* Date: June 17, 2005
*
@ -1861,7 +1856,7 @@ herr_t H5LTset_attribute_long_long( hid_t loc_id,
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: March 8, 2004
*
@ -1893,7 +1888,7 @@ herr_t H5LTset_attribute_ulong( hid_t loc_id,
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: July 25, 2001
*
@ -1926,7 +1921,7 @@ herr_t H5LTset_attribute_float( hid_t loc_id,
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: November 7, 2001
*
@ -1957,7 +1952,7 @@ herr_t H5LTset_attribute_double( hid_t loc_id,
*
* Purpose: operator function used by H5LT_find_attribute
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: June 21, 2001
*
@ -1998,7 +1993,7 @@ find_attr(hid_t loc_id, const char *name, const H5A_info_t *ainfo,
* Purpose: Inquires if an attribute named attr_name exists attached to
* the object loc_id.
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: May 17, 2006
*
@ -2020,7 +2015,7 @@ herr_t H5LTfind_attribute( hid_t loc_id, const char* attr_name )
*
* Purpose: Inquires if an attribute named attr_name exists attached to the object loc_id.
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: June 21, 2001
*
@ -2059,7 +2054,7 @@ H5_GCC_DIAG_ON(cast-qual)
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: September 4, 2001
*
@ -2129,7 +2124,7 @@ out:
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: September 4, 2001
*
@ -2215,7 +2210,7 @@ out:
*
* Return: Success: 0, Failure: -1
*
* Programmer: Raymond Lu, slu@ncsa.uiuc.edu
* Programmer: Raymond Lu
*
* Date: October 6, 2004
*
@ -2265,7 +2260,7 @@ out:
*
* Return: void
*
* Programmer: Raymond Lu, songyulu@hdfgroup.org
* Programmer: Raymond Lu
*
* Date: 29 September 2011
*
@ -2325,7 +2320,7 @@ out:
*
* Return: void
*
* Programmer: Raymond Lu, slu@ncsa.uiuc.edu
* Programmer: Raymond Lu
*
* Date: December 6, 2005
*
@ -2489,7 +2484,7 @@ out:
*
* Return: Success: 0, Failure: -1
*
* Programmer: Raymond Lu, slu@ncsa.uiuc.edu
* Programmer: Raymond Lu
*
* Date: December 6, 2005
*
@ -2536,7 +2531,7 @@ out:
*
* Return: Success: 0, Failure: -1
*
* Programmer: Raymond Lu, slu@ncsa.uiuc.edu
* Programmer: Raymond Lu
*
* Date: December 20, 2005
*
@ -3101,7 +3096,7 @@ out:
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: September 19, 2002
*
@ -3153,7 +3148,7 @@ herr_t H5LTget_attribute_string( hid_t loc_id,
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: September 19, 2002
*
@ -3182,7 +3177,7 @@ herr_t H5LTget_attribute_char( hid_t loc_id,
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: March 8, 2004
*
@ -3213,7 +3208,7 @@ herr_t H5LTget_attribute_uchar( hid_t loc_id,
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: September 19, 2002
*
@ -3242,7 +3237,7 @@ herr_t H5LTget_attribute_short( hid_t loc_id,
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: March 8, 2004
*
@ -3273,7 +3268,7 @@ herr_t H5LTget_attribute_ushort( hid_t loc_id,
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: September 19, 2002
*
@ -3302,7 +3297,7 @@ herr_t H5LTget_attribute_int( hid_t loc_id,
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: March 8, 2004
*
@ -3333,7 +3328,7 @@ herr_t H5LTget_attribute_uint( hid_t loc_id,
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: September 19, 2002
*
@ -3362,7 +3357,7 @@ herr_t H5LTget_attribute_long( hid_t loc_id,
*
* Return: Success: 0, Failure: -1
*
* Programmer: Elena Pourmal, epourmal@ncsa.uiuc.edu
* Programmer: Elena Pourmal
*
* Date: June 17, 2005
*
@ -3392,7 +3387,7 @@ herr_t H5LTget_attribute_long_long( hid_t loc_id,
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: March 8, 2004
*
@ -3422,7 +3417,7 @@ herr_t H5LTget_attribute_ulong( hid_t loc_id,
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: September 19, 2002
*
@ -3454,7 +3449,7 @@ herr_t H5LTget_attribute_float( hid_t loc_id,
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: September 19, 2002
*
@ -3486,7 +3481,7 @@ herr_t H5LTget_attribute_double( hid_t loc_id,
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: September 19, 2002
*
@ -3525,7 +3520,7 @@ herr_t H5LTget_attribute( hid_t loc_id,
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: September 19, 2002
*
@ -3589,7 +3584,7 @@ out:
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: September 19, 2002
*
@ -3639,7 +3634,7 @@ out:
*
* Return: FAIL on error, SUCCESS on success
*
* Programmer: pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: January 04, 2005
*

File diff suppressed because it is too large Load Diff

@ -28,6 +28,13 @@
#pragma GCC diagnostic ignored "-Wsuggest-attribute=const"
#endif
/* Turn off null dereference warnings in gcc.
* We have no control over this generated code.
*/
#if defined __GNUC__ && 600 <= __GNUC__ * 100
#pragma GCC diagnostic ignored "-Wnull-dereference"
#endif
int my_yyinput(char *, int);
#undef YY_INPUT
#define YY_INPUT(b, r, ms) (r=my_yyinput(b, ms))

File diff suppressed because it is too large Load Diff

@ -1,8 +1,8 @@
/* A Bison parser, made by GNU Bison 2.7. */
/* A Bison parser, made by GNU Bison 3.0.4. */
/* Bison interface for Yacc-like parsers in C
Copyright (C) 1984, 1989-1990, 2000-2012 Free Software Foundation, Inc.
Copyright (C) 1984, 1989-1990, 2000-2015 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@ -32,7 +32,7 @@
#ifndef YY_H5LTYY_HL_SRC_H5LTPARSE_H_INCLUDED
# define YY_H5LTYY_HL_SRC_H5LTPARSE_H_INCLUDED
/* Enabling traces. */
/* Debug traces. */
#ifndef YYDEBUG
# define YYDEBUG 0
#endif
@ -40,105 +40,92 @@
extern int H5LTyydebug;
#endif
/* Tokens. */
/* Token type. */
#ifndef YYTOKENTYPE
# define YYTOKENTYPE
/* Put the tokens into the symbol table, so that GDB and other debuggers
know about them. */
enum yytokentype {
H5T_STD_I8BE_TOKEN = 258,
H5T_STD_I8LE_TOKEN = 259,
H5T_STD_I16BE_TOKEN = 260,
H5T_STD_I16LE_TOKEN = 261,
H5T_STD_I32BE_TOKEN = 262,
H5T_STD_I32LE_TOKEN = 263,
H5T_STD_I64BE_TOKEN = 264,
H5T_STD_I64LE_TOKEN = 265,
H5T_STD_U8BE_TOKEN = 266,
H5T_STD_U8LE_TOKEN = 267,
H5T_STD_U16BE_TOKEN = 268,
H5T_STD_U16LE_TOKEN = 269,
H5T_STD_U32BE_TOKEN = 270,
H5T_STD_U32LE_TOKEN = 271,
H5T_STD_U64BE_TOKEN = 272,
H5T_STD_U64LE_TOKEN = 273,
H5T_NATIVE_CHAR_TOKEN = 274,
H5T_NATIVE_SCHAR_TOKEN = 275,
H5T_NATIVE_UCHAR_TOKEN = 276,
H5T_NATIVE_SHORT_TOKEN = 277,
H5T_NATIVE_USHORT_TOKEN = 278,
H5T_NATIVE_INT_TOKEN = 279,
H5T_NATIVE_UINT_TOKEN = 280,
H5T_NATIVE_LONG_TOKEN = 281,
H5T_NATIVE_ULONG_TOKEN = 282,
H5T_NATIVE_LLONG_TOKEN = 283,
H5T_NATIVE_ULLONG_TOKEN = 284,
H5T_IEEE_F32BE_TOKEN = 285,
H5T_IEEE_F32LE_TOKEN = 286,
H5T_IEEE_F64BE_TOKEN = 287,
H5T_IEEE_F64LE_TOKEN = 288,
H5T_NATIVE_FLOAT_TOKEN = 289,
H5T_NATIVE_DOUBLE_TOKEN = 290,
H5T_NATIVE_LDOUBLE_TOKEN = 291,
H5T_STRING_TOKEN = 292,
STRSIZE_TOKEN = 293,
STRPAD_TOKEN = 294,
CSET_TOKEN = 295,
CTYPE_TOKEN = 296,
H5T_VARIABLE_TOKEN = 297,
H5T_STR_NULLTERM_TOKEN = 298,
H5T_STR_NULLPAD_TOKEN = 299,
H5T_STR_SPACEPAD_TOKEN = 300,
H5T_CSET_ASCII_TOKEN = 301,
H5T_CSET_UTF8_TOKEN = 302,
H5T_C_S1_TOKEN = 303,
H5T_FORTRAN_S1_TOKEN = 304,
H5T_OPAQUE_TOKEN = 305,
OPQ_SIZE_TOKEN = 306,
OPQ_TAG_TOKEN = 307,
H5T_COMPOUND_TOKEN = 308,
H5T_ENUM_TOKEN = 309,
H5T_ARRAY_TOKEN = 310,
H5T_VLEN_TOKEN = 311,
STRING = 312,
NUMBER = 313
};
enum yytokentype
{
H5T_STD_I8BE_TOKEN = 258,
H5T_STD_I8LE_TOKEN = 259,
H5T_STD_I16BE_TOKEN = 260,
H5T_STD_I16LE_TOKEN = 261,
H5T_STD_I32BE_TOKEN = 262,
H5T_STD_I32LE_TOKEN = 263,
H5T_STD_I64BE_TOKEN = 264,
H5T_STD_I64LE_TOKEN = 265,
H5T_STD_U8BE_TOKEN = 266,
H5T_STD_U8LE_TOKEN = 267,
H5T_STD_U16BE_TOKEN = 268,
H5T_STD_U16LE_TOKEN = 269,
H5T_STD_U32BE_TOKEN = 270,
H5T_STD_U32LE_TOKEN = 271,
H5T_STD_U64BE_TOKEN = 272,
H5T_STD_U64LE_TOKEN = 273,
H5T_NATIVE_CHAR_TOKEN = 274,
H5T_NATIVE_SCHAR_TOKEN = 275,
H5T_NATIVE_UCHAR_TOKEN = 276,
H5T_NATIVE_SHORT_TOKEN = 277,
H5T_NATIVE_USHORT_TOKEN = 278,
H5T_NATIVE_INT_TOKEN = 279,
H5T_NATIVE_UINT_TOKEN = 280,
H5T_NATIVE_LONG_TOKEN = 281,
H5T_NATIVE_ULONG_TOKEN = 282,
H5T_NATIVE_LLONG_TOKEN = 283,
H5T_NATIVE_ULLONG_TOKEN = 284,
H5T_IEEE_F32BE_TOKEN = 285,
H5T_IEEE_F32LE_TOKEN = 286,
H5T_IEEE_F64BE_TOKEN = 287,
H5T_IEEE_F64LE_TOKEN = 288,
H5T_NATIVE_FLOAT_TOKEN = 289,
H5T_NATIVE_DOUBLE_TOKEN = 290,
H5T_NATIVE_LDOUBLE_TOKEN = 291,
H5T_STRING_TOKEN = 292,
STRSIZE_TOKEN = 293,
STRPAD_TOKEN = 294,
CSET_TOKEN = 295,
CTYPE_TOKEN = 296,
H5T_VARIABLE_TOKEN = 297,
H5T_STR_NULLTERM_TOKEN = 298,
H5T_STR_NULLPAD_TOKEN = 299,
H5T_STR_SPACEPAD_TOKEN = 300,
H5T_CSET_ASCII_TOKEN = 301,
H5T_CSET_UTF8_TOKEN = 302,
H5T_C_S1_TOKEN = 303,
H5T_FORTRAN_S1_TOKEN = 304,
H5T_OPAQUE_TOKEN = 305,
OPQ_SIZE_TOKEN = 306,
OPQ_TAG_TOKEN = 307,
H5T_COMPOUND_TOKEN = 308,
H5T_ENUM_TOKEN = 309,
H5T_ARRAY_TOKEN = 310,
H5T_VLEN_TOKEN = 311,
STRING = 312,
NUMBER = 313
};
#endif
/* Value type. */
#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
typedef union YYSTYPE
union YYSTYPE
{
/* Line 2058 of yacc.c */
#line 72 "hl/src/H5LTparse.y"
#line 72 "hl/src/H5LTparse.y" /* yacc.c:1909 */
int ival; /*for integer token*/
char *sval; /*for name string*/
hid_t hid; /*for hid_t token*/
#line 119 "hl/src/H5LTparse.h" /* yacc.c:1909 */
};
/* Line 2058 of yacc.c */
#line 122 "hl/src/H5LTparse.h"
} YYSTYPE;
typedef union YYSTYPE YYSTYPE;
# define YYSTYPE_IS_TRIVIAL 1
# define yystype YYSTYPE /* obsolescent; will be withdrawn */
# define YYSTYPE_IS_DECLARED 1
#endif
extern YYSTYPE H5LTyylval;
#ifdef YYPARSE_PARAM
#if defined __STDC__ || defined __cplusplus
int H5LTyyparse (void *YYPARSE_PARAM);
#else
int H5LTyyparse ();
#endif
#else /* ! YYPARSE_PARAM */
#if defined __STDC__ || defined __cplusplus
int H5LTyyparse (void);
#else
int H5LTyyparse ();
#endif
#endif /* ! YYPARSE_PARAM */
#endif /* !YY_H5LTYY_HL_SRC_H5LTPARSE_H_INCLUDED */

@ -11,8 +11,6 @@
* help@hdfgroup.org. *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
#include <stdlib.h>
#include "H5PTprivate.h"
#include "H5TBprivate.h"
@ -53,8 +51,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
*
@ -182,8 +180,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
*
@ -301,8 +299,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
*
@ -426,8 +424,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
*
@ -475,8 +473,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
*
@ -530,8 +528,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
*
@ -583,8 +581,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
*
@ -628,8 +626,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
*
@ -680,8 +678,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
*
@ -737,8 +735,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
*
@ -795,8 +793,8 @@ herr_t 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
*
@ -832,8 +830,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
*
@ -861,8 +859,8 @@ herr_t 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
*
@ -910,8 +908,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
*

@ -11,9 +11,6 @@
* help@hdfgroup.org. *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
#include <stdlib.h>
#include <string.h>
#include "H5LTprivate.h"
#include "H5TBprivate.h"
@ -55,7 +52,7 @@ static hid_t H5TB_create_type(hid_t loc_id,
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
* Quincey Koziol
*
* Date: January 17, 2001
@ -275,7 +272,7 @@ out:
* Return: Success: 0, Failure: -1
*
* Programmers:
* Pedro Vicente, pvn@ncsa.uiuc.edu
* Pedro Vicente
* Quincey Koziol
*
* Date: November 19, 2001
@ -345,7 +342,7 @@ out:
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: November 19, 2001
*
@ -442,7 +439,7 @@ out:
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: November 21, 2001
*
@ -605,7 +602,7 @@ out:
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: November 21, 2001
*
@ -778,7 +775,7 @@ out:
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: November 20, 2001
*
@ -853,7 +850,7 @@ out:
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: November 19, 2001
*
@ -923,7 +920,7 @@ out:
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: November 19, 2001
*
@ -1086,7 +1083,7 @@ out:
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: November 19, 2001
*
@ -1251,7 +1248,7 @@ out:
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: November 26, 2001
*
@ -1413,7 +1410,7 @@ out:
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: November 26, 2001
*
@ -1569,7 +1566,7 @@ out:
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: December 5, 2001
*
@ -1701,7 +1698,7 @@ out:
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: December 10, 2001
*
@ -2059,7 +2056,7 @@ out:
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: January 30, 2002
*
@ -2480,7 +2477,7 @@ out:
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: January 30, 2002
*
@ -2934,7 +2931,7 @@ out:
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: January 30, 2001
*
@ -2960,7 +2957,7 @@ herr_t H5TBAget_title(hid_t loc_id,
*
* Return: Success: TRUE/FALSE, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: January 30, 2002
*
@ -3033,7 +3030,7 @@ out:
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: November 19, 2001
*
@ -3120,7 +3117,7 @@ out:
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: November 19, 2001
*
@ -3240,7 +3237,7 @@ out:
*
* Return: Success: TRUE/FALSE, Failure: N/A
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: November 19, 2001
*
@ -3281,7 +3278,7 @@ hbool_t 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
*
@ -3345,7 +3342,7 @@ out:
*
* Return: Success: the memory type ID, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: March 31, 2004
*
@ -3445,8 +3442,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
*
@ -3512,8 +3509,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
*

@ -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"

@ -12,7 +12,7 @@
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/*
* Programmer: Quincey Koziol <koziol@ncsa.uiuc.edu>
* Programmer: Quincey Koziol
* Friday, April 28, 2006
*
* Purpose: Test support stuff.

@ -11,8 +11,6 @@
* help@hdfgroup.org. *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
#include <stdlib.h>
#include <string.h>
#include "h5hltest.h"
#include "H5srcdir.h"
#include "H5DSpublic.h"

@ -11,10 +11,6 @@
* help@hdfgroup.org. *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
#include <math.h>
#include <stdlib.h>
#include <string.h>
#include "h5hltest.h"
#include "H5DOpublic.h"

@ -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"

@ -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"

@ -11,8 +11,6 @@
* help@hdfgroup.org. *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
#include <stdlib.h>
#include <string.h>
#include "h5hltest.h"
#include "H5srcdir.h"
#include "H5LTpublic.h"

@ -11,8 +11,6 @@
* help@hdfgroup.org. *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
#include <stdlib.h>
#include <string.h>
#include "h5hltest.h"
#include "H5PTpublic.h"
#include "H5TBpublic.h"

@ -11,8 +11,6 @@
* help@hdfgroup.org. *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
#include <stdlib.h>
#include <string.h>
#include "h5hltest.h"
#include "H5srcdir.h"
#include "H5TBpublic.h"

@ -22,7 +22,7 @@
*
* Purpose: generate files for h52gif testing
*
* Programmer: Pedro Vicente, pvn@hdfgroup.org
* Programmer: Pedro Vicente
*
* Date: March 15, 2007
*

@ -6687,6 +6687,55 @@ public class H5 implements java.io.Serializable {
public synchronized static native void H5Pset_evict_on_close(long fapl_id, boolean evict_on_close)
throws HDF5LibraryException;
/**
* H5Pget_use_file_locking retrieves whether we are using file locking.
*
* @param fapl_id
* IN: File access property list identifier
*
* @return indication if file locking is used.
*
* @exception HDF5LibraryException
* - Error from the HDF-5 Library.
*
**/
public synchronized static native boolean H5Pget_use_file_locking(long fapl_id)
throws HDF5LibraryException;
/**
* H5Pget_use_file_locking retrieves whether we ignore file locks when they are disabled.
*
* @param fapl_id
* IN: File access property list identifier
*
* @return indication if file locking is ignored.
*
* @exception HDF5LibraryException
* - Error from the HDF-5 Library.
*
**/
public synchronized static native boolean H5Pget_ignore_disabled_file_locking(long fapl_id)
throws HDF5LibraryException;
/**
* H5Pset_file_locking sets parameters related to file locking.
*
* @param fapl_id
* IN: File access property list identifier
*
* @param use_file_locking
* IN: Whether the library will use file locking when opening files (mainly for SWMR semantics).
*
* @param ignore_when_disabled
* IN: Whether file locking will be ignored when disabled on a file system (useful for Lustre).
*
* @exception HDF5LibraryException
* - Error from the HDF-5 Library.
*
**/
public synchronized static native void H5Pset_file_locking(long fapl_id, boolean use_file_locking, boolean ignore_when_disabled)
throws HDF5LibraryException;
// ///// unimplemented /////
// herr_t H5Pset_vol(hid_t plist_id, hid_t new_vol_id, const void *new_vol_info);
// herr_t H5Pget_vol_id(hid_t plist_id, hid_t *vol_id);

@ -1375,6 +1375,78 @@ done:
return bval;
} /* end Java_hdf_hdf5lib_H5_H5Pget_1evict_1on_1close */
/*
* Class: hdf_hdf5lib_H5
* Method: H5Pset_file_locking
* Signature: (JZZ)V
*/
JNIEXPORT void JNICALL
Java_hdf_hdf5lib_H5_H5Pset_1file_1locking
(JNIEnv *env, jclass clss, jlong fapl_id, jboolean use_file_locking, jboolean ignore_when_disabled)
{
hbool_t use_file_locking_val = TRUE;
hbool_t ignore_when_disabled_val = TRUE;
UNUSED(clss);
use_file_locking_val = (use_file_locking == JNI_TRUE) ? TRUE : FALSE;
ignore_when_disabled_val = (ignore_when_disabled == JNI_TRUE) ? TRUE : FALSE;
if (H5Pset_file_locking((hid_t)fapl_id, use_file_locking_val, ignore_when_disabled_val) < 0)
H5_LIBRARY_ERROR(ENVONLY);
done:
return;
} /* end Java_hdf_hdf5lib_H5_H5Pset_1file_1locking */
/*
* Class: hdf_hdf5lib_H5
* Method: H5Pget_use_file_locking
* Signature: (J)Z
*/
JNIEXPORT jboolean JNICALL
Java_hdf_hdf5lib_H5_H5Pget_1use_1file_1locking
(JNIEnv *env, jclass clss, jlong fapl_id)
{
hbool_t use_file_locking_val = TRUE;
hbool_t unused = TRUE;
jboolean bval = JNI_FALSE;
UNUSED(clss);
if (H5Pget_file_locking((hid_t)fapl_id, &use_file_locking_val, &unused) < 0)
H5_LIBRARY_ERROR(ENVONLY);
bval = (use_file_locking_val == TRUE) ? JNI_TRUE : JNI_FALSE;
done:
return bval;
} /* end Java_hdf_hdf5lib_H5_H5Pget_1use_1file_1locking */
/*
* Class: hdf_hdf5lib_H5
* Method: H5Pget_ignore_disabled_file_locking
* Signature: (J)Z
*/
JNIEXPORT jboolean JNICALL
Java_hdf_hdf5lib_H5_H5Pget_1ignore_1disabled_1file_1locking
(JNIEnv *env, jclass clss, jlong fapl_id)
{
hbool_t ignore_when_disabled_val = TRUE;
hbool_t unused = TRUE;
jboolean bval = JNI_FALSE;
UNUSED(clss);
if (H5Pget_file_locking((hid_t)fapl_id, &unused, &ignore_when_disabled_val) < 0)
H5_LIBRARY_ERROR(ENVONLY);
bval = (ignore_when_disabled_val == TRUE) ? JNI_TRUE : JNI_FALSE;
done:
return bval;
} /* end Java_hdf_hdf5lib_H5_H5Pget_1ignore_1disabled_1file_1locking */
/*
* Class: hdf_hdf5lib_H5
* Method: H5Pset_metadata_read_attempts

@ -390,6 +390,33 @@ JNIEXPORT jboolean JNICALL
Java_hdf_hdf5lib_H5_H5Pget_1evict_1on_1close
(JNIEnv *, jclass, jlong);
/*
* Class: hdf_hdf5lib_H5
* Method: H5Pset_file_locking
* Signature: (JZZ)V
*/
JNIEXPORT void JNICALL
Java_hdf_hdf5lib_H5_H5Pset_1file_1locking
(JNIEnv *env, jclass clss, jlong fapl_id, jboolean use_file_locking, jboolean ignore_when_disabled);
/*
* Class: hdf_hdf5lib_H5
* Method: H5Pget_use_file_locking
* Signature: (J)Z
*/
JNIEXPORT jboolean JNICALL
Java_hdf_hdf5lib_H5_H5Pget_1use_1file_1locking
(JNIEnv *env, jclass clss, jlong fapl_id);
/*
* Class: hdf_hdf5lib_H5
* Method: H5Pget_ignore_disabled_file_locking
* Signature: (J)Z
*/
JNIEXPORT jboolean JNICALL
Java_hdf_hdf5lib_H5_H5Pget_1ignore_1disabled_1file_1locking
(JNIEnv *env, jclass clss, jlong fapl_id);
/*
* Class: hdf_hdf5lib_H5
* Method: H5Pset_metadata_read_attempts

@ -1398,4 +1398,36 @@ public class TestH5Pfapl {
fail("H5P_evict_on_close: " + err);
}
}
@Test
public void testH5P_file_locking() {
boolean use_file_locking = false;
boolean ignore_disabled_file_locking = false;
try {
// false values (usually not the default)
H5.H5Pset_file_locking(fapl_id, false, false);
use_file_locking = H5.H5Pget_use_file_locking(fapl_id);
ignore_disabled_file_locking = H5.H5Pget_ignore_disabled_file_locking(fapl_id);
assertFalse("H5P_file_locking", use_file_locking);
assertFalse("H5P_file_locking", ignore_disabled_file_locking);
// true values (typically the default)
H5.H5Pset_file_locking(fapl_id, true, true);
use_file_locking = H5.H5Pget_use_file_locking(fapl_id);
ignore_disabled_file_locking = H5.H5Pget_ignore_disabled_file_locking(fapl_id);
assertTrue("H5P_file_locking", use_file_locking);
assertTrue("H5P_file_locking", ignore_disabled_file_locking);
}
catch (HDF5PropertyListInterfaceException err) {
// parallel is not supported
if (err.getMinorErrorNumber() != HDF5Constants.H5E_UNSUPPORTED) {
err.printStackTrace();
fail("H5P_test_file_locking: " + err);
}
}
catch (Throwable err) {
err.printStackTrace();
fail("H5P_test_file_locking: " + err);
}
}
}

@ -28,6 +28,7 @@ JUnit version 4.11
.testH5Pset_elink_fapl
.testH5P_hyper_vector_size
.testH5P_gc_references
.testH5P_file_locking
.testH5P_family_offset
.testH5P_fapl_core
.testH5P_fapl_muti
@ -37,5 +38,5 @@ JUnit version 4.11
Time: XXXX
OK (35 tests)
OK (36 tests)

@ -330,9 +330,92 @@ New Features
(ADB - 2018/07/16)
- Add file locking configure and CMake options
HDF5 1.10.0 introduced a file locking scheme, primarily to help
enforce SWMR setup. Formerly, the only user-level control of the scheme
was via the HDF5_USE_FILE_LOCKING environment variable.
This change introduces configure-time options that control whether
or not file locking will be used and whether or not the library
ignores errors when locking has been disabled on the file system
(useful on some HPC Lustre installations).
In both the Autotools and CMake, the settings have the effect of changing
the default property list settings (see the H5Pset/get_file_locking()
entry, below).
The yes/no/best-effort file locking configure setting has also been
added to the libhdf5.settings file.
Autotools:
An --enable-file-locking=(yes|no|best-effort) option has been added.
yes: Use file locking.
no: Do not use file locking.
best-effort: Use file locking and ignore "disabled" errors.
CMake:
Two self-explanatory options have been added:
HDF5_USE_FILE_LOCKING
HDF5_IGNORE_DISABLED_FILE_LOCKS
Setting both of these to ON is the equivalent to the Autotools'
best-effort setting.
NOTE:
The precedence order of the various file locking control mechanisms is:
1) HDF5_USE_FILE_LOCKING environment variable (highest)
2) H5Pset_file_locking()
3) configure/CMake options (which set the property list defaults)
4) library defaults (currently best-effort)
(DER - 2020/07/30, HDFFV-11092)
Library:
--------
- Remove HDFS VFD stubs
The original implementation of the HDFS VFD included non-functional
versions of the following public API calls when the HDFS VFD is
not built as a part of the HDF5 library:
* H5FD_hdfs_init()
* H5Pget_fapl_hdfs()
* H5Pset_fapl_hdfs()
They will remain present in HDF5 1.10 and HDF5 1.12 releases
for binary compatibility purposes but have been removed as of 1.14.0.
Note that this has nothing to do with the real HDFS VFD API calls
that are fully functional when the HDFS VFD is configured and built.
We simply changed:
#ifdef LIBHDFS
<real API call>
#else
<useless stub>
#endif
to:
#ifdef LIBHDFS
<real API call>
#endif
Which is how the other optional VFDs are handled.
(DER - 2020/08/27)
- Add Mirror VFD
Use TCP/IP sockets to perform write-only (W/O) file I/O on a remote
@ -507,6 +590,32 @@ New Features
(DER - 2020/03/18, HDFFV-11057)
- Add BEST_EFFORT value to HDF5_USE_FILE_LOCKING environment variable
This change adds a BEST_EFFORT to the TRUE/FALSE, 1/0 settings that
were previously accepted. This option turns on file locking but
ignores locking errors when the library detects that file locking
has been disabled on a file system (useful on some HPC Lustre
installations).
The capitalization of BEST_EFFORT is mandatory.
See the configure option discussion for HDFFV-11092 (above) for more
information on the file locking feature and how it's controlled.
(DER - 2020/07/30, HDFFV-11092)
- Add H5Pset/get_file_locking() API calls
This change adds new API calls which can be used to set or get the
file locking parameters. The single API call sets both the "use file
locking" flag and the "ignore disabled file locking" flag.
See the configure option discussion for HDFFV-11092 (above) for more
information on the file locking feature and how it's controlled.
(DER - 2020/07/30, HDFFV-11092)
Parallel Library:
-----------------
@ -537,11 +646,21 @@ New Features
(MSB, 2019/01/08, HDFFV-10443)
- Add wrappers for H5Pset/get_file_locking() API calls
h5pget_file_locking_f()
h5pset_file_locking_f()
See the configure option discussion for HDFFV-11092 (above) for more
information on the file locking feature and how it's controlled.
(DER - 2020/07/30, HDFFV-11092)
C++ Library:
------------
- Added new wrappers for H5Pset/get_create_intermediate_group()
LinkCreatPropList::setCreateIntermediateGroup()
LinkCreatPropList::getCreateIntermediateGroup()
LinkCreatPropList::setCreateIntermediateGroup()
(BMR - 2019/04/22, HDFFV-10622)
@ -550,6 +669,16 @@ New Features
(BMR - 2019/02/14, HDFFV-10532)
- Add wrappers for H5Pset/get_file_locking() API calls
FileAccPropList::setFileLocking()
FileAccPropList::getFileLocking()
See the configure option discussion for HDFFV-11092 (above) for more
information on the file locking feature and how it's controlled.
(DER - 2020/07/30, HDFFV-11092)
Java Library:
----------------
@ -587,9 +716,34 @@ New Features
(DER - 2018/12/08, HDFFV-10252)
- Add wrappers for H5Pset/get_file_locking() API calls
H5Pset_file_locking()
H5Pget_use_file_locking()
H5Pget_ignore_disabled_file_locking()
Unlike the C++ and Fortran wrappers, there are separate getters for the
two file locking settings, each of which returns a boolean value.
See the configure option discussion for HDFFV-11092 (above) for more
information on the file locking feature and how it's controlled.
(DER - 2020/07/30, HDFFV-11092)
Tools:
------
- h5repack added options to control how external links are handled.
Currently h5repack preserves external links and cannot copy and merge
data from the external files. Two options, merge and prune, were added to
control how to merge data from an external link into the resulting file.
--merge Follow external soft link recursively and merge data.
--prune Do not follow external soft links and remove link.
--merge --prune Follow external link, merge data and remove dangling link.
(ADB - 2020/08/05, HDFFV-9984)
- h5repack was fixed to repack the reference attributes properly.
The code line that checks if the update of reference inside a compound
datatype is misplaced outside the code block loop that carries out the
@ -633,7 +787,7 @@ New Features
High-Level APIs:
---------------
-
-
C Packet Table API
------------------
@ -656,6 +810,25 @@ Bug Fixes since HDF5-1.10.3 release
Library
-------
- Creation of dataset with optional filter
When the combination of type, space, etc doesn't work for filter
and the filter is optional, it was supposed to be skipped but it was
not skipped and the creation failed.
Allowed the creation of the dataset in such situation.
(BMR - 2020/8/13, HDFFV-10933)
- Explicitly declared dlopen to use RTLD_LOCAL
dlopen documentation states that if neither RTLD_GLOBAL nor
RTLD_LOCAL are specified, then the default behavior is unspecified.
The default on linux is usually RTLD_LOCAL while macos will default
to RTLD_GLOBAL.
(ADB - 2020/08/12, HDFFV-11127)
- Fixed issues CVE-2018-13870 and CVE-2018-13869
When a buffer overflow occurred because a name length was corrupted
@ -665,7 +838,7 @@ Bug Fixes since HDF5-1.10.3 release
locations to prevent the crashes and h5dump now simply fails with an
error message when this error condition occurs.
(BMR - 2020/7/22, HDFFV-11120 and HDFFV-11121)
(BMR - 2020/07/22, HDFFV-11120 and HDFFV-11121)
- Fixed the segmentation fault when reading attributes with multiple threads
@ -1094,7 +1267,11 @@ Bug Fixes since HDF5-1.10.3 release
High-Level APIs:
------
-
- The H5DSis_scale function was updated to return "not a dimension scale" (0)
instead of failing (-1), when CLASS or DIMENSION_SCALE attributes are
not written according to Dimension Scales Specification.
(EIP - 2020/08/12, HDFFV-10436)
Fortran High-Level APIs:
------

@ -839,6 +839,7 @@ set (H5_PRIVATE_HEADERS
${HDF5_SRC_DIR}/H5FApkg.h
${HDF5_SRC_DIR}/H5FAprivate.h
${HDF5_SRC_DIR}/H5FDmirror_priv.h
${HDF5_SRC_DIR}/H5FDpkg.h
${HDF5_SRC_DIR}/H5FDprivate.h

@ -50,9 +50,9 @@
/********************/
/* Local Prototypes */
/********************/
static void H5_debug_mask(const char*);
static void H5__debug_mask(const char*);
#ifdef H5_HAVE_PARALLEL
static int H5_mpi_delete_cb(MPI_Comm comm, int keyval, void *attr_val, int *flag);
static int H5__mpi_delete_cb(MPI_Comm comm, int keyval, void *attr_val, int *flag);
#endif /*H5_HAVE_PARALLEL*/
/*********************/
@ -139,7 +139,7 @@ H5_init_library(void)
int key_val;
if(MPI_SUCCESS != (mpi_code = MPI_Comm_create_keyval(MPI_COMM_NULL_COPY_FN,
(MPI_Comm_delete_attr_function *)H5_mpi_delete_cb,
(MPI_Comm_delete_attr_function *)H5__mpi_delete_cb,
&key_val, NULL)))
HMPI_GOTO_ERROR(FAIL, "MPI_Comm_create_keyval failed", mpi_code)
@ -219,10 +219,6 @@ H5_init_library(void)
HGOTO_ERROR(H5E_FUNC, H5E_CANTINIT, FAIL, "unable to initialize vol interface")
if(H5P_init() < 0)
HGOTO_ERROR(H5E_FUNC, H5E_CANTINIT, FAIL, "unable to initialize property list interface")
if(H5T_init() < 0)
HGOTO_ERROR(H5E_FUNC, H5E_CANTINIT, FAIL, "unable to initialize datatype interface")
if(H5D_init() < 0)
HGOTO_ERROR(H5E_FUNC, H5E_CANTINIT, FAIL, "unable to initialize dataset interface")
if(H5AC_init() < 0)
HGOTO_ERROR(H5E_FUNC, H5E_CANTINIT, FAIL, "unable to initialize metadata caching interface")
if(H5L_init() < 0)
@ -235,8 +231,8 @@ H5_init_library(void)
HGOTO_ERROR(H5E_FUNC, H5E_CANTINIT, FAIL, "unable to initialize vol interface")
/* Debugging? */
H5_debug_mask("-all");
H5_debug_mask(HDgetenv("HDF5_DEBUG"));
H5__debug_mask("-all");
H5__debug_mask(HDgetenv("HDF5_DEBUG"));
done:
FUNC_LEAVE_NOAPI(ret_value)
@ -639,7 +635,7 @@ done:
/*-------------------------------------------------------------------------
* Function: H5_debug_mask
* Function: H5__debug_mask
*
* Purpose: Set runtime debugging flags according to the string S. The
* string should contain file numbers and package names
@ -662,7 +658,7 @@ done:
*-------------------------------------------------------------------------
*/
static void
H5_debug_mask(const char *s)
H5__debug_mask(const char *s)
{
FILE *stream = stderr;
char pkg_name[32], *rest;
@ -738,12 +734,12 @@ H5_debug_mask(const char *s)
return;
} /* end H5_debug_mask() */
} /* end H5__debug_mask() */
#ifdef H5_HAVE_PARALLEL
/*-------------------------------------------------------------------------
* Function: H5_mpi_delete_cb
* Function: H5__mpi_delete_cb
*
* Purpose: Callback attribute on MPI_COMM_SELF to terminate the HDF5
* library when the communicator is destroyed, i.e. on MPI_Finalize.
@ -752,7 +748,7 @@ H5_debug_mask(const char *s)
*
*-------------------------------------------------------------------------
*/
static int H5_mpi_delete_cb(MPI_Comm H5_ATTR_UNUSED comm, int H5_ATTR_UNUSED keyval, void H5_ATTR_UNUSED *attr_val, int H5_ATTR_UNUSED *flag)
static int H5__mpi_delete_cb(MPI_Comm H5_ATTR_UNUSED comm, int H5_ATTR_UNUSED keyval, void H5_ATTR_UNUSED *attr_val, int H5_ATTR_UNUSED *flag)
{
H5_term_library();
return MPI_SUCCESS;

@ -313,7 +313,7 @@ H5Acreate2(hid_t loc_id, const char *attr_name, hid_t type_id, hid_t space_id,
/* 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 */
@ -403,7 +403,7 @@ H5Acreate_by_name(hid_t loc_id, const char *obj_name, const char *attr_name,
/* 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 */
@ -471,7 +471,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 */
@ -1028,7 +1028,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)
@ -1170,7 +1170,8 @@ done:
*
* Purpose: Rename an attribute
*
* Return: SUCCEED/FAIL
* Return: Success: Non-negative
* Failure: Negative
*
* Programmer: Raymond Lu
* October 23, 2002
@ -1185,7 +1186,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)
@ -1205,7 +1206,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")
@ -1228,7 +1228,8 @@ done:
*
* Purpose: Rename an attribute
*
* Return: SUCCEED/FAIL
* Return: Success: Non-negative
* Failure: Negative
*
* Programmer: Quincey Koziol
* February 20, 2007
@ -1330,7 +1331,7 @@ H5Aiterate2(hid_t loc_id, H5_index_t idx_type, H5_iter_order_t order,
{
H5VL_object_t *vol_obj = NULL; /* object of loc_id */
H5VL_loc_params_t loc_params;
herr_t ret_value; /* Return value */
herr_t ret_value; /* Return value */
FUNC_ENTER_API(FAIL)
H5TRACE6("e", "iIiIo*hx*x", loc_id, idx_type, order, idx, op, op_data);
@ -1407,15 +1408,15 @@ 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 */
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)
@ -1466,7 +1467,7 @@ H5Adelete(hid_t loc_id, const char *name)
{
H5VL_object_t *vol_obj = NULL;
H5VL_loc_params_t loc_params;
herr_t ret_value = SUCCEED; /* Return value */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API(FAIL)
H5TRACE2("e", "i*s", loc_id, name);
@ -1522,7 +1523,7 @@ H5Adelete_by_name(hid_t loc_id, const char *obj_name, const char *attr_name,
{
H5VL_object_t *vol_obj;
H5VL_loc_params_t loc_params;
herr_t ret_value = SUCCEED; /* Return value */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API(FAIL)
H5TRACE4("e", "i*s*si", loc_id, obj_name, attr_name, lapl_id);
@ -1588,7 +1589,7 @@ H5Adelete_by_idx(hid_t loc_id, const char *obj_name, H5_index_t idx_type,
{
H5VL_object_t *vol_obj;
H5VL_loc_params_t loc_params;
herr_t ret_value = SUCCEED; /* Return value */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API(FAIL)
H5TRACE6("e", "i*sIiIohi", loc_id, obj_name, idx_type, order, n, lapl_id);
@ -1619,7 +1620,7 @@ H5Adelete_by_idx(hid_t loc_id, const char *obj_name, H5_index_t idx_type,
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")
@ -1679,7 +1680,7 @@ H5Aexists(hid_t obj_id, const char *attr_name)
{
H5VL_object_t *vol_obj;
H5VL_loc_params_t loc_params;
htri_t ret_value; /* Return value */
htri_t ret_value; /* Return value */
FUNC_ENTER_API(FAIL)
H5TRACE2("t", "i*s", obj_id, attr_name);
@ -1725,7 +1726,7 @@ H5Aexists_by_name(hid_t loc_id, const char *obj_name, const char *attr_name,
{
H5VL_object_t *vol_obj;
H5VL_loc_params_t loc_params;
htri_t ret_value; /* Return value */
htri_t ret_value; /* Return value */
FUNC_ENTER_API(FAIL)
H5TRACE4("t", "i*s*si", loc_id, obj_name, attr_name, lapl_id);

@ -15,7 +15,7 @@
*
* Created: H5AC.c
* Jul 9 1997
* Robb Matzke <matzke@llnl.gov>
* Robb Matzke
*
* Purpose: Functions in this file implement a cache for
* things which exist on disk. All "things" associated
@ -138,10 +138,10 @@ static const H5AC_class_t *const H5AC_class_s[] = {
/*-------------------------------------------------------------------------
* Function: H5AC_init
*
* Purpose: Initialize the interface from some other layer.
* 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
@ -162,7 +162,7 @@ done:
/*-------------------------------------------------------------------------
* Function H5AC__init_package
* Function: H5AC__init_package
*
* Purpose: Initialize interface-specific information
*
@ -202,9 +202,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
@ -239,8 +239,6 @@ H5AC_term_package(void)
*
* Programmer: John Mainzer, 1/10/17
*
* Changes: None.
*
*-------------------------------------------------------------------------
*/
hbool_t
@ -275,7 +273,6 @@ H5AC_cache_image_pending(const H5F_t *f)
* Failure: Negative
*
* Programmer: Robb Matzke
* matzke@llnl.gov
* Jul 9 1997
*
*-------------------------------------------------------------------------
@ -284,7 +281,7 @@ herr_t
H5AC_create(const H5F_t *f, H5AC_cache_config_t *config_ptr, H5AC_cache_image_config_t * image_config_ptr)
{
#ifdef H5_HAVE_PARALLEL
char prefix[H5C__PREFIX_LEN] = "";
char prefix[H5C__PREFIX_LEN] = "";
H5AC_aux_t * aux_ptr = NULL;
#endif /* H5_HAVE_PARALLEL */
struct H5C_cache_image_ctl_t int_ci_config = H5C__DEFAULT_CACHE_IMAGE_CTL;
@ -469,9 +466,16 @@ done:
* Return: Non-negative on success/Negative on failure
*
* Programmer: Robb Matzke
* matzke@llnl.gov
* Jul 9 1997
*
* Changes:
*
* In the parallel case, added code to setup the MDC slist
* before the call to H5AC__flush_entries() and take it down
* afterwards.
*
* JRM -- 7/29/20
*
*-------------------------------------------------------------------------
*/
herr_t
@ -497,58 +501,115 @@ H5AC_dest(H5F_t *f)
#endif /* H5AC_DUMP_STATS_ON_CLOSE */
/* Check if log messages are being emitted */
if(H5C_get_logging_status(f->shared->cache, &log_enabled, &curr_logging) < 0)
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(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")
HDONE_ERROR(H5E_CACHE, H5E_LOGGING, FAIL, \
"unable to emit log message")
}
/* Tear down logging */
if(log_enabled)
if(log_enabled) {
if(H5C_log_tear_down(f->shared->cache) < 0)
HGOTO_ERROR(H5E_CACHE, H5E_LOGGING, FAIL, "mdc logging tear-down failed")
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")
HGOTO_ERROR(H5E_CACHE, H5E_CANTGET, FAIL, \
"H5C_clear_coll_entries() failed")
aux_ptr = (H5AC_aux_t *)H5C_get_aux_ptr(f->shared->cache);
if(aux_ptr)
if(aux_ptr) {
/* Sanity check */
HDassert(aux_ptr->magic == H5AC__H5AC_AUX_T_MAGIC);
/* If the file was opened R/W, attempt to flush all entries
* from rank 0 & Bcast clean list to other ranks.
*
* Must not flush in the R/O case, as this will trigger the
* free space manager settle routines.
*/
if(H5F_ACC_RDWR & H5F_INTENT(f))
if(H5AC__flush_entries(f) < 0)
HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "Can't flush")
/* If the file was opened R/W, attempt to flush all entries
* from rank 0 & Bcast clean list to other ranks.
*
* Must not flush in the R/O case, as this will trigger the
* free space manager settle routines.
*
* Must also enable the skip list before the call to
* H5AC__flush_entries() and disable it afterwards, as the
* skip list will be disabled after the previous flush.
*
* Note that H5C_dest() does slist setup and take down as well.
* Unfortunately, we can't do the setup and take down just once,
* as H5C_dest() is called directly in the test code.
*
* Fortunately, the cache should be clean or close to it at this
* point, so the overhead should be minimal.
*/
if(H5F_ACC_RDWR & H5F_INTENT(f)) {
/* enable and load the slist */
if ( H5C_set_slist_enabled(f->shared->cache, TRUE, FALSE) < 0 )
HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
"set slist enabled failed")
if(H5AC__flush_entries(f) < 0)
HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "Can't flush")
/* disable the slist -- should be empty */
if ( H5C_set_slist_enabled(f->shared->cache, FALSE, FALSE) < 0 )
HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "disable slist failed")
}
}
#endif /* H5_HAVE_PARALLEL */
/* 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 */
@ -587,7 +648,6 @@ H5AC_evict(H5F_t *f)
HGOTO_ERROR(H5E_CACHE, H5E_CANTFREE, FAIL, "can't evict cache")
done:
/* If currently logging, generate a message */
if(f->shared->cache->log_info->logging)
if(H5C_log_write_evict_cache_msg(f->shared->cache, ret_value) < 0)
@ -655,7 +715,6 @@ done:
* request to flush all items and something was protected.
*
* Programmer: Robb Matzke
* matzke@llnl.gov
* Jul 9 1997
*
*-------------------------------------------------------------------------
@ -742,20 +801,20 @@ H5AC_get_entry_status(const H5F_t *f, haddr_t addr, unsigned *status)
if(in_cache) {
*status |= H5AC_ES__IN_CACHE;
if(is_dirty)
*status |= H5AC_ES__IS_DIRTY;
if(is_protected)
*status |= H5AC_ES__IS_PROTECTED;
if(is_pinned)
*status |= H5AC_ES__IS_PINNED;
if(is_corked)
*status |= H5AC_ES__IS_CORKED;
if(is_flush_dep_parent)
*status |= H5AC_ES__IS_FLUSH_DEP_PARENT;
if(is_flush_dep_child)
*status |= H5AC_ES__IS_FLUSH_DEP_CHILD;
if(image_is_up_to_date)
*status |= H5AC_ES__IMAGE_IS_UP_TO_DATE;
if(is_dirty)
*status |= H5AC_ES__IS_DIRTY;
if(is_protected)
*status |= H5AC_ES__IS_PROTECTED;
if(is_pinned)
*status |= H5AC_ES__IS_PINNED;
if(is_corked)
*status |= H5AC_ES__IS_CORKED;
if(is_flush_dep_parent)
*status |= H5AC_ES__IS_FLUSH_DEP_PARENT;
if(is_flush_dep_child)
*status |= H5AC_ES__IS_FLUSH_DEP_CHILD;
if(image_is_up_to_date)
*status |= H5AC_ES__IMAGE_IS_UP_TO_DATE;
} /* end if */
else
*status = 0;
@ -775,7 +834,6 @@ done:
* Return: Non-negative on success/Negative on failure
*
* Programmer: Robb Matzke
* matzke@llnl.gov
* Jul 9 1997
*
*-------------------------------------------------------------------------
@ -918,9 +976,10 @@ H5AC_mark_entry_dirty(void *thing)
done:
/* If currently logging, generate a message */
if(cache_ptr->log_info->logging)
if(H5C_log_write_mark_entry_dirty_msg(cache_ptr, entry_ptr, ret_value) < 0)
HDONE_ERROR(H5E_CACHE, H5E_LOGGING, FAIL, "unable to emit log message")
if(cache_ptr != NULL && cache_ptr->log_info != NULL)
if(cache_ptr->log_info->logging)
if(H5C_log_write_mark_entry_dirty_msg(cache_ptr, entry_ptr, ret_value) < 0)
HDONE_ERROR(H5E_CACHE, H5E_LOGGING, FAIL, "unable to emit log message")
FUNC_LEAVE_NOAPI(ret_value)
} /* H5AC_mark_entry_dirty() */
@ -971,9 +1030,10 @@ H5AC_mark_entry_clean(void *thing)
done:
/* If currently logging, generate a message */
if(cache_ptr->log_info->logging)
if(H5C_log_write_mark_entry_clean_msg(cache_ptr, entry_ptr, ret_value) < 0)
HDONE_ERROR(H5E_CACHE, H5E_LOGGING, FAIL, "unable to emit log message")
if(cache_ptr != NULL && cache_ptr->log_info != NULL)
if(cache_ptr->log_info->logging)
if(H5C_log_write_mark_entry_clean_msg(cache_ptr, entry_ptr, ret_value) < 0)
HDONE_ERROR(H5E_CACHE, H5E_LOGGING, FAIL, "unable to emit log message")
FUNC_LEAVE_NOAPI(ret_value)
} /* H5AC_mark_entry_clean() */
@ -1013,9 +1073,10 @@ H5AC_mark_entry_unserialized(void *thing)
done:
/* If currently logging, generate a message */
if(cache_ptr->log_info->logging)
if(H5C_log_write_mark_unserialized_entry_msg(cache_ptr, entry_ptr, ret_value) < 0)
HDONE_ERROR(H5E_CACHE, H5E_LOGGING, FAIL, "unable to emit log message")
if(cache_ptr != NULL && cache_ptr->log_info != NULL)
if(cache_ptr->log_info->logging)
if(H5C_log_write_mark_unserialized_entry_msg(cache_ptr, entry_ptr, ret_value) < 0)
HDONE_ERROR(H5E_CACHE, H5E_LOGGING, FAIL, "unable to emit log message")
FUNC_LEAVE_NOAPI(ret_value)
} /* H5AC_mark_entry_unserialized() */
@ -1054,9 +1115,10 @@ H5AC_mark_entry_serialized(void *thing)
done:
/* If currently logging, generate a message */
if(cache_ptr->log_info->logging)
if(H5C_log_write_mark_serialized_entry_msg(cache_ptr, entry_ptr, ret_value) < 0)
HDONE_ERROR(H5E_CACHE, H5E_LOGGING, FAIL, "unable to emit log message")
if(cache_ptr != NULL && cache_ptr->log_info != NULL)
if(cache_ptr->log_info->logging)
if(H5C_log_write_mark_serialized_entry_msg(cache_ptr, entry_ptr, ret_value) < 0)
HDONE_ERROR(H5E_CACHE, H5E_LOGGING, FAIL, "unable to emit log message")
FUNC_LEAVE_NOAPI(ret_value)
} /* H5AC_mark_entry_serialized() */
@ -1071,7 +1133,6 @@ done:
* Return: Non-negative on success/Negative on failure
*
* Programmer: Robb Matzke
* matzke@llnl.gov
* Jul 9 1997
*
*-------------------------------------------------------------------------
@ -1156,9 +1217,10 @@ H5AC_pin_protected_entry(void *thing)
done:
/* If currently logging, generate a message */
if(cache_ptr->log_info->logging)
if(H5C_log_write_pin_entry_msg(cache_ptr, entry_ptr, ret_value) < 0)
HDONE_ERROR(H5E_CACHE, H5E_LOGGING, FAIL, "unable to emit log message")
if(cache_ptr != NULL && cache_ptr->log_info != NULL)
if(cache_ptr->log_info->logging)
if(H5C_log_write_pin_entry_msg(cache_ptr, entry_ptr, ret_value) < 0)
HDONE_ERROR(H5E_CACHE, H5E_LOGGING, FAIL, "unable to emit log message")
FUNC_LEAVE_NOAPI(ret_value)
} /* H5AC_pin_protected_entry() */
@ -1203,6 +1265,109 @@ done:
/*-------------------------------------------------------------------------
*
* Function: H5AC_prep_for_file_flush
*
* Purpose: This function should be called just prior to the first
* call to H5AC_flush() during a file flush.
*
* Its purpose is to handly any setup required prior to
* metadata cache flush.
*
* Initially, this means setting up the slist prior to the
* flush. We do this in a seperate call because
* H5F__flush_phase2() make repeated calls to H5AC_flush().
* Handling this detail in separate calls allows us to avoid
* the overhead of setting up and taking down the skip list
* repeatedly.
*
* Return: Non-negative on success/Negative on failure
*
* Programmer: John Mainzer
* 5/5/20
*
* Changes: None.
*
*-------------------------------------------------------------------------
*/
herr_t
H5AC_prep_for_file_flush(H5F_t *f)
{
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_NOAPI(FAIL)
/* Sanity checks */
HDassert(f);
HDassert(f->shared);
HDassert(f->shared->cache);
if ( H5C_set_slist_enabled(f->shared->cache, TRUE, FALSE) < 0)
HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "slist enabled failed")
done:
FUNC_LEAVE_NOAPI(ret_value)
} /* H5AC_prep_for_file_flush() */
/*-------------------------------------------------------------------------
*
* Function: H5AC_secure_from_file_flush
*
* Purpose: This function should be called just after the last
* call to H5AC_flush() during a file flush.
*
* Its purpose is to perform any necessary cleanup after the
* metadata cache flush.
*
* The objective of the call is to allow the metadata cache
* to do any necessary necessary cleanup work after a cache
* flush.
*
* Initially, this means taking down the slist after the
* flush. We do this in a seperate call because
* H5F__flush_phase2() make repeated calls to H5AC_flush().
* Handling this detail in separate calls allows us to avoid
* the overhead of setting up and taking down the skip list
* repeatedly.
*
* Return: Non-negative on success/Negative on failure
*
* Programmer: John Mainzer
* 5/5/20
*
* Changes: None.
*
*-------------------------------------------------------------------------
*/
herr_t
H5AC_secure_from_file_flush(H5F_t *f)
{
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_NOAPI(FAIL)
/* Sanity checks */
HDassert(f);
HDassert(f->shared);
HDassert(f->shared->cache);
if ( H5C_set_slist_enabled(f->shared->cache, FALSE, FALSE) < 0)
HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "slist enabled failed")
done:
FUNC_LEAVE_NOAPI(ret_value)
} /* H5AC_secure_from_file_flush() */
/*-------------------------------------------------------------------------
*
* Function: H5AC_create_flush_dependency()
*
* Purpose: Create a flush dependency between two entries in the metadata
@ -1238,9 +1403,10 @@ H5AC_create_flush_dependency(void * parent_thing, void * child_thing)
done:
/* If currently logging, generate a message */
if(cache_ptr->log_info->logging)
if(H5C_log_write_create_fd_msg(cache_ptr, (H5AC_info_t *)parent_thing, (H5AC_info_t *)child_thing, ret_value) < 0)
HDONE_ERROR(H5E_CACHE, H5E_LOGGING, FAIL, "unable to emit log message")
if(cache_ptr != NULL && cache_ptr->log_info != NULL)
if(cache_ptr->log_info->logging)
if(H5C_log_write_create_fd_msg(cache_ptr, (H5AC_info_t *)parent_thing, (H5AC_info_t *)child_thing, ret_value) < 0)
HDONE_ERROR(H5E_CACHE, H5E_LOGGING, FAIL, "unable to emit log message")
FUNC_LEAVE_NOAPI(ret_value)
} /* H5AC_create_flush_dependency() */
@ -1265,7 +1431,6 @@ done:
* Failure: NULL
*
* Programmer: Robb Matzke
* matzke@llnl.gov
* Sep 2 1997
*
*-------------------------------------------------------------------------
@ -1373,9 +1538,10 @@ H5AC_resize_entry(void *thing, size_t new_size)
done:
/* If currently logging, generate a message */
if(cache_ptr->log_info->logging)
if(H5C_log_write_resize_entry_msg(cache_ptr, entry_ptr, new_size, ret_value) < 0)
HDONE_ERROR(H5E_CACHE, H5E_LOGGING, FAIL, "unable to emit log message")
if(cache_ptr != NULL && cache_ptr->log_info != NULL)
if(cache_ptr->log_info->logging)
if(H5C_log_write_resize_entry_msg(cache_ptr, entry_ptr, new_size, ret_value) < 0)
HDONE_ERROR(H5E_CACHE, H5E_LOGGING, FAIL, "unable to emit log message")
FUNC_LEAVE_NOAPI(ret_value)
} /* H5AC_resize_entry() */
@ -1416,9 +1582,10 @@ H5AC_unpin_entry(void *thing)
done:
/* If currently logging, generate a message */
if(cache_ptr->log_info->logging)
if(H5C_log_write_unpin_entry_msg(cache_ptr, entry_ptr, ret_value) < 0)
HDONE_ERROR(H5E_CACHE, H5E_LOGGING, FAIL, "unable to emit log message")
if(cache_ptr != NULL && cache_ptr->log_info != NULL)
if(cache_ptr->log_info->logging)
if(H5C_log_write_unpin_entry_msg(cache_ptr, entry_ptr, ret_value) < 0)
HDONE_ERROR(H5E_CACHE, H5E_LOGGING, FAIL, "unable to emit log message")
FUNC_LEAVE_NOAPI(ret_value)
} /* H5AC_unpin_entry() */
@ -1459,9 +1626,10 @@ H5AC_destroy_flush_dependency(void * parent_thing, void * child_thing)
done:
/* If currently logging, generate a message */
if(cache_ptr->log_info->logging)
if(H5C_log_write_destroy_fd_msg(cache_ptr, (H5AC_info_t *)parent_thing, (H5AC_info_t *)child_thing, ret_value) < 0)
HDONE_ERROR(H5E_CACHE, H5E_LOGGING, FAIL, "unable to emit log message")
if(cache_ptr != NULL && cache_ptr->log_info != NULL)
if(cache_ptr->log_info->logging)
if(H5C_log_write_destroy_fd_msg(cache_ptr, (H5AC_info_t *)parent_thing, (H5AC_info_t *)child_thing, ret_value) < 0)
HDONE_ERROR(H5E_CACHE, H5E_LOGGING, FAIL, "unable to emit log message")
FUNC_LEAVE_NOAPI(ret_value)
} /* H5AC_destroy_flush_dependency() */
@ -1500,7 +1668,6 @@ done:
* Return: Non-negative on success/Negative on failure
*
* Programmer: Robb Matzke
* matzke@llnl.gov
* Sep 2 1997
*
*-------------------------------------------------------------------------
@ -1509,8 +1676,8 @@ herr_t
H5AC_unprotect(H5F_t *f, const H5AC_class_t *type, haddr_t addr, void *thing,
unsigned flags)
{
hbool_t dirtied;
hbool_t deleted;
hbool_t dirtied;
hbool_t deleted;
#ifdef H5_HAVE_PARALLEL
H5AC_aux_t * aux_ptr = NULL;
#endif /* H5_HAVE_PARALLEL */
@ -1527,18 +1694,18 @@ H5AC_unprotect(H5F_t *f, const H5AC_class_t *type, haddr_t addr, void *thing,
HDassert(type->image_len);
HDassert(H5F_addr_defined(addr));
HDassert(thing);
HDassert( ((H5AC_info_t *)thing)->addr == addr );
HDassert( ((H5AC_info_t *)thing)->type == type );
HDassert(((H5AC_info_t *)thing)->addr == addr);
HDassert(((H5AC_info_t *)thing)->type == type);
dirtied = (hbool_t)(((flags & H5AC__DIRTIED_FLAG) == H5AC__DIRTIED_FLAG) ||
(((H5AC_info_t *)thing)->dirtied));
(((H5AC_info_t *)thing)->dirtied));
deleted = (hbool_t)((flags & H5C__DELETED_FLAG) == H5C__DELETED_FLAG);
/* Check if the size changed out from underneath us, if we're not deleting
* the entry.
*/
if(dirtied && !deleted) {
size_t curr_size = 0;
size_t curr_size = 0;
if((type->image_len)(thing, &curr_size) < 0)
HGOTO_ERROR(H5E_CACHE, H5E_CANTGETSIZE, FAIL, "Can't get size of thing")
@ -1625,7 +1792,7 @@ H5AC_get_cache_auto_resize_config(const H5AC_t *cache_ptr,
if(internal_config.rpt_fcn == NULL)
config_ptr->rpt_fcn_enabled = FALSE;
else
config_ptr->rpt_fcn_enabled = TRUE;
config_ptr->rpt_fcn_enabled = TRUE;
config_ptr->open_trace_file = FALSE;
config_ptr->close_trace_file = FALSE;
config_ptr->trace_file_name[0] = '\0';
@ -1914,7 +2081,7 @@ H5AC_validate_config(H5AC_cache_config_t *config_ptr)
/* don't bother to test trace_file_name unless open_trace_file is TRUE */
if(config_ptr->open_trace_file) {
size_t name_len;
size_t name_len;
/* Can't really test the trace_file_name field without trying to
* open the file, so we will content ourselves with a couple of
@ -2035,9 +2202,9 @@ H5_ATTR_UNUSED
*f, hbool_t *write_permitted_ptr)
{
#ifdef H5_HAVE_PARALLEL
H5AC_aux_t * aux_ptr = NULL;
H5AC_aux_t * aux_ptr = NULL;
#endif /* H5_HAVE_PARALLEL */
hbool_t write_permitted = TRUE;
hbool_t write_permitted = TRUE;
FUNC_ENTER_STATIC_NOERR
@ -2534,8 +2701,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
@ -2637,9 +2804,10 @@ H5AC_remove_entry(void *_entry)
done:
/* If currently logging, generate a message */
if(cache->log_info->logging)
if(H5C_log_write_remove_entry_msg(cache, entry, ret_value) < 0)
HDONE_ERROR(H5E_CACHE, H5E_LOGGING, FAIL, "unable to emit log message")
if(cache != NULL && cache->log_info != NULL)
if(cache->log_info->logging)
if(H5C_log_write_remove_entry_msg(cache, entry, ret_value) < 0)
HDONE_ERROR(H5E_CACHE, H5E_LOGGING, FAIL, "unable to emit log message")
FUNC_LEAVE_NOAPI(ret_value)
} /* H5AC_remove_entry() */
@ -2669,4 +2837,3 @@ H5AC_get_mdc_image_info(H5AC_t *cache_ptr, haddr_t *image_addr, hsize_t *image_l
done:
FUNC_LEAVE_NOAPI(ret_value)
} /* H5AC_get_mdc_image_info() */

@ -270,10 +270,6 @@ H5AC_flush_dependency_exists(H5F_t *f, haddr_t parent_addr, haddr_t child_addr,
*
* Programmer: John Mainzer, 5/30/14
*
* Changes: None.
*
* JRM -- 9/17/16
*
*-------------------------------------------------------------------------
*/
#ifndef NDEBUG
@ -351,8 +347,6 @@ H5AC_get_serialization_in_progress(H5F_t *f)
*
* Programmer: John Mainzer, 6/18/16
*
* Changes: None.
*
*-------------------------------------------------------------------------
*/
#ifndef NDEBUG

@ -11,7 +11,7 @@
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/*
* Programmer: Quincey Koziol <koziol@hdfgroup.org>
* Programmer: Quincey Koziol
* Saturday, September 12, 2015
*
* Purpose: This file contains declarations which define macros for the

@ -15,7 +15,7 @@
*
* Created: H5ACmpio.c
* Jun 20 2015
* Quincey Koziol <koziol@hdfgroup.org>
* Quincey Koziol
*
* Purpose: Functions in this file implement support for parallel
* I/O cache functionality
@ -791,7 +791,7 @@ H5AC__log_dirtied_entry(const H5AC_info_t *entry_ptr)
else {
aux_ptr->dirty_bytes += entry_ptr->size;
#if H5AC_DEBUG_DIRTY_BYTES_CREATION
aux_ptr->unprotect_dirty_bytes += entry_size;
aux_ptr->unprotect_dirty_bytes += entry_ptr->size;
aux_ptr->unprotect_dirty_bytes_updates += 1;
#endif /* H5AC_DEBUG_DIRTY_BYTES_CREATION */
} /* end else */
@ -989,7 +989,7 @@ H5AC__log_inserted_entry(const H5AC_info_t *entry_ptr)
aux_ptr->dirty_bytes += entry_ptr->size;
#if H5AC_DEBUG_DIRTY_BYTES_CREATION
aux_ptr->insert_dirty_bytes += size;
aux_ptr->insert_dirty_bytes += entry_ptr->size;
aux_ptr->insert_dirty_bytes_updates += 1;
#endif /* H5AC_DEBUG_DIRTY_BYTES_CREATION */
@ -1875,6 +1875,8 @@ done:
* Programmer: John Mainzer
* April 28, 2010
*
* Changes: None.
*
*-------------------------------------------------------------------------
*/
static herr_t
@ -1894,7 +1896,8 @@ H5AC__rsp__p0_only__flush(H5F_t *f)
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(aux_ptr->metadata_write_strategy == H5AC_METADATA_WRITE_STRATEGY__PROCESS_0_ONLY);
HDassert(aux_ptr->metadata_write_strategy == \
H5AC_METADATA_WRITE_STRATEGY__PROCESS_0_ONLY);
/* To prevent "messages from the future" we must
* synchronize all processes before we start the flush.
@ -1903,9 +1906,12 @@ H5AC__rsp__p0_only__flush(H5F_t *f)
* However, when flushing from within the close operation from a file,
* it's possible to skip this barrier (on the second flush of the cache).
*/
if(!H5CX_get_mpi_file_flushing())
if(MPI_SUCCESS != (mpi_result = MPI_Barrier(aux_ptr->mpi_comm)))
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 */
if(aux_ptr->mpi_rank == 0) {
@ -1921,23 +1927,30 @@ H5AC__rsp__p0_only__flush(H5F_t *f)
aux_ptr->write_permitted = FALSE;
/* Check for error on the write operation */
if(result < 0)
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
* enforce POSIX semantics on the server that pretends to be a
* file system in our parallel tests.
*/
if(aux_ptr->write_done)
if ( aux_ptr->write_done ) {
(aux_ptr->write_done)();
}
} /* end if */
/* 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.")
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() */
@ -2104,16 +2117,22 @@ 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) ||
(sync_point_op == H5AC_METADATA_WRITE_STRATEGY__DISTRIBUTED));
(sync_point_op == H5AC_METADATA_WRITE_STRATEGY__DISTRIBUTED));
#if H5AC_DEBUG_DIRTY_BYTES_CREATION
HDfprintf(stdout, "%d:H5AC_propagate...:%u: (u/uu/i/iu/r/ru) = %zu/%u/%zu/%u/%zu/%u\n",
HDfprintf(stdout,
"%d:H5AC_propagate...:%u: (u/uu/i/iu/r/ru) = %zu/%u/%zu/%u/%zu/%u\n",
aux_ptr->mpi_rank,
aux_ptr->dirty_bytes_propagations,
aux_ptr->unprotect_dirty_bytes,
@ -2188,6 +2207,7 @@ HDfprintf(stdout, "%d:H5AC_propagate...:%u: (u/uu/i/iu/r/ru) = %zu/%u/%zu/%u/%zu
#endif /* H5AC_DEBUG_DIRTY_BYTES_CREATION */
done:
FUNC_LEAVE_NOAPI(ret_value)
} /* H5AC__run_sync_point() */
@ -2284,7 +2304,6 @@ H5AC__tidy_cache_0_lists(H5AC_t *cache_ptr, unsigned num_candidates,
* request to flush all items and something was protected.
*
* Programmer: Quincey Koziol
* koziol@hdfgroup.org
* Aug 22 2009
*
*-------------------------------------------------------------------------

@ -15,7 +15,7 @@
*
* Created: H5ACprivate.h
* Jul 9 1997
* Robb Matzke <matzke@llnl.gov>
* Robb Matzke
*
* Purpose: Constants and typedefs available to the rest of the
* library.
@ -387,6 +387,8 @@ H5_DLL herr_t H5AC_insert_entry(H5F_t *f, const H5AC_class_t *type,
haddr_t addr, void *thing, unsigned int flags);
H5_DLL herr_t H5AC_pin_protected_entry(void *thing);
H5_DLL herr_t H5AC_prep_for_file_close(H5F_t *f);
H5_DLL herr_t H5AC_prep_for_file_flush(H5F_t *f);
H5_DLL herr_t H5AC_secure_from_file_flush(H5F_t *f);
H5_DLL herr_t H5AC_create_flush_dependency(void *parent_thing, void *child_thing);
H5_DLL void * H5AC_protect(H5F_t *f, const H5AC_class_t *type, haddr_t addr,
void *udata, unsigned flags);

@ -15,12 +15,10 @@
*
* Created: H5ACpublic.h
* Jul 10 1997
* Robb Matzke <matzke@llnl.gov>
* Robb Matzke
*
* Purpose: Public include file for cache functions.
*
* Modifications:
*
*-------------------------------------------------------------------------
*/
#ifndef _H5ACpublic_H

@ -15,7 +15,7 @@
*
* Created: H5Abtree2.c
* Dec 4 2006
* Quincey Koziol <koziol@hdfgroup.org>
* Quincey Koziol
*
* Purpose: v2 B-tree callbacks for indexing attributes on objects
*
@ -152,7 +152,6 @@ const H5B2_class_t H5A_BT2_CORDER[1]={{ /* B-tree class information */
* Return: SUCCEED/FAIL
*
* Programmer: Quincey Koziol
* koziol@hdfgroup.org
* Dec 4 2006
*
*-------------------------------------------------------------------------

@ -15,7 +15,7 @@
*
* Created: H5Adense.c
* Dec 4 2006
* Quincey Koziol <koziol@hdfgroup.org>
* Quincey Koziol
*
* Purpose: Routines for operating on "dense" attribute storage
* for an object.
@ -171,7 +171,6 @@ typedef struct H5A_bt2_ud_rmbi_t {
* Return: SUCCEED/FAIL
*
* Programmer: Quincey Koziol
* koziol@hdfgroup.org
* Dec 4 2006
*
*-------------------------------------------------------------------------
@ -210,9 +209,6 @@ H5A__dense_create(H5F_t *f, H5O_ainfo_t *ainfo)
/* Retrieve the heap's address in the file */
if(H5HF_get_heap_addr(fheap, &ainfo->fheap_addr) < 0)
HGOTO_ERROR(H5E_ATTR, H5E_CANTGETSIZE, FAIL, "can't get fractal heap address")
#ifdef QAK
HDfprintf(stderr, "%s: ainfo->fheap_addr = %a\n", FUNC, ainfo->fheap_addr);
#endif /* QAK */
#ifndef NDEBUG
{
@ -222,9 +218,6 @@ HDfprintf(stderr, "%s: ainfo->fheap_addr = %a\n", FUNC, ainfo->fheap_addr);
if(H5HF_get_id_len(fheap, &fheap_id_len) < 0)
HGOTO_ERROR(H5E_ATTR, H5E_CANTGETSIZE, FAIL, "can't get fractal heap ID length")
HDassert(fheap_id_len == H5O_FHEAP_ID_LEN);
#ifdef QAK
HDfprintf(stderr, "%s: fheap_id_len = %Zu\n", FUNC, fheap_id_len);
#endif /* QAK */
}
#endif /* NDEBUG */
@ -244,9 +237,6 @@ HDfprintf(stderr, "%s: fheap_id_len = %Zu\n", FUNC, fheap_id_len);
/* Retrieve the v2 B-tree's address in the file */
if(H5B2_get_addr(bt2_name, &ainfo->name_bt2_addr) < 0)
HGOTO_ERROR(H5E_ATTR, H5E_CANTGET, FAIL, "can't get v2 B-tree address for name index")
#ifdef QAK
HDfprintf(stderr, "%s: ainfo->name_bt2_addr = %a\n", FUNC, ainfo->name_bt2_addr);
#endif /* QAK */
/* Check if we should create a creation order index v2 B-tree */
if(ainfo->index_corder) {
@ -265,9 +255,6 @@ HDfprintf(stderr, "%s: ainfo->name_bt2_addr = %a\n", FUNC, ainfo->name_bt2_addr)
/* Retrieve the v2 B-tree's address in the file */
if(H5B2_get_addr(bt2_corder, &ainfo->corder_bt2_addr) < 0)
HGOTO_ERROR(H5E_ATTR, H5E_CANTGET, FAIL, "can't get v2 B-tree address for creation order index")
#ifdef QAK
HDfprintf(stderr, "%s: ainfo->corder_bt2_addr = %a\n", FUNC, ainfo->corder_bt2_addr);
#endif /* QAK */
} /* end if */
done:
@ -290,9 +277,8 @@ done:
*
* Return: SUCCEED/FAIL
*
* Programmer: Quincey Koziol
* koziol@hdfgroup.org
* Dec 11 2006
* Programmer: Quincey Koziol
* Dec 11 2006
*
*-------------------------------------------------------------------------
*/
@ -351,9 +337,8 @@ done:
*
* Return: SUCCEED/FAIL
*
* Programmer: Quincey Koziol
* koziol@hdfgroup.org
* Dec 11 2006
* Programmer: Quincey Koziol
* Dec 11 2006
*
*-------------------------------------------------------------------------
*/
@ -440,9 +425,8 @@ done:
*
* Return: SUCCEED/FAIL
*
* Programmer: Quincey Koziol
* koziol@hdfgroup.org
* Dec 4 2006
* Programmer: Quincey Koziol
* Dec 4 2006
*
*-------------------------------------------------------------------------
*/
@ -598,7 +582,7 @@ done:
*
* Return: SUCCEED/FAIL
*
* Programmer: Quincey Koziol
* Programmer: Quincey Koziol
* Tuesday, February 20, 2007
*
*-------------------------------------------------------------------------
@ -632,7 +616,7 @@ H5A__dense_write_bt2_cb2(void *_record, void *_op_data, hbool_t *changed)
*
* Return: SUCCEED/FAIL
*
* Programmer: Quincey Koziol
* Programmer: Quincey Koziol
* Tuesday, December 5, 2006
*
*-------------------------------------------------------------------------
@ -743,9 +727,8 @@ done:
*
* Return: SUCCEED/FAIL
*
* Programmer: Quincey Koziol
* koziol@hdfgroup.org
* Dec 4 2006
* Programmer: Quincey Koziol
* Dec 4 2006
*
*-------------------------------------------------------------------------
*/
@ -840,9 +823,8 @@ done:
*
* Return: SUCCEED/FAIL
*
* Programmer: Quincey Koziol
* koziol@hdfgroup.org
* Dec 5 2006
* Programmer: Quincey Koziol
* Dec 5 2006
*
*-------------------------------------------------------------------------
*/
@ -883,9 +865,8 @@ done:
*
* Return: SUCCEED/FAIL
*
* Programmer: Quincey Koziol
* koziol@hdfgroup.org
* Jan 3 2007
* Programmer: Quincey Koziol
* Jan 3 2007
*
*-------------------------------------------------------------------------
*/
@ -1065,9 +1046,8 @@ done:
*
* Return: H5_ITER_ERROR/H5_ITER_CONT/H5_ITER_STOP
*
* Programmer: Quincey Koziol
* koziol@hdfgroup.org
* Dec 5 2006
* Programmer: Quincey Koziol
* Dec 5 2006
*
*-------------------------------------------------------------------------
*/
@ -1161,9 +1141,8 @@ done:
*
* Return: SUCCEED/FAIL
*
* Programmer: Quincey Koziol
* koziol@hdfgroup.org
* Dec 5 2006
* Programmer: Quincey Koziol
* Dec 5 2006
*
*-------------------------------------------------------------------------
*/
@ -1296,9 +1275,8 @@ done:
*
* Return: SUCCEED/FAIL
*
* Programmer: Quincey Koziol
* koziol@hdfgroup.org
* Dec 11 2006
* Programmer: Quincey Koziol
* Dec 11 2006
*
*-------------------------------------------------------------------------
*/
@ -1360,9 +1338,8 @@ done:
*
* Return: SUCCEED/FAIL
*
* Programmer: Quincey Koziol
* koziol@hdfgroup.org
* Dec 11 2006
* Programmer: Quincey Koziol
* Dec 11 2006
*
*-------------------------------------------------------------------------
*/
@ -1448,9 +1425,8 @@ done:
*
* Return: SUCCEED/FAIL
*
* Programmer: Quincey Koziol
* koziol@hdfgroup.org
* Feb 14 2007
* Programmer: Quincey Koziol
* Feb 14 2007
*
*-------------------------------------------------------------------------
*/
@ -1574,9 +1550,8 @@ done:
*
* Return: SUCCEED/FAIL
*
* Programmer: Quincey Koziol
* koziol@hdfgroup.org
* Feb 14 2007
* Programmer: Quincey Koziol
* Feb 14 2007
*
*-------------------------------------------------------------------------
*/
@ -1702,9 +1677,8 @@ done:
*
* Return: SUCCEED/FAIL
*
* Programmer: Quincey Koziol
* koziol@hdfgroup.org
* Dec 11 2006
* Programmer: Quincey Koziol
* Dec 11 2006
*
*-------------------------------------------------------------------------
*/
@ -1788,9 +1762,8 @@ done:
*
* Return: SUCCEED/FAIL
*
* Programmer: Quincey Koziol
* koziol@hdfgroup.org
* Jan 3 2007
* Programmer: Quincey Koziol
* Jan 3 2007
*
*-------------------------------------------------------------------------
*/
@ -1852,9 +1825,8 @@ done:
*
* Return: SUCCEED/FAIL
*
* Programmer: Quincey Koziol
* koziol@hdfgroup.org
* Dec 6 2006
* Programmer: Quincey Koziol
* Dec 6 2006
*
*-------------------------------------------------------------------------
*/

@ -15,7 +15,7 @@
*
* Created: H5Adeprec.c
* November 27 2006
* Quincey Koziol <koziol@hdfgroup.org>
* Quincey Koziol
*
* Purpose: Deprecated functions from the H5A interface. These
* functions are here for compatibility purposes and may be

@ -14,8 +14,8 @@
/*-------------------------------------------------------------------------
*
* Created: H5Aint.c
* Dec 18 2006
* Quincey Koziol <koziol@hdfgroup.org>
* Dec 18 2006
* Quincey Koziol
*
* Purpose: Internal routines for managing attributes.
*
@ -122,10 +122,10 @@ const unsigned H5O_attr_ver_bounds[] = {
/* Local Variables */
/*******************/
typedef H5A_t* H5A_t_ptr;
typedef H5A_t* H5A_t_ptr;
H5FL_SEQ_DEFINE(H5A_t_ptr);
/*-------------------------------------------------------------------------
* Function: H5A__create
*
@ -288,16 +288,16 @@ done:
FUNC_LEAVE_NOAPI_TAG(ret_value)
} /* H5A__create() */
/*-------------------------------------------------------------------------
* Function: H5A__create_by_name
*
* Purpose: Create an attribute on object, according to it's name
* Purpose: Create an attribute on object, according to it's name
*
* Return: Non-negative on success/Negative on failure
* Return: SUCCEED/FAIL
*
* Programmer: Quincey Koziol
* December 6, 2017
* Programmer: Quincey Koziol
* December 6, 2017
*
*-------------------------------------------------------------------------
*/
@ -306,8 +306,8 @@ H5A__create_by_name(const H5G_loc_t *loc, const char *obj_name, const char *attr
const H5T_t *type, const H5S_t *space, hid_t acpl_id)
{
H5G_loc_t obj_loc; /* Location used to open group */
H5G_name_t obj_path; /* Opened object group hier. path */
H5O_loc_t obj_oloc; /* Opened object object location */
H5G_name_t obj_path; /* Opened object group hier. path */
H5O_loc_t obj_oloc; /* Opened object object location */
hbool_t loc_found = FALSE; /* Entry at 'obj_name' found */
H5A_t *attr = NULL; /* Attribute from object header */
H5A_t *ret_value = NULL; /* Return value */
@ -349,22 +349,21 @@ done:
FUNC_LEAVE_NOAPI(ret_value)
} /* H5A__create_by_name() */
/*-------------------------------------------------------------------------
* Function: H5A__open_common
*
* Purpose:
* Finishes initializing an attributes the open
* Purpose: Finishes initializing an attributes the open
*
* Usage:
* herr_t H5A__open_common(loc, name)
* const H5G_loc_t *loc; IN: Pointer to group location for object
* H5A_t *attr; IN/OUT: Pointer to attribute to initialize
*
* Return: Non-negative on success/Negative on failure
* Return: SUCCEED/FAIL
*
* Programmer: Quincey Koziol
* December 18, 2006
* Programmer: Quincey Koziol
* December 18, 2006
*
*-------------------------------------------------------------------------
*/
@ -406,7 +405,7 @@ done:
FUNC_LEAVE_NOAPI(ret_value)
} /* H5A__open_common() */
/*-------------------------------------------------------------------------
* Function: H5A__open
*
@ -451,13 +450,13 @@ done:
FUNC_LEAVE_NOAPI(ret_value)
} /* H5A__open() */
/*-------------------------------------------------------------------------
* Function: H5A__open_by_idx
*
* Purpose: Open an attribute according to its index order
*
* Return: Non-negative on success/Negative on failure
* Return: SUCCEED/FAIL
*
* Programmer: Quincey Koziol
* April 2, 1998
@ -515,7 +514,7 @@ done:
FUNC_LEAVE_NOAPI(ret_value)
} /* H5A__open_by_idx() */
/*-------------------------------------------------------------------------
* Function: H5A__open_by_name
*
@ -579,7 +578,7 @@ done:
FUNC_LEAVE_NOAPI(ret_value)
} /* H5A__open_by_name() */
/*--------------------------------------------------------------------------
NAME
H5A__read
@ -681,12 +680,12 @@ done:
if(tconv_buf)
tconv_buf = H5FL_BLK_FREE(attr_buf, tconv_buf);
if(bkg_buf)
bkg_buf = H5FL_BLK_FREE(attr_buf, bkg_buf);
bkg_buf = H5FL_BLK_FREE(attr_buf, bkg_buf);
FUNC_LEAVE_NOAPI_TAG(ret_value)
} /* H5A__read() */
/*--------------------------------------------------------------------------
NAME
H5A__write
@ -800,7 +799,7 @@ done:
FUNC_LEAVE_NOAPI_TAG(ret_value)
} /* H5A__write() */
/*--------------------------------------------------------------------------
NAME
H5A__get_name
@ -821,7 +820,7 @@ ssize_t
H5A__get_name(H5A_t *attr, size_t buf_size, char *buf)
{
size_t copy_len, nbytes;
ssize_t ret_value = -1; /* Return value */
ssize_t ret_value = -1; /* Return value */
FUNC_ENTER_PACKAGE_NOERR
@ -846,7 +845,7 @@ H5A__get_name(H5A_t *attr, size_t buf_size, char *buf)
FUNC_LEAVE_NOAPI(ret_value)
} /* H5A__get_name() */
/*-------------------------------------------------------------------------
* Function: H5A_get_space
*
@ -883,14 +882,13 @@ done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5A_get_space() */
/*-------------------------------------------------------------------------
* Function: H5A__get_type
*
* Purpose: Returns an ID for the datatype of an attribute
*
* Return: Success: A valid ID for the datatype of an attribute
*
* Failure: H5I_INVALID_HID
*
*-------------------------------------------------------------------------
@ -946,7 +944,7 @@ done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5A__get_type() */
/*--------------------------------------------------------------------------
NAME
H5A__get_create_plist
@ -978,7 +976,7 @@ H5A__get_create_plist(H5A_t* attr)
/* Create the property list object to return */
if((new_plist_id = H5P_copy_plist(plist, TRUE)) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTINIT, FAIL, "unable to copy attribute creation properties")
HGOTO_ERROR(H5E_PLIST, H5E_CANTINIT, FAIL, "unable to copy attribute creation properties")
if(NULL == (new_plist = (H5P_genplist_t *)H5I_object(new_plist_id)))
HGOTO_ERROR(H5E_PLIST, H5E_BADTYPE, FAIL, "can't get property list")
@ -992,7 +990,7 @@ done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5A__get_create_plist() */
/*-------------------------------------------------------------------------
* Function: H5A__get_info
*
@ -1033,14 +1031,13 @@ done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5A__get_info() */
/*-------------------------------------------------------------------------
* Function: H5A__copy
*
* Purpose: Copies attribute OLD_ATTR.
*
* Return: Success: Pointer to a new copy of the OLD_ATTR argument.
*
* Failure: NULL
*
* Programmer: Robb Matzke
@ -1096,7 +1093,7 @@ done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5A__copy() */
/*-------------------------------------------------------------------------
* Function: H5A__shared_free
*
@ -1148,7 +1145,7 @@ H5A__shared_free(H5A_t *attr)
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5A__shared_free() */
/*-------------------------------------------------------------------------
* Function: H5A__close_cb
*
@ -1180,7 +1177,7 @@ done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5A__close_cb() */
/*-------------------------------------------------------------------------
* Function: H5A__close
*
@ -1231,7 +1228,7 @@ done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5A__close() */
/*-------------------------------------------------------------------------
* Function: H5A_oloc
*
@ -1263,7 +1260,7 @@ done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5A_oloc() */
/*-------------------------------------------------------------------------
* Function: H5A_nameof
*
@ -1295,7 +1292,7 @@ done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5A_nameof() */
/*-------------------------------------------------------------------------
* Function: H5A_type
*
@ -1325,7 +1322,7 @@ done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5A_type() */
/*-------------------------------------------------------------------------
* Function: H5A__exists_by_name
*
@ -1371,7 +1368,7 @@ done:
FUNC_LEAVE_NOAPI(ret_value)
} /* H5A__exists_by_name() */
/*-------------------------------------------------------------------------
* Function: H5A__compact_build_table_cb
*
@ -1381,7 +1378,6 @@ done:
* Return: Non-negative on success/Negative on failure
*
* Programmer: Quincey Koziol
* koziol@hdfgroup.org
* Dec 18 2006
*
* Modification:Raymond Lu
@ -1432,7 +1428,7 @@ done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5A__compact_build_table_cb() */
/*-------------------------------------------------------------------------
* Function: H5A__compact_build_table
*
@ -1444,8 +1440,8 @@ done:
*
* Return: SUCCEED/FAIL
*
* Programmer: Quincey Koziol
* Dec 18, 2006
* Programmer: Quincey Koziol
* Dec 18, 2006
*
*-------------------------------------------------------------------------
*/
@ -1495,18 +1491,16 @@ done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5A__compact_build_table() */
/*-------------------------------------------------------------------------
* Function: H5A__dense_build_table_cb
*
* Purpose: Callback routine for building table of attributes from dense
* attribute storage.
*
* Return: Success: Non-negative
* Failure: Negative
* Return: SUCCEED/FAIL
*
* Programmer: Quincey Koziol
* koziol@hdfgroup.org
* Dec 11 2006
*
*-------------------------------------------------------------------------
@ -1539,7 +1533,7 @@ done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5A__dense_build_table_cb() */
/*-------------------------------------------------------------------------
* Function: H5A__dense_build_table
*
@ -1624,21 +1618,20 @@ done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5A__dense_build_table() */
/*-------------------------------------------------------------------------
* Function: H5A__attr_cmp_name_inc
*
* Purpose: Callback routine for comparing two attribute names, in
* Purpose: Callback routine for comparing two attribute names, in
* increasing alphabetic order
*
* Return: An integer less than, equal to, or greater than zero if the
* Return: An integer less than, equal to, or greater than zero if the
* first argument is considered to be respectively less than,
* equal to, or greater than the second. If two members compare
* as equal, their order in the sorted array is undefined.
* (i.e. same as strcmp())
*
* Programmer: Quincey Koziol
* koziol@hdfgroup.org
* Dec 11 2006
*
*-------------------------------------------------------------------------
@ -1652,7 +1645,7 @@ H5A__attr_cmp_name_inc(const void *attr1, const void *attr2)
(*(const H5A_t * const *)attr2)->shared->name))
} /* end H5A__attr_cmp_name_inc() */
/*-------------------------------------------------------------------------
* Function: H5A__attr_cmp_name_dec
*
@ -1666,7 +1659,6 @@ H5A__attr_cmp_name_inc(const void *attr1, const void *attr2)
* (i.e. opposite of strcmp())
*
* Programmer: Quincey Koziol
* koziol@hdfgroup.org
* Feb 8 2007
*
*-------------------------------------------------------------------------
@ -1680,7 +1672,7 @@ H5A__attr_cmp_name_dec(const void *attr1, const void *attr2)
(*(const H5A_t * const *)attr1)->shared->name))
} /* end H5A__attr_cmp_name_dec() */
/*-------------------------------------------------------------------------
* Function: H5A__attr_cmp_corder_inc
*
@ -1693,7 +1685,6 @@ H5A__attr_cmp_name_dec(const void *attr1, const void *attr2)
* as equal, their order in the sorted array is undefined.
*
* Programmer: Quincey Koziol
* koziol@hdfgroup.org
* Feb 8 2007
*
*-------------------------------------------------------------------------
@ -1715,21 +1706,20 @@ H5A__attr_cmp_corder_inc(const void *attr1, const void *attr2)
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5A__attr_cmp_corder_inc() */
/*-------------------------------------------------------------------------
* Function: H5A__attr_cmp_corder_dec
*
* Purpose: Callback routine for comparing two attributes, in
* Purpose: Callback routine for comparing two attributes, in
* decreasing creation order
*
* Return: An integer less than, equal to, or greater than zero if the
* Return: An integer less than, equal to, or greater than zero if the
* second argument is considered to be respectively less than,
* equal to, or greater than the first. If two members compare
* as equal, their order in the sorted array is undefined.
*
* Programmer: Quincey Koziol
* koziol@hdfgroup.org
* Feb 8 2007
* Programmer: Quincey Koziol
* Feb 8 2007
*
*-------------------------------------------------------------------------
*/
@ -1750,17 +1740,16 @@ H5A__attr_cmp_corder_dec(const void *attr1, const void *attr2)
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5A__attr_cmp_corder_dec() */
/*-------------------------------------------------------------------------
* Function: H5A__attr_sort_table
*
* Purpose: Sort table containing a list of attributes for an object
*
* Return: Success: Non-negative
* Failure: Negative
* Return: SUCCEED/FAIL
*
* Programmer: Quincey Koziol
* Dec 11, 2006
* Programmer: Quincey Koziol
* Dec 11, 2006
*
*-------------------------------------------------------------------------
*/
@ -1795,7 +1784,7 @@ H5A__attr_sort_table(H5A_attr_table_t *atable, H5_index_t idx_type,
FUNC_LEAVE_NOAPI(SUCCEED)
} /* end H5A__attr_sort_table() */
/*-------------------------------------------------------------------------
* Function: H5A__attr_iterate_table
*
@ -1804,8 +1793,8 @@ H5A__attr_sort_table(H5A_attr_table_t *atable, H5_index_t idx_type,
*
* Return: SUCCEED/FAIL
*
* Programmer: Quincey Koziol
* Dec 18, 2006
* Programmer: Quincey Koziol
* Dec 18, 2006
*
*-------------------------------------------------------------------------
*/
@ -1877,7 +1866,7 @@ done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5A__attr_iterate_table() */
/*-------------------------------------------------------------------------
* Function: H5A__attr_release_table
*
@ -1885,7 +1874,7 @@ done:
*
* Return: SUCCEED/FAIL
*
* Programmer: Quincey Koziol
* Programmer: Quincey Koziol
* Dec 11, 2006
*
*-------------------------------------------------------------------------
@ -1893,7 +1882,7 @@ done:
herr_t
H5A__attr_release_table(H5A_attr_table_t *atable)
{
herr_t ret_value = SUCCEED; /* Return value */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_PACKAGE
@ -1918,18 +1907,16 @@ done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5A__attr_release_table() */
/*-------------------------------------------------------------------------
* Function: H5A__get_ainfo
*
* Purpose: Retrieves the "attribute info" message for an object. Also
* sets the number of attributes correctly, if it isn't set up yet.
*
* Return: Success: TRUE/FALSE whether message was found & retrieved
* Failure: FAIL if error occurred
* Return: TRUE/FALSE/FAIL
*
* Programmer: Quincey Koziol
* koziol@hdfgroup.org
* Mar 11 2007
*
*-------------------------------------------------------------------------
@ -1949,11 +1936,11 @@ H5A__get_ainfo(H5F_t *f, H5O_t *oh, H5O_ainfo_t *ainfo)
/* Check if the "attribute info" message exists */
if((ret_value = H5O_msg_exists_oh(oh, H5O_AINFO_ID)) < 0)
HGOTO_ERROR(H5E_ATTR, H5E_NOTFOUND, FAIL, "unable to check object header")
HGOTO_ERROR(H5E_ATTR, H5E_NOTFOUND, FAIL, "unable to check object header")
if(ret_value > 0) {
/* Retrieve the "attribute info" structure */
if(NULL == H5O_msg_read_oh(f, oh, H5O_AINFO_ID, ainfo))
HGOTO_ERROR(H5E_ATTR, H5E_CANTGET, FAIL, "can't read AINFO message")
HGOTO_ERROR(H5E_ATTR, H5E_CANTGET, FAIL, "can't read AINFO message")
/* Check if we don't know how many attributes there are */
if(ainfo->nattrs == HSIZET_MAX) {
@ -1982,7 +1969,7 @@ done:
FUNC_LEAVE_NOAPI_TAG(ret_value)
} /* end H5A__get_ainfo() */
/*-------------------------------------------------------------------------
* Function: H5A__set_version
*
@ -1993,7 +1980,6 @@ done:
* Return: SUCCEED/FAIL
*
* Programmer: Quincey Koziol
* koziol@hdfgroup.org
* Jul 17 2007
*
*-------------------------------------------------------------------------
@ -2044,7 +2030,7 @@ done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5A__set_version() */
/*-------------------------------------------------------------------------
* Function: H5A__attr_copy_file
*
@ -2254,10 +2240,10 @@ H5A__attr_copy_file(const H5A_t *attr_src, H5F_t *file_dst, hbool_t *recompute_s
H5MM_memcpy(buf, attr_src->shared->data, attr_src->shared->data_size);
/* Allocate background memory */
if(H5T_path_bkg(tpath_src_mem) || H5T_path_bkg(tpath_mem_dst))
if(NULL == (bkg_buf = H5FL_BLK_CALLOC(attr_buf, buf_size)))
HGOTO_ERROR(H5E_ATTR, H5E_CANTALLOC, NULL, "memory allocation failed")
/* Allocate background memory */
if(H5T_path_bkg(tpath_src_mem) || H5T_path_bkg(tpath_mem_dst))
if(NULL == (bkg_buf = H5FL_BLK_CALLOC(attr_buf, buf_size)))
HGOTO_ERROR(H5E_ATTR, H5E_CANTALLOC, NULL, "memory allocation failed")
/* Convert from source file to memory */
if(H5T_convert(tpath_src_mem, tid_src, tid_mem, nelmts, (size_t)0, (size_t)0, buf, bkg_buf) < 0)
@ -2265,9 +2251,9 @@ H5A__attr_copy_file(const H5A_t *attr_src, H5F_t *file_dst, hbool_t *recompute_s
H5MM_memcpy(reclaim_buf, buf, buf_size);
/* Set background buffer to all zeros */
if(bkg_buf)
HDmemset(bkg_buf, 0, buf_size);
/* Set background buffer to all zeros */
if(bkg_buf)
HDmemset(bkg_buf, 0, buf_size);
/* Convert from memory to destination file */
if(H5T_convert(tpath_mem_dst, tid_mem, tid_dst, nelmts, (size_t)0, (size_t)0, buf, bkg_buf) < 0)
@ -2327,7 +2313,7 @@ done:
FUNC_LEAVE_NOAPI(ret_value)
} /* H5A__attr_copy_file() */
/*-------------------------------------------------------------------------
* Function: H5A__attr_post_copy_file
*
@ -2420,7 +2406,7 @@ done:
FUNC_LEAVE_NOAPI(ret_value)
} /* H5A__attr_post_copy_file() */
/*-------------------------------------------------------------------------
* Function: H5A__dense_post_copy_file_cb
*
@ -2430,7 +2416,6 @@ done:
* Failure: Negative
*
* Programmer: Peter Cao
* xcao@hdfgroup.org
* July 20, 2007
*
*-------------------------------------------------------------------------
@ -2478,7 +2463,7 @@ done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5A__dense_post_copy_file_cb() */
/*-------------------------------------------------------------------------
* Function: H5A__dense_post_copy_file_all
*
@ -2487,7 +2472,6 @@ done:
* Return: SUCCEED/FAIL
*
* Programmer: Peter Cao
* xcao@hdfgroup.org
* July 20, 2007
*
*-------------------------------------------------------------------------
@ -2525,7 +2509,7 @@ done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5A__dense_post_copy_file_all */
/*-------------------------------------------------------------------------
* Function: H5A__rename_by_name
*
@ -2533,7 +2517,7 @@ done:
*
* Return: SUCCEED/FAIL
*
* Programmer: Quincey Koziol
* Programmer: Quincey Koziol
* February 20, 2007
*
*-------------------------------------------------------------------------
@ -2543,10 +2527,10 @@ H5A__rename_by_name(H5G_loc_t loc, const char *obj_name, const char *old_attr_na
const char *new_attr_name)
{
H5G_loc_t obj_loc; /* Location used to open group */
H5G_name_t obj_path; /* Opened object group hier. path */
H5O_loc_t obj_oloc; /* Opened object object location */
H5G_name_t obj_path; /* Opened object group hier. path */
H5O_loc_t obj_oloc; /* Opened object object location */
hbool_t loc_found = FALSE; /* Entry at 'obj_name' found */
herr_t ret_value = SUCCEED; /* Return value */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_PACKAGE
@ -2575,7 +2559,7 @@ done:
FUNC_LEAVE_NOAPI(ret_value)
} /* H5A__rename_by_name() */
/*-------------------------------------------------------------------------
* Function: H5A__iterate_common
*
@ -2583,7 +2567,7 @@ done:
*
* Return: SUCCEED/FAIL
*
* Programmer: Quincey Koziol
* Programmer: Quincey Koziol
* December 6, 2017
*
*-------------------------------------------------------------------------
@ -2610,7 +2594,7 @@ H5A__iterate_common(hid_t loc_id, H5_index_t idx_type, H5_iter_order_t order,
FUNC_LEAVE_NOAPI(ret_value)
} /* H5A__iterate_common() */
/*-------------------------------------------------------------------------
* Function: H5A__iterate
*
@ -2675,7 +2659,7 @@ done:
} /* end H5A__iterate() */
#ifndef H5_NO_DEPRECATED_SYMBOLS
/*-------------------------------------------------------------------------
* Function: H5A__iterate_old
*
@ -2683,7 +2667,7 @@ done:
*
* Return: SUCCEED/FAIL
*
* Programmer: Quincey Koziol
* Programmer: Quincey Koziol
* December 6, 2017
*
*-------------------------------------------------------------------------
@ -2725,7 +2709,7 @@ H5A__iterate_old(hid_t loc_id, unsigned *attr_num, H5A_operator1_t op,
*
* Return: SUCCEED/FAIL
*
* Programmer: Quincey Koziol
* Programmer: Quincey Koziol
* December 6, 2017
*
*-------------------------------------------------------------------------
@ -2734,8 +2718,8 @@ herr_t
H5A__delete_by_name(const H5G_loc_t *loc, const char *obj_name, const char *attr_name)
{
H5G_loc_t obj_loc; /* Location used to open group */
H5G_name_t obj_path; /* Opened object group hier. path */
H5O_loc_t obj_oloc; /* Opened object object location */
H5G_name_t obj_path; /* Opened object group hier. path */
H5O_loc_t obj_oloc; /* Opened object object location */
hbool_t loc_found = FALSE; /* Entry at 'obj_name' found */
herr_t ret_value = SUCCEED; /* Return value */
@ -2763,7 +2747,7 @@ done:
FUNC_LEAVE_NOAPI(ret_value)
} /* H5A__delete_by_name() */
/*-------------------------------------------------------------------------
* Function: H5A__delete_by_idx
*
@ -2771,7 +2755,7 @@ done:
*
* Return: SUCCEED/FAIL
*
* Programmer: Quincey Koziol
* Programmer: Quincey Koziol
* December 6, 2017
*
*-------------------------------------------------------------------------
@ -2781,8 +2765,8 @@ H5A__delete_by_idx(const H5G_loc_t *loc, const char *obj_name, H5_index_t idx_ty
H5_iter_order_t order, hsize_t n)
{
H5G_loc_t obj_loc; /* Location used to open group */
H5G_name_t obj_path; /* Opened object group hier. path */
H5O_loc_t obj_oloc; /* Opened object object location */
H5G_name_t obj_path; /* Opened object group hier. path */
H5O_loc_t obj_oloc; /* Opened object object location */
hbool_t loc_found = FALSE; /* Entry at 'obj_name' found */
herr_t ret_value = SUCCEED; /* Return value */

@ -11,7 +11,7 @@
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/*
* Programmer: Quincey Koziol <koziol@hdfgroup.org>
* Programmer: Quincey Koziol
* Saturday, September 12, 2015
*
* Purpose: This file contains declarations which define macros for the

@ -263,9 +263,6 @@ H5_DLL herr_t H5O__attr_remove(const H5O_loc_t *loc, const char *name);
H5_DLL herr_t H5O__attr_remove_by_idx(const H5O_loc_t *loc, H5_index_t idx_type,
H5_iter_order_t order, hsize_t n);
H5_DLL htri_t H5O__attr_exists(const H5O_loc_t *loc, const char *name);
#ifndef H5_NO_DEPRECATED_SYMBOLS
H5_DLL int H5O__attr_count(const H5O_loc_t *loc);
#endif /* H5_NO_DEPRECATED_SYMBOLS */
H5_DLL H5A_t *H5A__attr_copy_file(const H5A_t *attr_src, H5F_t *file_dst, hbool_t *recompute_size,
H5O_copy_t *cpy_info);
H5_DLL herr_t H5A__attr_post_copy_file(const H5O_loc_t *src_oloc, const H5A_t *mesg_src,

@ -13,9 +13,9 @@
/*-------------------------------------------------------------------------
*
* Created: H5B.c
* Jul 10 1997
* Robb Matzke <matzke@llnl.gov>
* 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
@ -206,7 +206,6 @@ H5FL_SEQ_DEFINE_STATIC(size_t);
* Failure: Negative
*
* Programmer: Robb Matzke
* matzke@llnl.gov
* Jun 23 1997
*
*-------------------------------------------------------------------------
@ -291,7 +290,6 @@ done:
* UDATA is undefined).
*
* Programmer: Robb Matzke
* matzke@llnl.gov
* Jun 23 1997
*
*-------------------------------------------------------------------------
@ -387,7 +385,6 @@ done:
* returned through the NEW_ADDR argument). Negative on failure.
*
* Programmer: Robb Matzke
* matzke@llnl.gov
* Jul 3 1997
*
*-------------------------------------------------------------------------
@ -542,7 +539,6 @@ done:
* Return: Non-negative on success/Negative on failure
*
* Programmer: Robb Matzke
* matzke@llnl.gov
* Jun 23 1997
*
*-------------------------------------------------------------------------
@ -596,7 +592,7 @@ H5B_insert(H5F_t *f, const H5B_class_t *type, haddr_t addr, void *udata)
if((int)(my_ins = H5B__insert_helper(f, &bt_ud, type, lt_key,
&lt_key_changed, md_key, udata, rt_key, &rt_key_changed,
&split_bt_ud/*out*/)) < 0)
HGOTO_ERROR(H5E_BTREE, H5E_CANTINIT, FAIL, "unable to insert key")
HGOTO_ERROR(H5E_BTREE, H5E_CANTINIT, FAIL, "unable to insert key")
/* Check if the root node split */
if(H5B_INS_NOOP == my_ins) {
@ -613,9 +609,9 @@ H5B_insert(H5F_t *f, const H5B_class_t *type, haddr_t addr, void *udata)
/* update left and right keys */
if(!lt_key_changed)
H5MM_memcpy(lt_key, H5B_NKEY(bt_ud.bt,shared,0), type->sizeof_nkey);
H5MM_memcpy(lt_key, H5B_NKEY(bt_ud.bt,shared,0), type->sizeof_nkey);
if(!rt_key_changed)
H5MM_memcpy(rt_key, H5B_NKEY(split_bt_ud.bt,shared,split_bt_ud.bt->nchildren), type->sizeof_nkey);
H5MM_memcpy(rt_key, H5B_NKEY(split_bt_ud.bt,shared,split_bt_ud.bt->nchildren), type->sizeof_nkey);
/*
* Copy the old root node to some other file location and make the new root
@ -624,7 +620,7 @@ H5B_insert(H5F_t *f, const H5B_class_t *type, haddr_t addr, void *udata)
*/
H5_CHECK_OVERFLOW(shared->sizeof_rnode,size_t,hsize_t);
if(HADDR_UNDEF == (old_root_addr = H5MF_alloc(f, H5FD_MEM_BTREE, (hsize_t)shared->sizeof_rnode)))
HGOTO_ERROR(H5E_BTREE, H5E_CANTALLOC, FAIL, "unable to allocate file space to move root")
HGOTO_ERROR(H5E_BTREE, H5E_CANTALLOC, FAIL, "unable to allocate file space to move root")
/*
* Move the node to the new location
@ -637,12 +633,12 @@ H5B_insert(H5F_t *f, const H5B_class_t *type, haddr_t addr, void *udata)
/* Unprotect the old root so we can move it. Also force it to be marked
* dirty so it is written to the new location. */
if(H5AC_unprotect(f, H5AC_BT, bt_ud.addr, bt_ud.bt, H5AC__DIRTIED_FLAG) < 0)
HGOTO_ERROR(H5E_BTREE, H5E_CANTUNPROTECT, FAIL, "unable to release old root")
HGOTO_ERROR(H5E_BTREE, H5E_CANTUNPROTECT, FAIL, "unable to release old root")
bt_ud.bt = NULL; /* Make certain future references will be caught */
/* Move the location of the old root on the disk */
if(H5AC_move_entry(f, H5AC_BT, bt_ud.addr, old_root_addr) < 0)
HGOTO_ERROR(H5E_BTREE, H5E_CANTSPLIT, FAIL, "unable to move B-tree root node")
HGOTO_ERROR(H5E_BTREE, H5E_CANTSPLIT, FAIL, "unable to move B-tree root node")
bt_ud.addr = old_root_addr;
/* Update the split b-tree's left pointer to point to the new location */
@ -700,7 +696,6 @@ done:
* Return: Non-negative on success/Negative on failure
*
* Programmer: Robb Matzke
* matzke@llnl.gov
* Jul 8 1997
*
*-------------------------------------------------------------------------
@ -789,7 +784,6 @@ H5B__insert_child(H5B_t *bt, unsigned *bt_flags, unsigned idx,
* Failure: H5B_INS_ERROR
*
* Programmer: Robb Matzke
* matzke@llnl.gov
* Jul 9 1997
*
*-------------------------------------------------------------------------
@ -839,7 +833,7 @@ H5B__insert_helper(H5F_t *f, H5B_ins_ud_t *bt_ud, const H5B_class_t *type,
/* Get shared info for B-tree */
if(NULL == (rc_shared = (type->get_shared)(f, udata)))
HGOTO_ERROR(H5E_BTREE, H5E_CANTGET, H5B_INS_ERROR, "can't retrieve B-tree's shared ref. count object")
HGOTO_ERROR(H5E_BTREE, H5E_CANTGET, H5B_INS_ERROR, "can't retrieve B-tree's shared ref. count object")
shared = (H5B_shared_t *)H5UC_GET_OBJ(rc_shared);
HDassert(shared);
@ -1118,7 +1112,6 @@ done:
* Return: Non-negative on success/Negative on failure
*
* Programmer: Robb Matzke
* matzke@llnl.gov
* Jun 23 1997
*
*-------------------------------------------------------------------------
@ -1185,7 +1178,6 @@ done:
* Return: Non-negative on success/Negative on failure
*
* Programmer: Robb Matzke
* matzke@llnl.gov
* Jun 23 1997
*
*-------------------------------------------------------------------------
@ -1266,7 +1258,7 @@ H5B__remove_helper(H5F_t *f, haddr_t addr, const H5B_class_t *type, int level,
/* Get shared info for B-tree */
if(NULL == (rc_shared = (type->get_shared)(f, udata)))
HGOTO_ERROR(H5E_BTREE, H5E_CANTGET, H5B_INS_ERROR, "can't retrieve B-tree's shared ref. count object")
HGOTO_ERROR(H5E_BTREE, H5E_CANTGET, H5B_INS_ERROR, "can't retrieve B-tree's shared ref. count object")
shared = (H5B_shared_t *)H5UC_GET_OBJ(rc_shared);
HDassert(shared);
@ -1278,7 +1270,7 @@ H5B__remove_helper(H5F_t *f, haddr_t addr, const H5B_class_t *type, int level,
cache_udata.type = type;
cache_udata.rc_shared = rc_shared;
if(NULL == (bt = (H5B_t *)H5AC_protect(f, H5AC_BT, addr, &cache_udata, H5AC__NO_FLAGS_SET)))
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, H5B_INS_ERROR, "unable to load B-tree node")
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, H5B_INS_ERROR, "unable to load B-tree node")
rt = bt->nchildren;
while(lt < rt && cmp) {
@ -1417,7 +1409,7 @@ H5B__remove_helper(H5F_t *f, haddr_t addr, const H5B_class_t *type, int level,
bt->nchildren = 0;
/* Delete the node from disk (via the metadata cache) */
bt_flags |= H5AC__DIRTIED_FLAG | H5AC__FREE_FILE_SPACE_FLAG;
bt_flags |= H5AC__DIRTIED_FLAG | H5AC__FREE_FILE_SPACE_FLAG;
H5_CHECK_OVERFLOW(shared->sizeof_rnode, size_t, hsize_t);
if(H5AC_unprotect(f, H5AC_BT, addr, bt, bt_flags | H5AC__DELETED_FLAG) < 0) {
bt = NULL;
@ -1679,7 +1671,6 @@ done:
* Failure: NULL
*
* Programmer: Quincey Koziol
* koziol@hdfgroup.org
* May 27 2008
*
*-------------------------------------------------------------------------
@ -1786,7 +1777,6 @@ H5B_shared_free(void *_shared)
* Failure: NULL
*
* Programmer: Quincey Koziol
* koziol@ncsa.uiuc.edu
* Apr 18 2000
*
*-------------------------------------------------------------------------
@ -1852,7 +1842,6 @@ done:
* Return: Non-negative on success/Negative on failure
*
* Programmer: Quincey Koziol
* koziol@hdfgroup.org
* Jun 3 2008
*
*-------------------------------------------------------------------------
@ -1885,7 +1874,7 @@ H5B__get_info_helper(H5F_t *f, const H5B_class_t *type, haddr_t addr,
/* Get shared info for B-tree */
if(NULL == (rc_shared = (type->get_shared)(f, info_udata->udata)))
HGOTO_ERROR(H5E_BTREE, H5E_CANTGET, FAIL, "can't retrieve B-tree's shared ref. count object")
HGOTO_ERROR(H5E_BTREE, H5E_CANTGET, FAIL, "can't retrieve B-tree's shared ref. count object")
shared = (H5B_shared_t *)H5UC_GET_OBJ(rc_shared);
HDassert(shared);
@ -1897,7 +1886,7 @@ H5B__get_info_helper(H5F_t *f, const H5B_class_t *type, haddr_t addr,
cache_udata.type = type;
cache_udata.rc_shared = rc_shared;
if(NULL == (bt = (H5B_t *)H5AC_protect(f, H5AC_BT, addr, &cache_udata, H5AC__READ_ONLY_FLAG)))
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to load B-tree node")
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to load B-tree node")
/* Cache information from this node */
left_child = bt->child[0];
@ -2066,7 +2055,6 @@ done:
* Failure: FAIL
*
* Programmer: Quincey Koziol
* koziol@hdfgroup.org
* Mar 26, 2008
*
*-------------------------------------------------------------------------

@ -15,7 +15,7 @@
*
* Created: H5B2.c
* Jan 31 2005
* Quincey Koziol <koziol@ncsa.uiuc.edu>
* Quincey Koziol
*
* Purpose: Implements a B-tree, with several modifications from
* the "standard" methods.
@ -129,7 +129,6 @@ H5FL_DEFINE_STATIC(H5B2_t);
* filled in), negative on failure
*
* Programmer: Quincey Koziol
* koziol@ncsa.uiuc.edu
* Jan 31 2005
*
*-------------------------------------------------------------------------
@ -200,7 +199,6 @@ done:
* NULL on failure
*
* Programmer: Quincey Koziol
* koziol@hdfgroup.org
* Oct 15 2009
*
*-------------------------------------------------------------------------
@ -264,7 +262,6 @@ done:
* Return: Non-negative on success/Negative on failure
*
* Programmer: Quincey Koziol
* koziol@ncsa.uiuc.edu
* Feb 2 2005
*
*-------------------------------------------------------------------------
@ -307,7 +304,6 @@ done:
* Return: Non-negative on success/Negative on failure
*
* Programmer: Quincey Koziol
* koziol@hdfgroup.org
* Dec 23 2015
*
*-------------------------------------------------------------------------
@ -379,7 +375,6 @@ done:
* Return: SUCCEED/FAIL
*
* Programmer: Quincey Koziol
* koziol@hdfgroup.org
* Nov 5 2009
*
*-------------------------------------------------------------------------
@ -414,7 +409,6 @@ H5B2_get_addr(const H5B2_t *bt2, haddr_t *addr_p)
* Return: Value from callback: non-negative on success, negative on error
*
* Programmer: Quincey Koziol
* koziol@ncsa.uiuc.edu
* Feb 11 2005
*
*-------------------------------------------------------------------------
@ -465,7 +459,6 @@ H5B2_iterate(H5B2_t *bt2, H5B2_operator_t op, void *op_data)
* Return: Non-negative (TRUE/FALSE) on success, negative on failure.
*
* Programmer: Quincey Koziol
* koziol@ncsa.uiuc.edu
* Feb 23 2005
*
*-------------------------------------------------------------------------
@ -705,7 +698,6 @@ done:
* Return: Non-negative on success, negative on failure.
*
* Programmer: Quincey Koziol
* koziol@ncsa.uiuc.edu
* Feb 23 2005
*
*-------------------------------------------------------------------------
@ -894,7 +886,6 @@ done:
* Return: Non-negative on success/Negative on failure
*
* Programmer: Quincey Koziol
* koziol@ncsa.uiuc.edu
* Feb 25 2005
*
*-------------------------------------------------------------------------
@ -968,7 +959,6 @@ done:
* Return: Non-negative on success/Negative on failure
*
* Programmer: Quincey Koziol
* koziol@hdfgroup.org
* Nov 14 2006
*
*-------------------------------------------------------------------------
@ -1051,7 +1041,6 @@ done:
* Return: Non-negative on success/Negative on failure
*
* Programmer: Quincey Koziol
* koziol@ncsa.uiuc.edu
* Feb 25 2005
*
*-------------------------------------------------------------------------
@ -1092,7 +1081,6 @@ H5B2_get_nrec(const H5B2_t *bt2, hsize_t *nrec)
* Return: Non-negative on success, negative on failure.
*
* Programmer: Quincey Koziol
* koziol@ncsa.uiuc.edu
* Mar 8 2005
*
*-------------------------------------------------------------------------
@ -1150,7 +1138,6 @@ done:
* Return: Non-negative on success, negative on failure.
*
* Programmer: Quincey Koziol
* koziol@ncsa.uiuc.edu
* Mar 10 2005
*
*-------------------------------------------------------------------------
@ -1384,7 +1371,6 @@ done:
* Return: Non-negative on success/Negative on failure
*
* Programmer: Quincey Koziol
* koziol@hdfgroup.org
* Oct 15 2009
*
*-------------------------------------------------------------------------
@ -1493,7 +1479,6 @@ done:
* Return: Non-negative on success, negative on failure.
*
* Programmer: Quincey Koziol
* koziol@ncsa.uiuc.edu
* Mar 9 2005
*
*-------------------------------------------------------------------------
@ -1512,9 +1497,6 @@ H5B2_delete(H5F_t *f, haddr_t addr, void *ctx_udata, H5B2_remove_t op,
HDassert(H5F_addr_defined(addr));
/* Lock the v2 B-tree header into memory */
#ifdef QAK
HDfprintf(stderr, "%s: addr = %a\n", FUNC, addr);
#endif /* QAK */
if(NULL == (hdr = H5B2__hdr_protect(f, addr, ctx_udata, H5AC__NO_FLAGS_SET)))
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to protect v2 B-tree header")

@ -15,7 +15,7 @@
*
* Created: H5B2cache.c
* Jan 31 2005
* Quincey Koziol <koziol@hdfgroup.org>
* Quincey Koziol
*
* Purpose: Implement v2 B-tree metadata cache methods.
*
@ -171,7 +171,6 @@ const H5AC_class_t H5AC_BT2_LEAF[1] = {{
* Return: Non-negative on success/Negative on failure
*
* Programmer: Quincey Koziol
* koziol@hdfgroup.org
* May 18, 2010
*
*-------------------------------------------------------------------------
@ -240,7 +239,6 @@ H5B2__cache_hdr_verify_chksum(const void *_image, size_t len, void H5_ATTR_UNUSE
* Failure: NULL
*
* Programmer: Quincey Koziol
* koziol@ncsa.uiuc.edu
* Feb 1 2005
*
*-------------------------------------------------------------------------
@ -339,7 +337,6 @@ done:
* Return: Non-negative on success/Negative on failure
*
* Programmer: Quincey Koziol
* koziol@hdfgroup.org
* May 20, 2010
*
*-------------------------------------------------------------------------
@ -370,7 +367,6 @@ H5B2__cache_hdr_image_len(const void *_thing, size_t *image_len)
* Return: Non-negative on success/Negative on failure
*
* Programmer: Quincey Koziol
* koziol@ncsa.uiuc.edu
* Feb 1 2005
*
*-------------------------------------------------------------------------
@ -442,7 +438,6 @@ H5B2__cache_hdr_serialize(const H5F_t *f, void *_image, size_t H5_ATTR_UNUSED le
* Return: Non-negative on success/Negative on failure
*
* Programmer: Neil Fortner
* nfortne2@hdfgroup.org
* Apr 24 2012
*
*-------------------------------------------------------------------------
@ -530,7 +525,6 @@ done:
* Return: Non-negative on success/Negative on failure
*
* Programmer: Mike McGreevy
* mcgreevy@hdfgroup.org
* June 18, 2008
*
*-------------------------------------------------------------------------
@ -562,7 +556,6 @@ done:
* Return: Non-negative on success/Negative on failure
*
* Programmer: Quincey Koziol
* koziol@hdfgroup.org
* May 18, 2010
*
*-------------------------------------------------------------------------
@ -637,7 +630,6 @@ H5B2__cache_int_verify_chksum(const void *_image, size_t H5_ATTR_UNUSED len, voi
* Failure: NULL
*
* Programmer: Quincey Koziol
* koziol@ncsa.uiuc.edu
* Feb 2 2005
*
*-------------------------------------------------------------------------
@ -756,7 +748,6 @@ done:
* Return: Non-negative on success/Negative on failure
*
* Programmer: Quincey Koziol
* koziol@hdfgroup.org
* May 20, 2010
*
*-------------------------------------------------------------------------
@ -788,7 +779,6 @@ H5B2__cache_int_image_len(const void *_thing, size_t *image_len)
* Return: Non-negative on success/Negative on failure
*
* Programmer: Quincey Koziol
* koziol@ncsa.uiuc.edu
* Feb 3 2005
*
*-------------------------------------------------------------------------
@ -875,7 +865,6 @@ done:
* Return: Non-negative on success/Negative on failure
*
* Programmer: Neil Fortner
* nfortne2@hdfgroup.org
* Apr 25 2012
*
*-------------------------------------------------------------------------
@ -886,7 +875,7 @@ H5B2__cache_int_notify(H5AC_notify_action_t action, void *_thing)
H5B2_internal_t *internal = (H5B2_internal_t *)_thing;
herr_t ret_value = SUCCEED;
FUNC_ENTER_NOAPI_NOINIT
FUNC_ENTER_STATIC
/*
* Check arguments.
@ -952,7 +941,6 @@ done:
* Return: Non-negative on success/Negative on failure
*
* Programmer: Mike McGreevy
* mcgreevy@hdfgroup.org
* June 18, 2008
*
*-------------------------------------------------------------------------
@ -985,7 +973,6 @@ done:
* Return: Non-negative on success/Negative on failure
*
* Programmer: Quincey Koziol
* koziol@hdfgroup.org
* May 18, 2010
*
*-------------------------------------------------------------------------
@ -1060,7 +1047,6 @@ H5B2__cache_leaf_verify_chksum(const void *_image, size_t H5_ATTR_UNUSED len, vo
* Failure: NULL
*
* Programmer: Quincey Koziol
* koziol@ncsa.uiuc.edu
* Feb 2 2005
*
*-------------------------------------------------------------------------
@ -1159,7 +1145,6 @@ done:
* Return: Non-negative on success/Negative on failure
*
* Programmer: Quincey Koziol
* koziol@hdfgroup.org
* May 20, 2010
*
*-------------------------------------------------------------------------
@ -1191,7 +1176,6 @@ H5B2__cache_leaf_image_len(const void *_thing, size_t *image_len)
* Return: Non-negative on success/Negative on failure
*
* Programmer: Quincey Koziol
* koziol@ncsa.uiuc.edu
* Feb 2 2005
*
*-------------------------------------------------------------------------
@ -1264,7 +1248,6 @@ done:
* Return: Non-negative on success/Negative on failure
*
* Programmer: Neil Fortner
* nfortne2@hdfgroup.org
* Apr 25 2012
*
*-------------------------------------------------------------------------
@ -1275,7 +1258,7 @@ H5B2__cache_leaf_notify(H5AC_notify_action_t action, void *_thing)
H5B2_leaf_t *leaf = (H5B2_leaf_t *)_thing;
herr_t ret_value = SUCCEED;
FUNC_ENTER_NOAPI_NOINIT
FUNC_ENTER_STATIC
/*
* Check arguments.
@ -1341,7 +1324,6 @@ done:
* Return: Non-negative on success/Negative on failure
*
* Programmer: Mike McGreevy
* mcgreevy@hdfgroup.org
* June 18, 2008
*
*-------------------------------------------------------------------------

@ -15,7 +15,7 @@
*
* Created: H5B2dbg.c
* Feb 2 2005
* Quincey Koziol <koziol@ncsa.uiuc.edu>
* Quincey Koziol
*
* Purpose: Dump debugging information about a v2 B-tree.
*
@ -80,7 +80,6 @@
* Return: Non-negative on success/Negative on failure
*
* Programmer: Quincey Koziol
* koziol@ncsa.uiuc.edu
* Feb 2 2005
*
*-------------------------------------------------------------------------
@ -175,7 +174,6 @@ done:
* Return: Non-negative on success/Negative on failure
*
* Programmer: Quincey Koziol
* koziol@ncsa.uiuc.edu
* Feb 4 2005
*
*-------------------------------------------------------------------------
@ -287,7 +285,6 @@ done:
* Return: Non-negative on success/Negative on failure
*
* Programmer: Quincey Koziol
* koziol@ncsa.uiuc.edu
* Feb 7 2005
*
*-------------------------------------------------------------------------

@ -15,7 +15,7 @@
*
* Created: H5B2int.c
* Feb 27 2006
* Quincey Koziol <koziol@ncsa.uiuc.edu>
* Quincey Koziol
*
* Purpose: Internal routines for managing v2 B-trees.
*
@ -101,7 +101,6 @@ H5FL_SEQ_DEFINE(H5B2_node_info_t);
* Return: Non-negative on success/Negative on failure
*
* Programmer: Quincey Koziol
* koziol@ncsa.uiuc.edu
* Feb 2 2005
*
*-------------------------------------------------------------------------
@ -230,7 +229,6 @@ done:
* Return: Non-negative on success/Negative on failure
*
* Programmer: Quincey Koziol
* koziol@hdfgroup.org
* Oct 27 2009
*
*-------------------------------------------------------------------------
@ -276,7 +274,6 @@ done:
* Return: Non-negative on success/Negative on failure
*
* Programmer: Quincey Koziol
* koziol@ncsa.uiuc.edu
* Mar 21 2006
*
*-------------------------------------------------------------------------
@ -355,7 +352,6 @@ done:
* Return: Non-negative on success/Negative on failure
*
* Programmer: Quincey Koziol
* koziol@hdfgroup.org
* Oct 13 2009
*
*-------------------------------------------------------------------------
@ -391,7 +387,6 @@ done:
* Return: Non-negative on success/Negative on failure
*
* Programmer: Quincey Koziol
* koziol@hdfgroup.org
* Oct 13 2009
*
*-------------------------------------------------------------------------
@ -428,7 +423,6 @@ done:
* Return: SUCCEED (Can't fail)
*
* Programmer: Quincey Koziol
* koziol@hdfgroup.org
* Oct 27 2009
*
*-------------------------------------------------------------------------
@ -456,7 +450,6 @@ H5B2__hdr_fuse_incr(H5B2_hdr_t *hdr)
* Return: The file's reference count after the decrement. (Can't fail)
*
* Programmer: Quincey Koziol
* koziol@hdfgroup.org
* Oct 27 2009
*
*-------------------------------------------------------------------------
@ -485,7 +478,6 @@ H5B2__hdr_fuse_decr(H5B2_hdr_t *hdr)
* Return: Non-negative on success/Negative on failure
*
* Programmer: Quincey Koziol
* koziol@hdfgroup.org
* Oct 13 2009
*
*-------------------------------------------------------------------------
@ -517,7 +509,6 @@ done:
* Return: Non-NULL pointer to header on success/NULL on failure
*
* Programmer: Quincey Koziol
* koziol@hdfgroup.org
* Dec 18 2015
*
*-------------------------------------------------------------------------
@ -582,7 +573,6 @@ done:
* Return: Non-negative on success/Negative on failure
*
* Programmer: Quincey Koziol
* koziol@hdfgroup.org
* Dec 18 2015
*
*-------------------------------------------------------------------------
@ -614,7 +604,6 @@ done:
* Return: Non-negative on success/Negative on failure
*
* Programmer: Quincey Koziol
* koziol@ncsa.uiuc.edu
* Feb 2 2005
*
*-------------------------------------------------------------------------
@ -691,7 +680,6 @@ done:
* Return: Non-negative on success/Negative on failure
*
* Programmer: Quincey Koziol
* koziol@hdfgroup.org
* Oct 15 2009
*
*-------------------------------------------------------------------------

@ -15,7 +15,7 @@
*
* Created: H5B2int.c
* Feb 27 2006
* Quincey Koziol <koziol@ncsa.uiuc.edu>
* Quincey Koziol
*
* Purpose: Internal routines for managing v2 B-trees.
*
@ -97,7 +97,6 @@ H5FL_SEQ_EXTERN(H5B2_node_info_t);
* record to locate is greater than all records to search).
*
* Programmer: Quincey Koziol
* koziol@ncsa.uiuc.edu
* Feb 3 2005
*
*-------------------------------------------------------------------------
@ -141,7 +140,6 @@ done:
* Failure: Negative
*
* Programmer: Quincey Koziol
* koziol@hdfgroup.org
* Aug 28 2006
*
*-------------------------------------------------------------------------
@ -336,7 +334,6 @@ done:
* Failure: Negative
*
* Programmer: Quincey Koziol
* koziol@ncsa.uiuc.edu
* Feb 3 2005
*
*-------------------------------------------------------------------------
@ -414,7 +411,6 @@ done:
* Failure: Negative
*
* Programmer: Quincey Koziol
* koziol@ncsa.uiuc.edu
* Feb 9 2005
*
*-------------------------------------------------------------------------
@ -658,7 +654,6 @@ done:
* Failure: Negative
*
* Programmer: Quincey Koziol
* koziol@ncsa.uiuc.edu
* Feb 9 2005
*
*-------------------------------------------------------------------------
@ -1032,7 +1027,6 @@ done:
* Failure: Negative
*
* Programmer: Quincey Koziol
* koziol@ncsa.uiuc.edu
* Mar 4 2005
*
*-------------------------------------------------------------------------
@ -1195,7 +1189,6 @@ done:
* Failure: Negative
*
* Programmer: Quincey Koziol
* koziol@ncsa.uiuc.edu
* Mar 4 2005
*
*-------------------------------------------------------------------------
@ -1437,7 +1430,6 @@ done:
* Return: Non-negative on success/Negative on failure
*
* Programmer: Quincey Koziol
* koziol@hdfgroup.org
* Dec 23 2015
*
*-------------------------------------------------------------------------
@ -1497,7 +1489,6 @@ done:
* Return: Value from callback, non-negative on success, negative on error
*
* Programmer: Quincey Koziol
* koziol@ncsa.uiuc.edu
* Feb 11 2005
*
*-------------------------------------------------------------------------
@ -1612,7 +1603,6 @@ done:
* Return: Value from callback, non-negative on success, negative on error
*
* Programmer: Quincey Koziol
* koziol@ncsa.uiuc.edu
* Mar 9 2005
*
*-------------------------------------------------------------------------
@ -1779,7 +1769,6 @@ done:
* Return: SUCCEED/FAIL
*
* Programmer: Quincey Koziol
* koziol@lbl.gov
* Dec 1 2016
*
*-------------------------------------------------------------------------
@ -1877,7 +1866,6 @@ done:
* Return: SUCCEED/FAIL
*
* Programmer: Quincey Koziol
* koziol@lbl.gov
* Dec 1 2016
*
*-------------------------------------------------------------------------

@ -15,7 +15,7 @@
*
* Created: H5B2internal.c
* Dec 01 2016
* Quincey Koziol <koziol@lbl.gov>
* Quincey Koziol
*
* Purpose: Routines for managing v2 B-tree internal ndoes.
*
@ -87,7 +87,6 @@ H5FL_DEFINE(H5B2_internal_t);
* Return: Non-negative on success/Negative on failure
*
* Programmer: Quincey Koziol
* koziol@ncsa.uiuc.edu
* Feb 3 2005
*
*-------------------------------------------------------------------------
@ -183,7 +182,6 @@ done:
* Return: Pointer to internal node on success/NULL on failure
*
* Programmer: Quincey Koziol
* koziol@hdfgroup.org
* Aug 25 2006
*
*-------------------------------------------------------------------------
@ -277,7 +275,6 @@ done:
* Return: Non-negative on success, negative on failure.
*
* Programmer: Quincey Koziol
* koziol@ncsa.uiuc.edu
* Mar 9 2005
*
*-------------------------------------------------------------------------
@ -350,7 +347,6 @@ done:
* Return: Non-negative on success/Negative on failure
*
* Programmer: Quincey Koziol
* koziol@ncsa.uiuc.edu
* Mar 2 2005
*
*-------------------------------------------------------------------------
@ -513,7 +509,6 @@ done:
* Return: Non-negative on success/Negative on failure
*
* Programmer: Quincey Koziol
* koziol@hdfgroup.org
* Dec 24 2015
*
*-------------------------------------------------------------------------
@ -782,7 +777,6 @@ done:
* Return: Non-negative on success/Negative on failure
*
* Programmer: Quincey Koziol
* koziol@ncsa.uiuc.edu
* Mar 3 2005
*
*-------------------------------------------------------------------------
@ -1015,7 +1009,6 @@ done:
* Return: Non-negative on success/Negative on failure
*
* Programmer: Quincey Koziol
* koziol@hdfgroup.org
* Nov 14 2006
*
*-------------------------------------------------------------------------
@ -1300,7 +1293,6 @@ done:
* Return: Non-negative on success/Negative on failure
*
* Programmer: Quincey Koziol
* koziol@ncsa.uiuc.edu
* Feb 2 2005
*
*-------------------------------------------------------------------------
@ -1349,7 +1341,6 @@ done:
* Return: Non-negative on success, negative on failure
*
* Programmer: Quincey Koziol
* koziol@ncsa.uiuc.edu
* Feb 19 2005
*
*-------------------------------------------------------------------------
@ -1390,7 +1381,6 @@ H5B2__assert_internal(hsize_t parent_all_nrec, const H5B2_hdr_t H5_ATTR_NDEBUG_U
* Return: Non-negative on success, negative on failure
*
* Programmer: Quincey Koziol
* koziol@ncsa.uiuc.edu
* Feb 19 2005
*
*-------------------------------------------------------------------------

@ -15,7 +15,7 @@
*
* Created: H5B2leaf.c
* Dec 01 2016
* Quincey Koziol <koziol@lbl.gov>
* Quincey Koziol
*
* Purpose: Routines for managing v2 B-tree leaf ndoes.
*
@ -88,7 +88,6 @@ H5FL_DEFINE(H5B2_leaf_t);
* Return: Non-negative on success/Negative on failure
*
* Programmer: Quincey Koziol
* koziol@ncsa.uiuc.edu
* Feb 2 2005
*
*-------------------------------------------------------------------------
@ -174,7 +173,6 @@ done:
* Return: Pointer to leaf node on success/NULL on failure
*
* Programmer: Quincey Koziol
* koziol@hdfgroup.org
* May 5 2010
*
*-------------------------------------------------------------------------
@ -266,7 +264,6 @@ done:
* Return: Non-negative on success, negative on failure.
*
* Programmer: Quincey Koziol
* koziol@ncsa.uiuc.edu
* Mar 9 2005
*
*-------------------------------------------------------------------------
@ -340,7 +337,6 @@ done:
* Return: Non-negative on success/Negative on failure
*
* Programmer: Quincey Koziol
* koziol@ncsa.uiuc.edu
* Mar 3 2005
*
*-------------------------------------------------------------------------
@ -453,7 +449,6 @@ done:
* Return: Non-negative on success/Negative on failure
*
* Programmer: Quincey Koziol
* koziol@hdfgroup.org
* Dec 23 2015
*
*-------------------------------------------------------------------------
@ -608,7 +603,6 @@ done:
* Failure: Negative
*
* Programmer: Quincey Koziol
* koziol@ncsa.uiuc.edu
* Mar 4 2005
*
*-------------------------------------------------------------------------
@ -765,14 +759,14 @@ done:
* Return: Non-negative on success/Negative on failure
*
* Programmer: Quincey Koziol
* koziol@ncsa.uiuc.edu
* Mar 3 2005
*
*-------------------------------------------------------------------------
*/
herr_t
H5B2__remove_leaf(H5B2_hdr_t *hdr, H5B2_node_ptr_t *curr_node_ptr,
H5B2_nodepos_t curr_pos, void *parent, void *udata, H5B2_remove_t op, void *op_data)
H5B2_nodepos_t curr_pos, void *parent, void *udata, H5B2_remove_t op,
void *op_data)
{
H5B2_leaf_t *leaf; /* Pointer to leaf node */
haddr_t leaf_addr = HADDR_UNDEF; /* Leaf address on disk */
@ -874,7 +868,6 @@ done:
* Return: Non-negative on success/Negative on failure
*
* Programmer: Quincey Koziol
* koziol@hdfgroup.org
* Nov 14 2006
*
*-------------------------------------------------------------------------
@ -976,7 +969,6 @@ done:
* Return: Non-negative on success/Negative on failure
*
* Programmer: Quincey Koziol
* koziol@ncsa.uiuc.edu
* Feb 2 2005
*
*-------------------------------------------------------------------------
@ -1021,7 +1013,6 @@ done:
* Return: Non-negative on success, negative on failure
*
* Programmer: Quincey Koziol
* koziol@ncsa.uiuc.edu
* Feb 19 2005
*
*-------------------------------------------------------------------------
@ -1045,7 +1036,6 @@ H5B2__assert_leaf(const H5B2_hdr_t H5_ATTR_NDEBUG_UNUSED *hdr,
* Return: Non-negative on success, negative on failure
*
* Programmer: Quincey Koziol
* koziol@ncsa.uiuc.edu
* Feb 19 2005
*
*-------------------------------------------------------------------------

@ -11,7 +11,7 @@
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/*
* Programmer: Quincey Koziol <koziol@hdfgroup.org>
* Programmer: Quincey Koziol
* Saturday, September 12, 2015
*
* Purpose: This file contains declarations which define macros for the

@ -11,7 +11,7 @@
* help@hdfgroup.org. *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/* Programmer: Quincey Koziol <koziol@hdfgroup.org>
/* Programmer: Quincey Koziol
* Monday, March 6, 2006
*
* Purpose: v2 B-tree metadata statistics functions.

@ -11,7 +11,7 @@
* help@hdfgroup.org. *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/* Programmer: Quincey Koziol <koziol@ncsa.uiuc.edu>
/* Programmer: Quincey Koziol
* Thursday, February 3, 2005
*
* Purpose: v2 B-tree testing functions.

@ -15,7 +15,7 @@
*
* Created: H5Bcache.c
* Oct 31 2005
* Quincey Koziol <koziol@ncsa.uiuc.edu>
* Quincey Koziol
*
* Purpose: Implement B-tree metadata cache methods.
*
@ -98,7 +98,6 @@ const H5AC_class_t H5AC_BT[1] = {{
* Return: Non-negative on success/Negative on failure
*
* Programmer: Quincey Koziol
* koziol@hdfgroup.org
* May 18, 2010
*
*-------------------------------------------------------------------------
@ -135,7 +134,6 @@ H5B__cache_get_initial_load_size(void *_udata, size_t *image_len)
* Failure: NULL
*
* Programmer: Quincey Koziol
* koziol@hdfgroup.org
* Mar 24, 2008
*
*-------------------------------------------------------------------------
@ -241,7 +239,6 @@ done:
* Return: Non-negative on success/Negative on failure
*
* Programmer: Quincey Koziol
* koziol@hdfgroup.org
* May 20, 2010
*
*-------------------------------------------------------------------------
@ -277,7 +274,6 @@ H5B__cache_image_len(const void *_thing, size_t *image_len)
* Return: Non-negative on success/Negative on failure
*
* Programmer: Quincey Koziol
* koziol@hdfgroup.org
* Mar 24, 2008
*
*-------------------------------------------------------------------------
@ -363,7 +359,6 @@ done:
* Return: Non-negative on success/Negative on failure
*
* Programmer: Quincey Koziol
* koziol@hdfgroup.org
* Mar 26, 2008
*
*-------------------------------------------------------------------------

2391
src/H5C.c

File diff suppressed because it is too large Load Diff

@ -123,8 +123,6 @@ H5CS__get_stack(void)
* Programmer: Quincey Koziol
* Thursday, February 6, 2003
*
* Modifications:
*
*-------------------------------------------------------------------------
*/
herr_t
@ -214,8 +212,6 @@ H5CS_push(const char *func_name)
* Programmer: Quincey Koziol
* Thursday, February 6, 2003
*
* Modifications:
*
*-------------------------------------------------------------------------
*/
herr_t

@ -11,7 +11,7 @@
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/*
* Programmer: Quincey Koziol <koziol@lbl.gov>
* Programmer: Quincey Koziol
* Monday, February 19, 2018
*
* Purpose:

@ -28,16 +28,12 @@
#include "H5Cmodule.h" /* This source code file is part of the H5C module */
#define H5AC_FRIEND
/***********/
/* Headers */
/***********/
#include "H5private.h" /* Generic Functions */
#include "H5ACpkg.h" /* Metadata Cache */
#include "H5ACprivate.h" /* Metadata Cache */
#include "H5Cpkg.h" /* Cache */
#include "H5Eprivate.h" /* Error Handling */
@ -260,17 +256,24 @@ H5C_dump_cache_LRU(H5C_t *cache_ptr, const char *cache_name)
/*-------------------------------------------------------------------------
*
* 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
*
* Programmer: John Mainzer
* 11/15/14
*
* Changes: Updated function for the slist_enabled field in H5C_t.
* Recall that to minimize slist overhead, the slist is
* empty and not maintained if cache_ptr->slist_enabled is
* false.
* JRM -- 5/6/20
*
*-------------------------------------------------------------------------
*/
#ifndef NDEBUG
@ -288,11 +291,15 @@ H5C_dump_cache_skip_list(H5C_t * cache_ptr, char * calling_fcn)
HDassert(cache_ptr->magic == H5C__H5C_T_MAGIC);
HDassert(calling_fcn != NULL);
HDfprintf(stdout, "\n\nDumping metadata cache skip list from %s.\n", calling_fcn);
HDfprintf(stdout, "\n\nDumping metadata cache skip list from %s.\n",
calling_fcn);
HDfprintf(stdout, " slist %s.\n",
cache_ptr->slist_enabled ? "enabled" : "disabled");
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.
*/
@ -300,112 +307,21 @@ H5C_dump_cache_skip_list(H5C_t * cache_ptr, char * calling_fcn)
"Num: Addr: Len: Prot/Pind: Dirty: Type:\n");
i = 0;
node_ptr = H5SL_first(cache_ptr->slist_ptr);
if(node_ptr != NULL)
entry_ptr = (H5C_cache_entry_t *)H5SL_item(node_ptr);
else
entry_ptr = NULL;
while(entry_ptr != NULL) {
HDassert( entry_ptr->magic == H5C__H5C_CACHE_ENTRY_T_MAGIC );
HDfprintf(stdout,
"%s%d 0x%016" PRIxHADDR " %4zu %d/%d %d %s\n",
cache_ptr->prefix, i,
entry_ptr->addr,
entry_ptr->size,
(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",
(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)
entry_ptr = (H5C_cache_entry_t *)H5SL_item(node_ptr);
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 */
/*-------------------------------------------------------------------------
* Function: H5C_dump_coll_write_list
*
* Purpose: Debugging routine that prints a summary of the contents of
* the collective write skip list used by the metadata cache
* in the parallel case to maintain a list of entries to write
* collectively at a sync point.
*
* Return: Non-negative on success/Negative on failure
*
* Programmer: John Mainzer
* 4/1/17
*
*-------------------------------------------------------------------------
*/
#ifdef H5_HAVE_PARALLEL
#ifndef NDEBUG
herr_t
H5C_dump_coll_write_list(H5C_t * cache_ptr, char * calling_fcn)
{
herr_t ret_value = SUCCEED; /* Return value */
int i;
int list_len;
H5AC_aux_t * aux_ptr = NULL;
H5C_cache_entry_t * entry_ptr = NULL;
H5SL_node_t * node_ptr = NULL;
FUNC_ENTER_NOAPI_NOERR
HDassert(cache_ptr != NULL);
HDassert(cache_ptr->magic == H5C__H5C_T_MAGIC);
HDassert(cache_ptr->aux_ptr);
aux_ptr = (H5AC_aux_t *)cache_ptr->aux_ptr;
HDassert(aux_ptr->magic == H5AC__H5AC_AUX_T_MAGIC);
HDassert(calling_fcn != NULL);
list_len = (int)H5SL_count(cache_ptr->coll_write_list);
HDfprintf(stdout, "\n\nDumping MDC coll write list from %d:%s.\n",
aux_ptr->mpi_rank, calling_fcn);
HDfprintf(stdout, " slist len = %u.\n", cache_ptr->slist_len);
if ( list_len > 0 ) {
/* scan the collective write list generating the desired output */
HDfprintf(stdout,
"Num: Addr: Len: Prot/Pind: Dirty: Type:\n");
i = 0;
node_ptr = H5SL_first(cache_ptr->coll_write_list);
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);
HDassert( entry_ptr->magic == H5C__H5C_CACHE_ENTRY_T_MAGIC );
HDfprintf(stdout,
"%s%d 0x%016llx %4lld %d/%d %d %s\n",
@ -417,15 +333,21 @@ H5C_dump_coll_write_list(H5C_t * cache_ptr, char * calling_fcn)
(int)(entry_ptr->is_dirty),
entry_ptr->type->name);
HDfprintf(stdout, " node_ptr = %p, item = %p\n",
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++;
@ -436,9 +358,8 @@ H5C_dump_coll_write_list(H5C_t * cache_ptr, char * calling_fcn)
FUNC_LEAVE_NOAPI(ret_value)
} /* H5C_dump_coll_write_list() */
} /* H5C_dump_cache_skip_list() */
#endif /* NDEBUG */
#endif /* H5_HAVE_PARALLEL */
/*-------------------------------------------------------------------------
@ -1086,74 +1007,6 @@ H5C_stats__reset(H5C_t H5_ATTR_UNUSED * cache_ptr)
return;
} /* H5C_stats__reset() */
extern void
H5C__dump_entry(H5C_t *cache_ptr, const H5C_cache_entry_t *entry_ptr,
hbool_t dump_parents, const char *prefix, int indent);
static void
H5C__dump_parents(H5C_t *cache_ptr, const H5C_cache_entry_t *entry_ptr, const char *prefix, int indent)
{
unsigned u;
for(u = 0; u < entry_ptr->flush_dep_nparents; u++)
H5C__dump_entry(cache_ptr, entry_ptr->flush_dep_parent[u], TRUE, prefix, indent + 2);
}
typedef struct H5C__dump_child_ctx_t {
H5C_t *cache_ptr;
const H5C_cache_entry_t *parent;
hbool_t dump_parents;
const char *prefix;
int indent;
} H5C__dump_child_ctx_t;
static int
H5C__dump_children_cb(H5C_cache_entry_t *entry_ptr, void *_ctx)
{
H5C__dump_child_ctx_t *ctx = (H5C__dump_child_ctx_t *)_ctx;
if(entry_ptr->tag_info->tag != entry_ptr->addr) {
unsigned u;
HDassert(entry_ptr->flush_dep_nparents);
for(u = 0; u < entry_ptr->flush_dep_nparents; u++)
if(ctx->parent == entry_ptr->flush_dep_parent[u])
H5C__dump_entry(ctx->cache_ptr, entry_ptr, ctx->dump_parents, ctx->prefix, ctx->indent + 2);
} /* end if */
return(H5_ITER_CONT);
} /* end H5C__dump_children_cb() */
static void
H5C__dump_children(H5C_t *cache_ptr, const H5C_cache_entry_t *entry_ptr,
hbool_t dump_parents, const char *prefix, int indent)
{
H5C__dump_child_ctx_t ctx;
HDassert(entry_ptr->tag_info);
ctx.cache_ptr = cache_ptr;
ctx.parent = entry_ptr;
ctx.dump_parents = dump_parents;
ctx.prefix = prefix;
ctx.indent = indent;
H5C__iter_tagged_entries(cache_ptr, entry_ptr->tag_info->tag, FALSE, H5C__dump_children_cb, &ctx);
} /* end H5C__dump_children() */
void
H5C__dump_entry(H5C_t *cache_ptr, const H5C_cache_entry_t *entry_ptr,
hbool_t dump_parents, const char *prefix, int indent)
{
HDassert(cache_ptr);
HDassert(entry_ptr);
HDfprintf(stderr, "%*s%s: entry_ptr = (%" PRIuHADDR ", '%s', %" PRIuHADDR ", %s, %u, %u/%u)\n", indent, "", prefix, entry_ptr->addr, entry_ptr->type->name, entry_ptr->tag_info ? entry_ptr->tag_info->tag : HADDR_UNDEF, (entry_ptr->is_dirty) ? "TRUE" : "FALSE", entry_ptr->flush_dep_nparents, entry_ptr->flush_dep_nchildren, entry_ptr->flush_dep_ndirty_children);
if(dump_parents && entry_ptr->flush_dep_nparents)
H5C__dump_parents(cache_ptr, entry_ptr, "Parent", indent);
if(entry_ptr->flush_dep_nchildren)
H5C__dump_children(cache_ptr, entry_ptr, FALSE, "Child", indent);
} /* end H5C__dump_entry() */
/*-------------------------------------------------------------------------
* Function: H5C_flush_dependency_exists()

@ -431,36 +431,40 @@ 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.
* 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.
* 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 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.
* 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.
* 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
*
* Changes: Updated sanity checks for possibility that the slist
* is disabled.
* JRM -- 5/17/20
*
*-------------------------------------------------------------------------
*/
herr_t
@ -468,11 +472,11 @@ H5C__deserialize_prefetched_entry(H5F_t *f, H5C_t *cache_ptr,
H5C_cache_entry_t **entry_ptr_ptr, const H5C_class_t *type,
haddr_t addr, void *udata)
{
hbool_t dirty = FALSE; /* Flag indicating whether thing was
hbool_t dirty = FALSE; /* Flag indicating whether thing was
* dirtied during deserialize
*/
size_t len; /* Size of image in file */
void * thing = NULL; /* Pointer to thing loaded */
void * thing = NULL; /* Pointer to thing loaded */
H5C_cache_entry_t * pf_entry_ptr; /* pointer to the prefetched entry */
/* supplied in *entry_ptr_ptr. */
H5C_cache_entry_t * ds_entry_ptr; /* Alias for thing loaded, as cache
@ -484,8 +488,8 @@ H5C__deserialize_prefetched_entry(H5F_t *f, H5C_t *cache_ptr,
/* the prefetched entry, or NULL if */
/* that array does not exist. */
unsigned flush_flags = (H5C__FLUSH_INVALIDATE_FLAG |
H5C__FLUSH_CLEAR_ONLY_FLAG);
int i;
H5C__FLUSH_CLEAR_ONLY_FLAG);
int i;
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_PACKAGE
@ -604,73 +608,73 @@ H5C__deserialize_prefetched_entry(H5F_t *f, H5C_t *cache_ptr,
HDassert( ( dirty == FALSE ) || ( type->id == 5 || type->id == 6) );
ds_entry_ptr->magic = H5C__H5C_CACHE_ENTRY_T_MAGIC;
ds_entry_ptr->cache_ptr = f->shared->cache;
ds_entry_ptr->addr = addr;
ds_entry_ptr->size = len;
ds_entry_ptr->magic = H5C__H5C_CACHE_ENTRY_T_MAGIC;
ds_entry_ptr->cache_ptr = f->shared->cache;
ds_entry_ptr->addr = addr;
ds_entry_ptr->size = len;
HDassert(ds_entry_ptr->size < H5C_MAX_ENTRY_SIZE);
ds_entry_ptr->image_ptr = pf_entry_ptr->image_ptr;
ds_entry_ptr->image_up_to_date = !dirty;
ds_entry_ptr->type = type;
ds_entry_ptr->is_dirty = dirty | pf_entry_ptr->is_dirty;
ds_entry_ptr->dirtied = FALSE;
ds_entry_ptr->is_protected = FALSE;
ds_entry_ptr->is_read_only = FALSE;
ds_entry_ptr->ro_ref_count = 0;
ds_entry_ptr->is_pinned = FALSE;
ds_entry_ptr->in_slist = FALSE;
ds_entry_ptr->flush_marker = FALSE;
ds_entry_ptr->image_ptr = pf_entry_ptr->image_ptr;
ds_entry_ptr->image_up_to_date = !dirty;
ds_entry_ptr->type = type;
ds_entry_ptr->is_dirty = dirty | pf_entry_ptr->is_dirty;
ds_entry_ptr->dirtied = FALSE;
ds_entry_ptr->is_protected = FALSE;
ds_entry_ptr->is_read_only = FALSE;
ds_entry_ptr->ro_ref_count = 0;
ds_entry_ptr->is_pinned = FALSE;
ds_entry_ptr->in_slist = FALSE;
ds_entry_ptr->flush_marker = FALSE;
#ifdef H5_HAVE_PARALLEL
ds_entry_ptr->clear_on_unprotect = FALSE;
ds_entry_ptr->flush_immediately = FALSE;
ds_entry_ptr->coll_access = FALSE;
ds_entry_ptr->clear_on_unprotect = FALSE;
ds_entry_ptr->flush_immediately = FALSE;
ds_entry_ptr->coll_access = FALSE;
#endif /* H5_HAVE_PARALLEL */
ds_entry_ptr->flush_in_progress = FALSE;
ds_entry_ptr->destroy_in_progress = FALSE;
ds_entry_ptr->flush_in_progress = FALSE;
ds_entry_ptr->destroy_in_progress = FALSE;
ds_entry_ptr->ring = pf_entry_ptr->ring;
ds_entry_ptr->ring = pf_entry_ptr->ring;
/* Initialize flush dependency height fields */
ds_entry_ptr->flush_dep_parent = NULL;
ds_entry_ptr->flush_dep_nparents = 0;
ds_entry_ptr->flush_dep_parent_nalloc = 0;
ds_entry_ptr->flush_dep_nchildren = 0;
ds_entry_ptr->flush_dep_ndirty_children = 0;
ds_entry_ptr->flush_dep_nunser_children = 0;
ds_entry_ptr->flush_dep_parent = NULL;
ds_entry_ptr->flush_dep_nparents = 0;
ds_entry_ptr->flush_dep_parent_nalloc = 0;
ds_entry_ptr->flush_dep_nchildren = 0;
ds_entry_ptr->flush_dep_ndirty_children = 0;
ds_entry_ptr->flush_dep_nunser_children = 0;
/* Initialize fields supporting the hash table: */
ds_entry_ptr->ht_next = NULL;
ds_entry_ptr->ht_prev = NULL;
ds_entry_ptr->il_next = NULL;
ds_entry_ptr->il_prev = NULL;
ds_entry_ptr->ht_next = NULL;
ds_entry_ptr->ht_prev = NULL;
ds_entry_ptr->il_next = NULL;
ds_entry_ptr->il_prev = NULL;
/* Initialize fields supporting replacement policies: */
ds_entry_ptr->next = NULL;
ds_entry_ptr->prev = NULL;
ds_entry_ptr->next = NULL;
ds_entry_ptr->prev = NULL;
#if H5C_MAINTAIN_CLEAN_AND_DIRTY_LRU_LISTS
ds_entry_ptr->aux_next = NULL;
ds_entry_ptr->aux_prev = NULL;
ds_entry_ptr->aux_next = NULL;
ds_entry_ptr->aux_prev = NULL;
#endif /* H5C_MAINTAIN_CLEAN_AND_DIRTY_LRU_LISTS */
#ifdef H5_HAVE_PARALLEL
pf_entry_ptr->coll_next = NULL;
pf_entry_ptr->coll_prev = NULL;
pf_entry_ptr->coll_next = NULL;
pf_entry_ptr->coll_prev = NULL;
#endif /* H5_HAVE_PARALLEL */
/* Initialize cache image related fields */
ds_entry_ptr->include_in_image = FALSE;
ds_entry_ptr->lru_rank = 0;
ds_entry_ptr->image_dirty = FALSE;
ds_entry_ptr->fd_parent_count = 0;
ds_entry_ptr->fd_parent_addrs = NULL;
ds_entry_ptr->fd_child_count = pf_entry_ptr->fd_child_count;
ds_entry_ptr->fd_dirty_child_count = 0;
ds_entry_ptr->image_fd_height = 0;
ds_entry_ptr->prefetched = FALSE;
ds_entry_ptr->prefetch_type_id = 0;
ds_entry_ptr->age = 0;
ds_entry_ptr->prefetched_dirty = pf_entry_ptr->prefetched_dirty;
ds_entry_ptr->include_in_image = FALSE;
ds_entry_ptr->lru_rank = 0;
ds_entry_ptr->image_dirty = FALSE;
ds_entry_ptr->fd_parent_count = 0;
ds_entry_ptr->fd_parent_addrs = NULL;
ds_entry_ptr->fd_child_count = pf_entry_ptr->fd_child_count;
ds_entry_ptr->fd_dirty_child_count = 0;
ds_entry_ptr->image_fd_height = 0;
ds_entry_ptr->prefetched = FALSE;
ds_entry_ptr->prefetch_type_id = 0;
ds_entry_ptr->age = 0;
ds_entry_ptr->prefetched_dirty = pf_entry_ptr->prefetched_dirty;
#ifndef NDEBUG /* debugging field */
ds_entry_ptr->serialization_count = 0;
ds_entry_ptr->serialization_count = 0;
#endif /* NDEBUG */
H5C__RESET_CACHE_ENTRY_STATS(ds_entry_ptr);
@ -694,15 +698,20 @@ H5C__deserialize_prefetched_entry(H5F_t *f, H5C_t *cache_ptr,
*
* 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);
if ( pf_entry_ptr->is_dirty ) {
HDassert(((cache_ptr->slist_enabled) && (pf_entry_ptr->in_slist)) || \
((!cache_ptr->slist_enabled) && (!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)
@ -862,54 +871,6 @@ H5C__free_image_entries_array(H5C_t * cache_ptr)
FUNC_LEAVE_NOAPI(SUCCEED)
} /* H5C__free_image_entries_array() */
/*-------------------------------------------------------------------------
* Function: H5C_force_cache_image_load()
*
* Purpose: On rare occasions, it is necessary to run
* H5MF_tidy_self_referential_fsm_hack() prior to the first
* metadata cache access. This is a problem as if there is a
* cache image at the end of the file, that routine will
* discard it.
*
* We solve this issue by calling this function, which will
* load the cache image and then call
* H5MF_tidy_self_referential_fsm_hack() to discard it.
*
* Return: SUCCEED on success, and FAIL on failure.
*
* Programmer: John Mainzer
* 1/11/17
*
*-------------------------------------------------------------------------
*/
herr_t
H5C_force_cache_image_load(H5F_t *f)
{
H5C_t *cache_ptr;
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_NOAPI(FAIL)
/* 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->load_image);
/* Load the cache image, if requested */
if(cache_ptr->load_image) {
cache_ptr->load_image = FALSE;
if(H5C__load_cache_image(f) < 0)
HGOTO_ERROR(H5E_CACHE, H5E_CANTLOAD, FAIL, "can't load cache image")
} /* end if */
done:
FUNC_LEAVE_NOAPI(ret_value)
} /* H5C_force_cache_image_load() */
/*-------------------------------------------------------------------------
* Function: H5C_get_cache_image_config

@ -11,7 +11,7 @@
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/*
* Programmer: Quincey Koziol <koziol@hdfgroup.org>
* Programmer: Quincey Koziol
* Saturday, September 12, 2015
*
* Purpose: This file contains declarations which define macros for the

@ -18,7 +18,7 @@
* Quincey Koziol
*
* Purpose: Functions in this file implement support for parallel I/O for
* generic cache code.
* generic cache code.
*
*-------------------------------------------------------------------------
*/
@ -28,7 +28,7 @@
/****************/
#include "H5Cmodule.h" /* This source code file is part of the H5C module */
#define H5F_FRIEND /*suppress error about including H5Fpkg */
#define H5F_FRIEND /*suppress error about including H5Fpkg */
/***********/
@ -114,9 +114,9 @@ static herr_t H5C__flush_candidates_in_ring(H5F_t *f, H5C_ring_t ring,
*
* 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.
@ -136,10 +136,10 @@ static herr_t H5C__flush_candidates_in_ring(H5F_t *f, H5C_ring_t ring,
* 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
@ -163,6 +163,10 @@ static herr_t H5C__flush_candidates_in_ring(H5F_t *f, H5C_ring_t ring,
* Programmer: John Mainzer
* 3/17/10
*
* Changes: Updated sanity checks to allow for the possibility that
* the slist is disabled.
* JRM -- 8/3/20
*
*-------------------------------------------------------------------------
*/
herr_t
@ -185,12 +189,15 @@ H5C_apply_candidate_list(H5F_t * f,
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 */
unsigned u; /* Local index variable */
herr_t ret_value = SUCCEED; /* Return value */
@ -200,7 +207,8 @@ H5C_apply_candidate_list(H5F_t * f,
HDassert(cache_ptr != NULL);
HDassert(cache_ptr->magic == H5C__H5C_T_MAGIC);
HDassert(num_candidates > 0);
HDassert(num_candidates <= cache_ptr->slist_len);
HDassert( ( ! cache_ptr->slist_enabled ) ||
( num_candidates <= cache_ptr->slist_len ));
HDassert(candidates_list_ptr != NULL);
HDassert(0 <= mpi_rank);
HDassert(mpi_rank < mpi_size);
@ -410,6 +418,7 @@ done:
/*-------------------------------------------------------------------------
*
* Function: H5C_construct_candidate_list__clean_cache
*
* Purpose: Construct the list of entries that should be flushed to
@ -425,6 +434,16 @@ done:
* Programmer: John Mainzer
* 3/17/10
*
* Changes: With the slist optimization, the slist is not maintained
* unless a flush is in progress. Thus we can not longer use
* cache_ptr->slist_size to determine the total size of
* the entries we must insert in the candidate list.
*
* To address this, we now use cache_ptr->dirty_index_size
* instead.
*
* JRM -- 7/27/20
*
*-------------------------------------------------------------------------
*/
herr_t
@ -438,60 +457,82 @@ H5C_construct_candidate_list__clean_cache(H5C_t * cache_ptr)
HDassert( cache_ptr != NULL );
HDassert( cache_ptr->magic == H5C__H5C_T_MAGIC );
/* As a sanity check, set space needed to the size of the skip list.
* This should be the sum total of the sizes of all the dirty entries
* in the metadata cache.
/* As a sanity check, set space needed to the dirty_index_size. This
* should be the sum total of the sizes of all the dirty entries
* in the metadata cache. Note that if the slist is enabled,
* cache_ptr->slist_size should equal cache_ptr->dirty_index_size.
*/
space_needed = cache_ptr->slist_size;
space_needed = cache_ptr->dirty_index_size;
HDassert( ( ! cache_ptr->slist_enabled ) ||
( space_needed == cache_ptr->slist_size ) );
/* Recall that while we shouldn't have any protected entries at this
* point, it is possible that some dirty entries may reside on the
* pinned list at this point.
*/
HDassert( cache_ptr->slist_size <=
HDassert( cache_ptr->dirty_index_size <=
(cache_ptr->dLRU_list_size + cache_ptr->pel_size) );
HDassert( cache_ptr->slist_len <=
(cache_ptr->dLRU_list_len + cache_ptr->pel_len) );
HDassert( ( ! cache_ptr->slist_enabled ) ||
( 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;
haddr_t nominated_addr;
haddr_t nominated_addr;
HDassert( cache_ptr->slist_len > 0 );
HDassert( ( ! cache_ptr->slist_enabled ) ||
( cache_ptr->slist_len > 0 ) );
/* Scan the dirty LRU list from tail forward and nominate sufficient
* 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) &&
(entry_ptr != NULL)) {
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 );
HDassert( entry_ptr->is_dirty );
HDassert( entry_ptr->in_slist );
HDassert( ( ! cache_ptr->slist_enabled ) ||
( 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")
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
* protected entry list as well -- scan it too if necessary
*/
entry_ptr = cache_ptr->pel_head_ptr;
while((nominated_entries_size < space_needed) &&
(nominated_entries_count < cache_ptr->slist_len) &&
(entry_ptr != NULL)) {
while ( ( nominated_entries_size < space_needed ) &&
( ( ! cache_ptr->slist_enabled ) ||
( 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 );
@ -499,22 +540,31 @@ 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")
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( ( ! cache_ptr->slist_enabled ) ||
( 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() */
@ -534,6 +584,12 @@ done:
* Programmer: John Mainzer
* 3/17/10
*
* Changes: With the slist optimization, the slist is not maintained
* unless a flush is in progress. Updated sanity checks to
* reflect this.
*
* JRM -- 7/27/20
*
*-------------------------------------------------------------------------
*/
herr_t
@ -551,54 +607,77 @@ 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)
if ( ( (cache_ptr->max_cache_size - cache_ptr->index_size) +
cache_ptr->cLRU_list_size) >= cache_ptr->min_clean_size ) {
space_needed = 0;
else
} else {
space_needed = cache_ptr->min_clean_size -
((cache_ptr->max_cache_size - cache_ptr->index_size) +
cache_ptr->cLRU_list_size);
}
} /* end if */
else {
if(cache_ptr->min_clean_size <= cache_ptr->cLRU_list_size)
if(cache_ptr->min_clean_size <= cache_ptr->cLRU_list_size) {
space_needed = 0;
else
} else {
space_needed = cache_ptr->min_clean_size -
cache_ptr->cLRU_list_size;
}
} /* 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;
HDassert( cache_ptr->slist_len > 0 );
HDassert( ( ! cache_ptr->slist_enabled ) ||
( cache_ptr->slist_len > 0 ) );
/* Scan the dirty LRU list from tail forward and nominate sufficient
* 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) &&
(entry_ptr != NULL) &&
(!entry_ptr->flush_me_last)) {
haddr_t nominated_addr;
while ( ( nominated_entries_size < space_needed ) &&
( ( ! cache_ptr->slist_enabled ) ||
( nominated_entries_count < cache_ptr->slist_len ) ) &&
( entry_ptr != NULL ) &&
( ! entry_ptr->flush_me_last ) ) {
haddr_t nominated_addr;
HDassert( ! (entry_ptr->is_protected) );
HDassert( ! (entry_ptr->is_read_only) );
HDassert( entry_ptr->ro_ref_count == 0 );
HDassert( entry_ptr->is_dirty );
HDassert( entry_ptr->in_slist );
HDassert( ( ! cache_ptr->slist_enabled ) ||
( 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")
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( ( ! cache_ptr->slist_enabled ) ||
( nominated_entries_count <= cache_ptr->slist_len ) );
HDassert( nominated_entries_size <= cache_ptr->dirty_index_size );
HDassert( nominated_entries_size >= space_needed );
} /* end if */
@ -769,7 +848,7 @@ H5C_mark_entries_as_clean(H5F_t * f,
* 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;
@ -873,9 +952,9 @@ done:
herr_t
H5C_clear_coll_entries(H5C_t *cache_ptr, hbool_t partial)
{
uint32_t clear_cnt;
H5C_cache_entry_t * entry_ptr = NULL;
herr_t ret_value = SUCCEED;
uint32_t clear_cnt;
H5C_cache_entry_t * entry_ptr = NULL;
herr_t ret_value = SUCCEED;
FUNC_ENTER_NOAPI_NOINIT
@ -921,6 +1000,7 @@ H5C__collective_write(H5F_t *f)
{
H5AC_t *cache_ptr;
H5FD_mpio_xfer_t orig_xfer_mode = H5FD_MPIO_COLLECTIVE;
void *base_buf;
int count;
int *length_array = NULL;
MPI_Aint *buf_array = NULL;
@ -930,6 +1010,8 @@ H5C__collective_write(H5F_t *f)
MPI_Datatype ftype;
hbool_t ftype_created = FALSE;
int mpi_code;
char unused = 0; /* Unused, except for non-NULL pointer value */
size_t buf_count;
herr_t ret_value = SUCCEED;
FUNC_ENTER_STATIC
@ -944,20 +1026,17 @@ H5C__collective_write(H5F_t *f)
if(H5CX_get_io_xfer_mode(&orig_xfer_mode) < 0)
HGOTO_ERROR(H5E_CACHE, H5E_CANTGET, FAIL, "can't get MPI-I/O transfer mode")
/* Set transfer mode */
if(H5CX_set_io_xfer_mode(H5FD_MPIO_COLLECTIVE) < 0)
HGOTO_ERROR(H5E_CACHE, H5E_CANTSET, FAIL, "can't set MPI-I/O transfer mode")
/* Get number of entries in collective write list */
count = (int)H5SL_count(cache_ptr->coll_write_list);
if(count > 0) {
H5FD_mpio_xfer_t xfer_mode = H5FD_MPIO_COLLECTIVE;
H5SL_node_t *node;
H5C_cache_entry_t *entry_ptr;
void *base_buf;
int i;
/* Set new transfer mode */
if(H5CX_set_io_xfer_mode(xfer_mode) < 0)
HGOTO_ERROR(H5E_CACHE, H5E_CANTSET, FAIL, "can't set MPI-I/O transfer mode")
/* Allocate arrays */
if(NULL == (length_array = (int *)H5MM_malloc((size_t)count * sizeof(int))) )
HGOTO_ERROR(H5E_CACHE, H5E_CANTALLOC, FAIL, "memory allocation failed for collective write table length array")
@ -981,7 +1060,6 @@ H5C__collective_write(H5F_t *f)
node = H5SL_next(node);
i = 1;
while(node) {
if(NULL == (entry_ptr = (H5C_cache_entry_t *)H5SL_item(node)))
HGOTO_ERROR(H5E_CACHE, H5E_NOTFOUND, FAIL, "can't retrieve skip list item")
@ -998,68 +1076,40 @@ H5C__collective_write(H5F_t *f)
/* Create memory MPI type */
if(MPI_SUCCESS != (mpi_code = MPI_Type_create_hindexed(count, length_array, buf_array, MPI_BYTE, &btype)))
HMPI_GOTO_ERROR(FAIL, "MPI_Type_create_hindexed failed", mpi_code)
btype_created = TRUE;
if(MPI_SUCCESS != (mpi_code = MPI_Type_commit(&btype)))
HMPI_GOTO_ERROR(FAIL, "MPI_Type_commit failed", mpi_code)
/* Create file MPI type */
if(MPI_SUCCESS != (mpi_code = MPI_Type_create_hindexed(count, length_array, offset_array, MPI_BYTE, &ftype)))
HMPI_GOTO_ERROR(FAIL, "MPI_Type_create_hindexed failed", mpi_code)
ftype_created = TRUE;
if(MPI_SUCCESS != (mpi_code = MPI_Type_commit(&ftype)))
HMPI_GOTO_ERROR(FAIL, "MPI_Type_commit failed", mpi_code)
/* Pass buf type, file type to the file driver */
if(H5CX_set_mpi_coll_datatypes(btype, ftype) < 0)
HGOTO_ERROR(H5E_CACHE, H5E_CANTSET, FAIL, "can't set MPI-I/O properties")
/* Write data */
if(H5F_block_write(f, H5FD_MEM_DEFAULT, (haddr_t)0, (size_t)1, base_buf) < 0)
HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "unable to write entries collectively")
/* MPI count to write */
buf_count = 1;
} /* end if */
else {
MPI_Status mpi_stat;
MPI_File *mpi_fh_p;
MPI_File mpi_fh;
MPI_Info *info_p;
MPI_Info info;
/* Pass trivial buf type, file type to the file driver */
btype = MPI_BYTE;
ftype = MPI_BYTE;
/* This should be rewritten to call H5F_block_write, with the correct
* buffer and file datatypes (null ones). -QAK, 2018/02/21
*/
if(H5F_get_mpi_handle(f, (MPI_File **)&mpi_fh_p) < 0)
HGOTO_ERROR(H5E_CACHE, H5E_CANTGET, FAIL, "can't get mpi file handle")
/* Set non-NULL pointer for I/O operation */
base_buf = &unused;
mpi_fh = *(MPI_File*)mpi_fh_p;
if(H5F_get_mpi_info(f, &info_p) < 0)
HGOTO_ERROR(H5E_FILE, H5E_CANTGET, FAIL, "can't get mpi file info")
info = *info_p;
/* just to match up with the 1st MPI_File_set_view from
* H5FD_mpio_write()
*/
if(MPI_SUCCESS != (mpi_code = MPI_File_set_view(mpi_fh, (MPI_Offset)0, MPI_BYTE, MPI_BYTE, "native", info)))
HMPI_GOTO_ERROR(FAIL, "MPI_File_set_view failed", mpi_code)
/* just to match up with MPI_File_write_at_all from H5FD_mpio_write() */
HDmemset(&mpi_stat, 0, sizeof(MPI_Status));
if(MPI_SUCCESS != (mpi_code = MPI_File_write_at_all(mpi_fh, (MPI_Offset)0, NULL, 0, MPI_BYTE, &mpi_stat)))
HMPI_GOTO_ERROR(FAIL, "MPI_File_write_at_all failed", mpi_code)
/* just to match up with the 2nd MPI_File_set_view (reset) in
* H5FD_mpio_write()
*/
if(MPI_SUCCESS != (mpi_code = MPI_File_set_view(mpi_fh, (MPI_Offset)0, MPI_BYTE, MPI_BYTE, "native", info)))
HMPI_GOTO_ERROR(FAIL, "MPI_File_set_view failed", mpi_code)
/* MPI count to write */
buf_count = 0;
} /* end else */
/* Pass buf type, file type to the file driver */
if(H5CX_set_mpi_coll_datatypes(btype, ftype) < 0)
HGOTO_ERROR(H5E_CACHE, H5E_CANTSET, FAIL, "can't set MPI-I/O properties")
/* Write data */
if(H5F_block_write(f, H5FD_MEM_DEFAULT, (haddr_t)0, buf_count, base_buf) < 0)
HGOTO_ERROR(H5E_CACHE, H5E_WRITEERROR, FAIL, "unable to write entries collectively")
done:
/* Free arrays */
length_array = (int *)H5MM_xfree(length_array);
@ -1124,17 +1174,17 @@ H5C__flush_candidate_entries(H5F_t *f, unsigned entries_to_flush[H5C_RING_NTYPES
unsigned entries_to_clear[H5C_RING_NTYPES])
{
#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_ring_t ring;
H5C_t * cache_ptr;
herr_t ret_value = SUCCEED;
herr_t ret_value = SUCCEED;
FUNC_ENTER_STATIC

@ -47,13 +47,22 @@
/* 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
/* Set to TRUE to enable the slist optimization. If this field is TRUE,
* the slist is disabled whenever a flush is not in progress.
*/
#define H5C__SLIST_OPT_ENABLED TRUE
/****************************************************************************
*
* We maintain doubly linked lists of instances of H5C_cache_entry_t for a
@ -1568,49 +1577,82 @@ if ( ( (cache_ptr)->index_size != \
* Added code to maintain the cache_ptr->slist_ring_len
* and cache_ptr->slist_ring_size arrays.
*
* JRM -- 4/29/20
* Reworked macro to support the slist_enabled field
* of H5C_t. If slist_enabled == TRUE, the macro
* functions as before. Otherwise, the macro is a no-op,
* and the slist must be empty.
*
*-------------------------------------------------------------------------
*/
/* NOTE: The H5C__INSERT_ENTRY_IN_SLIST() macro is set up so that
*
* H5C_DO_SANITY_CHECKS
*
* and
*
* H5C_DO_SLIST_SANITY_CHECKS
*
* can be selected independantly. This is easy to miss as the
* two #defines are easy to confuse.
*/
#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) \
{ \
HDassert( (cache_ptr) ); \
HDassert( (cache_ptr)->magic == H5C__H5C_T_MAGIC ); \
HDassert( (entry_ptr) ); \
HDassert( (entry_ptr)->size > 0 ); \
HDassert( H5F_addr_defined((entry_ptr)->addr) ); \
HDassert( !((entry_ptr)->in_slist) ); \
HDassert( !ENTRY_IN_SLIST((cache_ptr), (entry_ptr)) ); \
HDassert( (entry_ptr)->ring > H5C_RING_UNDEFINED ); \
HDassert( (entry_ptr)->ring < H5C_RING_NTYPES ); \
HDassert( (cache_ptr)->slist_ring_len[(entry_ptr)->ring] <= \
(cache_ptr)->slist_len ); \
HDassert( (cache_ptr)->slist_ring_size[(entry_ptr)->ring] <= \
(cache_ptr)->slist_size ); \
\
if(H5SL_insert((cache_ptr)->slist_ptr, entry_ptr, &(entry_ptr)->addr) < 0) \
HGOTO_ERROR(H5E_CACHE, H5E_BADVALUE, (fail_val), "can't insert entry in skip list") \
if ( (cache_ptr)->slist_enabled ) { \
\
(entry_ptr)->in_slist = TRUE; \
(cache_ptr)->slist_changed = TRUE; \
(cache_ptr)->slist_len++; \
(cache_ptr)->slist_size += (entry_ptr)->size; \
((cache_ptr)->slist_ring_len[(entry_ptr)->ring])++; \
((cache_ptr)->slist_ring_size[(entry_ptr)->ring]) += (entry_ptr)->size; \
(cache_ptr)->slist_len_increase++; \
(cache_ptr)->slist_size_increase += (int64_t)((entry_ptr)->size); \
HDassert( (entry_ptr) ); \
HDassert( (entry_ptr)->size > 0 ); \
HDassert( H5F_addr_defined((entry_ptr)->addr) ); \
HDassert( !((entry_ptr)->in_slist) ); \
HDassert( ! ENTRY_IN_SLIST((cache_ptr), (entry_ptr)) ); \
HDassert( (entry_ptr)->ring > H5C_RING_UNDEFINED ); \
HDassert( (entry_ptr)->ring < H5C_RING_NTYPES ); \
HDassert( (cache_ptr)->slist_ring_len[(entry_ptr)->ring] <= \
(cache_ptr)->slist_len ); \
HDassert( (cache_ptr)->slist_ring_size[(entry_ptr)->ring] <= \
(cache_ptr)->slist_size ); \
\
HDassert( (cache_ptr)->slist_len > 0 ); \
HDassert( (cache_ptr)->slist_size > 0 ); \
if ( H5SL_insert((cache_ptr)->slist_ptr, entry_ptr, \
&((entry_ptr)->addr)) < 0) \
HGOTO_ERROR(H5E_CACHE, H5E_BADVALUE, (fail_val), \
"can't insert entry in skip list") \
\
(entry_ptr)->in_slist = TRUE; \
(cache_ptr)->slist_changed = TRUE; \
(cache_ptr)->slist_len++; \
(cache_ptr)->slist_size += (entry_ptr)->size; \
((cache_ptr)->slist_ring_len[(entry_ptr)->ring])++; \
((cache_ptr)->slist_ring_size[(entry_ptr)->ring]) += (entry_ptr)->size;\
(cache_ptr)->slist_len_increase++; \
(cache_ptr)->slist_size_increase += (int64_t)((entry_ptr)->size); \
\
HDassert( (cache_ptr)->slist_len > 0 ); \
HDassert( (cache_ptr)->slist_size > 0 ); \
\
} else { /* slist disabled */ \
\
HDassert( (cache_ptr)->slist_len == 0 ); \
HDassert( (cache_ptr)->slist_size == 0 ); \
} \
} /* H5C__INSERT_ENTRY_IN_SLIST */
#else /* H5C_DO_SANITY_CHECKS */
@ -1619,31 +1661,42 @@ if ( ( (cache_ptr)->index_size != \
{ \
HDassert( (cache_ptr) ); \
HDassert( (cache_ptr)->magic == H5C__H5C_T_MAGIC ); \
HDassert( (entry_ptr) ); \
HDassert( (entry_ptr)->size > 0 ); \
HDassert( H5F_addr_defined((entry_ptr)->addr) ); \
HDassert( !((entry_ptr)->in_slist) ); \
HDassert( !ENTRY_IN_SLIST((cache_ptr), (entry_ptr)) ); \
HDassert( (entry_ptr)->ring > H5C_RING_UNDEFINED ); \
HDassert( (entry_ptr)->ring < H5C_RING_NTYPES ); \
HDassert( (cache_ptr)->slist_ring_len[(entry_ptr)->ring] <= \
(cache_ptr)->slist_len ); \
HDassert( (cache_ptr)->slist_ring_size[(entry_ptr)->ring] <= \
(cache_ptr)->slist_size ); \
\
if(H5SL_insert((cache_ptr)->slist_ptr, entry_ptr, &(entry_ptr)->addr) < 0) \
HGOTO_ERROR(H5E_CACHE, H5E_BADVALUE, (fail_val), "can't insert entry in skip list") \
if ( (cache_ptr)->slist_enabled ) { \
\
(entry_ptr)->in_slist = TRUE; \
(cache_ptr)->slist_changed = TRUE; \
(cache_ptr)->slist_len++; \
(cache_ptr)->slist_size += (entry_ptr)->size; \
((cache_ptr)->slist_ring_len[(entry_ptr)->ring])++; \
((cache_ptr)->slist_ring_size[(entry_ptr)->ring]) += (entry_ptr)->size; \
HDassert( (entry_ptr) ); \
HDassert( (entry_ptr)->size > 0 ); \
HDassert( ! ENTRY_IN_SLIST((cache_ptr), (entry_ptr)) ); \
HDassert( H5F_addr_defined((entry_ptr)->addr) ); \
HDassert( !((entry_ptr)->in_slist) ); \
HDassert( (entry_ptr)->ring > H5C_RING_UNDEFINED ); \
HDassert( (entry_ptr)->ring < H5C_RING_NTYPES ); \
HDassert( (cache_ptr)->slist_ring_len[(entry_ptr)->ring] <= \
(cache_ptr)->slist_len ); \
HDassert( (cache_ptr)->slist_ring_size[(entry_ptr)->ring] <= \
(cache_ptr)->slist_size ); \
HDassert( (cache_ptr)->slist_ptr ); \
\
HDassert( (cache_ptr)->slist_len > 0 ); \
HDassert( (cache_ptr)->slist_size > 0 ); \
if ( H5SL_insert((cache_ptr)->slist_ptr, entry_ptr, \
&((entry_ptr)->addr)) < 0) \
HGOTO_ERROR(H5E_CACHE, H5E_BADVALUE, (fail_val), \
"can't insert entry in skip list") \
\
(entry_ptr)->in_slist = TRUE; \
(cache_ptr)->slist_changed = TRUE; \
(cache_ptr)->slist_len++; \
(cache_ptr)->slist_size += (entry_ptr)->size; \
((cache_ptr)->slist_ring_len[(entry_ptr)->ring])++; \
((cache_ptr)->slist_ring_size[(entry_ptr)->ring]) += (entry_ptr)->size;\
\
HDassert( (cache_ptr)->slist_len > 0 ); \
HDassert( (cache_ptr)->slist_size > 0 ); \
\
} else { /* slist disabled */ \
\
HDassert( (cache_ptr)->slist_len == 0 ); \
HDassert( (cache_ptr)->slist_size == 0 ); \
} \
} /* H5C__INSERT_ENTRY_IN_SLIST */
#endif /* H5C_DO_SANITY_CHECKS */
@ -1654,87 +1707,136 @@ if ( ( (cache_ptr)->index_size != \
* Function: H5C__REMOVE_ENTRY_FROM_SLIST
*
* Purpose: Remove the specified instance of H5C_cache_entry_t from the
* index skip list in the specified instance of H5C_t. Update
* the associated length and size fields.
* index skip list in the specified instance of H5C_t. Update
* the associated length and size fields.
*
* Return: N/A
*
* Programmer: John Mainzer, 5/10/04
*
* Modifications:
*
* JRM -- 7/21/04
* Updated function for the addition of the hash table.
*
* JRM - 7/27/04
* Converted from the function H5C_remove_entry_from_tree()
* to the macro H5C__REMOVE_ENTRY_FROM_TREE in the hopes of
* wringing a little more performance out of the cache.
*
* QAK -- 11/27/04
* Switched over to using skip list routines.
*
* JRM -- 3/28/07
* Updated sanity checks for the new is_read_only and
* ro_ref_count fields in H5C_cache_entry_t.
*
* JRM -- 12/13/14
* Added code to set cache_ptr->slist_changed to TRUE
* when an entry is removed from the slist.
*
* JRM -- 4/29/20
* Reworked macro to support the slist_enabled field
* of H5C_t. If slist_enabled == TRUE, the macro
* functions as before. Otherwise, the macro is a no-op,
* and the slist must be empty.
*
*-------------------------------------------------------------------------
*/
#if H5C_DO_SANITY_CHECKS
#define H5C__REMOVE_ENTRY_FROM_SLIST(cache_ptr, entry_ptr, during_flush) \
{ \
HDassert( (cache_ptr) ); \
HDassert( (cache_ptr)->magic == H5C__H5C_T_MAGIC ); \
HDassert( (entry_ptr) ); \
HDassert( !((entry_ptr)->is_read_only) ); \
HDassert( ((entry_ptr)->ro_ref_count) == 0 ); \
HDassert( (entry_ptr)->size > 0 ); \
HDassert( (entry_ptr)->in_slist ); \
HDassert( (cache_ptr)->slist_ptr ); \
HDassert( (entry_ptr)->ring > H5C_RING_UNDEFINED ); \
HDassert( (entry_ptr)->ring < H5C_RING_NTYPES ); \
HDassert( (cache_ptr)->slist_ring_len[(entry_ptr)->ring] <= \
(cache_ptr)->slist_len ); \
HDassert( (cache_ptr)->slist_ring_size[(entry_ptr)->ring] <= \
(cache_ptr)->slist_size ); \
\
if ( H5SL_remove((cache_ptr)->slist_ptr, &(entry_ptr)->addr) \
!= (entry_ptr) ) \
HGOTO_ERROR(H5E_CACHE, H5E_BADVALUE, FAIL, "can't delete entry from skip list") \
\
HDassert( (cache_ptr)->slist_len > 0 ); \
if(!(during_flush)) \
(cache_ptr)->slist_changed = TRUE; \
(cache_ptr)->slist_len--; \
HDassert( (cache_ptr)->slist_size >= (entry_ptr)->size ); \
(cache_ptr)->slist_size -= (entry_ptr)->size; \
((cache_ptr)->slist_ring_len[(entry_ptr)->ring])--; \
HDassert( (cache_ptr)->slist_ring_size[(entry_ptr->ring)] >= \
(entry_ptr)->size ); \
((cache_ptr)->slist_ring_size[(entry_ptr)->ring]) -= (entry_ptr)->size; \
(cache_ptr)->slist_len_increase--; \
(cache_ptr)->slist_size_increase -= (int64_t)((entry_ptr)->size); \
(entry_ptr)->in_slist = FALSE; \
#define H5C__REMOVE_ENTRY_FROM_SLIST(cache_ptr, entry_ptr, during_flush) \
{ \
HDassert( (cache_ptr) ); \
HDassert( (cache_ptr)->magic == H5C__H5C_T_MAGIC ); \
\
if ( (cache_ptr)->slist_enabled ) { \
\
HDassert( (entry_ptr) ); \
HDassert( !((entry_ptr)->is_read_only) ); \
HDassert( ((entry_ptr)->ro_ref_count) == 0 ); \
HDassert( (entry_ptr)->size > 0 ); \
HDassert( (entry_ptr)->in_slist ); \
HDassert( (cache_ptr)->slist_ptr ); \
HDassert( (entry_ptr)->ring > H5C_RING_UNDEFINED ); \
HDassert( (entry_ptr)->ring < H5C_RING_NTYPES ); \
HDassert( (cache_ptr)->slist_ring_len[(entry_ptr)->ring] <= \
(cache_ptr)->slist_len ); \
HDassert( (cache_ptr)->slist_ring_size[(entry_ptr)->ring] <= \
(cache_ptr)->slist_size ); \
HDassert( (cache_ptr)->slist_size >= (entry_ptr)->size ); \
\
if ( H5SL_remove((cache_ptr)->slist_ptr, &(entry_ptr)->addr) \
!= (entry_ptr) ) \
HGOTO_ERROR(H5E_CACHE, H5E_BADVALUE, FAIL, \
"can't delete entry from skip list") \
\
HDassert( (cache_ptr)->slist_len > 0 ); \
if(!(during_flush)) \
(cache_ptr)->slist_changed = TRUE; \
(cache_ptr)->slist_len--; \
HDassert( (cache_ptr)->slist_size >= (entry_ptr)->size ); \
(cache_ptr)->slist_size -= (entry_ptr)->size; \
((cache_ptr)->slist_ring_len[(entry_ptr)->ring])--; \
HDassert( (cache_ptr)->slist_ring_size[(entry_ptr->ring)] >= \
(entry_ptr)->size ); \
((cache_ptr)->slist_ring_size[(entry_ptr)->ring]) -= (entry_ptr)->size;\
(cache_ptr)->slist_len_increase--; \
(cache_ptr)->slist_size_increase -= (int64_t)((entry_ptr)->size); \
(entry_ptr)->in_slist = FALSE; \
\
} else { /* slist disabled */ \
\
HDassert( (cache_ptr)->slist_len == 0 ); \
HDassert( (cache_ptr)->slist_size == 0 ); \
} \
} /* H5C__REMOVE_ENTRY_FROM_SLIST */
#else /* H5C_DO_SANITY_CHECKS */
#define H5C__REMOVE_ENTRY_FROM_SLIST(cache_ptr, entry_ptr, during_flush) \
{ \
HDassert( (cache_ptr) ); \
HDassert( (cache_ptr)->magic == H5C__H5C_T_MAGIC ); \
HDassert( (entry_ptr) ); \
HDassert( !((entry_ptr)->is_read_only) ); \
HDassert( ((entry_ptr)->ro_ref_count) == 0 ); \
HDassert( (entry_ptr)->in_slist ); \
HDassert( (cache_ptr)->slist_ptr ); \
HDassert( (entry_ptr)->ring > H5C_RING_UNDEFINED ); \
HDassert( (entry_ptr)->ring < H5C_RING_NTYPES ); \
HDassert( (cache_ptr)->slist_ring_len[(entry_ptr)->ring] <= \
(cache_ptr)->slist_len ); \
HDassert( (cache_ptr)->slist_ring_size[(entry_ptr)->ring] <= \
(cache_ptr)->slist_size ); \
\
if ( H5SL_remove((cache_ptr)->slist_ptr, &(entry_ptr)->addr) \
!= (entry_ptr) ) \
HGOTO_ERROR(H5E_CACHE, H5E_BADVALUE, FAIL, "can't delete entry from skip list") \
\
HDassert( (cache_ptr)->slist_len > 0 ); \
if(!(during_flush)) \
(cache_ptr)->slist_changed = TRUE; \
(cache_ptr)->slist_len--; \
HDassert( (cache_ptr)->slist_size >= (entry_ptr)->size ); \
(cache_ptr)->slist_size -= (entry_ptr)->size; \
((cache_ptr)->slist_ring_len[(entry_ptr)->ring])--; \
HDassert( (cache_ptr)->slist_ring_size[(entry_ptr->ring)] >= \
(entry_ptr)->size ); \
((cache_ptr)->slist_ring_size[(entry_ptr)->ring]) -= (entry_ptr)->size; \
(entry_ptr)->in_slist = FALSE; \
#define H5C__REMOVE_ENTRY_FROM_SLIST(cache_ptr, entry_ptr, during_flush) \
{ \
HDassert( (cache_ptr) ); \
HDassert( (cache_ptr)->magic == H5C__H5C_T_MAGIC ); \
\
if ( (cache_ptr)->slist_enabled ) { \
\
HDassert( (entry_ptr) ); \
HDassert( !((entry_ptr)->is_read_only) ); \
HDassert( ((entry_ptr)->ro_ref_count) == 0 ); \
HDassert( (entry_ptr)->in_slist ); \
HDassert( (cache_ptr)->slist_ptr ); \
HDassert( (entry_ptr)->ring > H5C_RING_UNDEFINED ); \
HDassert( (entry_ptr)->ring < H5C_RING_NTYPES ); \
HDassert( (cache_ptr)->slist_ring_len[(entry_ptr)->ring] <= \
(cache_ptr)->slist_len ); \
HDassert( (cache_ptr)->slist_ring_size[(entry_ptr)->ring] <= \
(cache_ptr)->slist_size ); \
\
if ( H5SL_remove((cache_ptr)->slist_ptr, &(entry_ptr)->addr) \
!= (entry_ptr) ) \
HGOTO_ERROR(H5E_CACHE, H5E_BADVALUE, FAIL, \
"can't delete entry from skip list") \
\
HDassert( (cache_ptr)->slist_len > 0 ); \
if(!(during_flush)) \
(cache_ptr)->slist_changed = TRUE; \
(cache_ptr)->slist_len--; \
HDassert( (cache_ptr)->slist_size >= (entry_ptr)->size ); \
(cache_ptr)->slist_size -= (entry_ptr)->size; \
((cache_ptr)->slist_ring_len[(entry_ptr)->ring])--; \
HDassert( (cache_ptr)->slist_ring_size[(entry_ptr->ring)] >= \
(entry_ptr)->size ); \
((cache_ptr)->slist_ring_size[(entry_ptr)->ring]) -= (entry_ptr)->size;\
(entry_ptr)->in_slist = FALSE; \
\
} else { /* slist disabled */ \
\
HDassert( (cache_ptr)->slist_len == 0 ); \
HDassert( (cache_ptr)->slist_size == 0 ); \
} \
} /* H5C__REMOVE_ENTRY_FROM_SLIST */
#endif /* H5C_DO_SANITY_CHECKS */
@ -1743,7 +1845,7 @@ if ( ( (cache_ptr)->index_size != \
* Function: H5C__UPDATE_SLIST_FOR_SIZE_CHANGE
*
* Purpose: Update cache_ptr->slist_size for a change in the size of
* and entry in the slist.
* and entry in the slist.
*
* Return: N/A
*
@ -1751,24 +1853,30 @@ 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.
*
* JRM -- 4/29/20
* Reworked macro to support the slist_enabled field
* of H5C_t. If slist_enabled == TRUE, the macro
* functions as before. Otherwise, the macro is a no-op,
* and the slist must be empty.
*
*-------------------------------------------------------------------------
*/
@ -1779,32 +1887,43 @@ if ( ( (cache_ptr)->index_size != \
{ \
HDassert( (cache_ptr) ); \
HDassert( (cache_ptr)->magic == H5C__H5C_T_MAGIC ); \
HDassert( (old_size) > 0 ); \
HDassert( (new_size) > 0 ); \
HDassert( (old_size) <= (cache_ptr)->slist_size ); \
HDassert( (cache_ptr)->slist_len > 0 ); \
HDassert( ((cache_ptr)->slist_len > 1) || \
( (cache_ptr)->slist_size == (old_size) ) ); \
HDassert( (entry_ptr)->ring > H5C_RING_UNDEFINED ); \
HDassert( (entry_ptr)->ring < H5C_RING_NTYPES ); \
HDassert( (cache_ptr)->slist_ring_len[(entry_ptr)->ring] <= \
(cache_ptr)->slist_len ); \
HDassert( (cache_ptr)->slist_ring_size[(entry_ptr)->ring] <= \
(cache_ptr)->slist_size ); \
\
(cache_ptr)->slist_size -= (old_size); \
(cache_ptr)->slist_size += (new_size); \
if ( (cache_ptr)->slist_enabled ) { \
\
HDassert( (cache_ptr)->slist_ring_size[(entry_ptr->ring)] >=(old_size) ); \
((cache_ptr)->slist_ring_size[(entry_ptr)->ring]) -= (old_size); \
((cache_ptr)->slist_ring_size[(entry_ptr)->ring]) += (new_size); \
HDassert( (old_size) > 0 ); \
HDassert( (new_size) > 0 ); \
HDassert( (old_size) <= (cache_ptr)->slist_size ); \
HDassert( (cache_ptr)->slist_len > 0 ); \
HDassert( ((cache_ptr)->slist_len > 1) || \
( (cache_ptr)->slist_size == (old_size) ) ); \
HDassert( (entry_ptr)->ring > H5C_RING_UNDEFINED ); \
HDassert( (entry_ptr)->ring < H5C_RING_NTYPES ); \
HDassert( (cache_ptr)->slist_ring_len[(entry_ptr)->ring] <= \
(cache_ptr)->slist_len ); \
HDassert( (cache_ptr)->slist_ring_size[(entry_ptr)->ring] <= \
(cache_ptr)->slist_size ); \
\
(cache_ptr)->slist_size_increase -= (int64_t)(old_size); \
(cache_ptr)->slist_size_increase += (int64_t)(new_size); \
(cache_ptr)->slist_size -= (old_size); \
(cache_ptr)->slist_size += (new_size); \
\
HDassert( (new_size) <= (cache_ptr)->slist_size ); \
HDassert( ( (cache_ptr)->slist_len > 1 ) || \
( (cache_ptr)->slist_size == (new_size) ) ); \
HDassert( (cache_ptr)->slist_ring_size[(entry_ptr->ring)] \
>= (old_size) ); \
\
((cache_ptr)->slist_ring_size[(entry_ptr)->ring]) -= (old_size); \
((cache_ptr)->slist_ring_size[(entry_ptr)->ring]) += (new_size); \
\
(cache_ptr)->slist_size_increase -= (int64_t)(old_size); \
(cache_ptr)->slist_size_increase += (int64_t)(new_size); \
\
HDassert( (new_size) <= (cache_ptr)->slist_size ); \
HDassert( ( (cache_ptr)->slist_len > 1 ) || \
( (cache_ptr)->slist_size == (new_size) ) ); \
\
} else { /* slist disabled */ \
\
HDassert( (cache_ptr)->slist_len == 0 ); \
HDassert( (cache_ptr)->slist_size == 0 ); \
} \
} /* H5C__UPDATE_SLIST_FOR_SIZE_CHANGE */
#else /* H5C_DO_SANITY_CHECKS */
@ -1813,29 +1932,39 @@ if ( ( (cache_ptr)->index_size != \
{ \
HDassert( (cache_ptr) ); \
HDassert( (cache_ptr)->magic == H5C__H5C_T_MAGIC ); \
HDassert( (old_size) > 0 ); \
HDassert( (new_size) > 0 ); \
HDassert( (old_size) <= (cache_ptr)->slist_size ); \
HDassert( (cache_ptr)->slist_len > 0 ); \
HDassert( ((cache_ptr)->slist_len > 1) || \
( (cache_ptr)->slist_size == (old_size) ) ); \
HDassert( (entry_ptr)->ring > H5C_RING_UNDEFINED ); \
HDassert( (entry_ptr)->ring < H5C_RING_NTYPES ); \
HDassert( (cache_ptr)->slist_ring_len[(entry_ptr)->ring] <= \
(cache_ptr)->slist_len ); \
HDassert( (cache_ptr)->slist_ring_size[(entry_ptr)->ring] <= \
(cache_ptr)->slist_size ); \
\
(cache_ptr)->slist_size -= (old_size); \
(cache_ptr)->slist_size += (new_size); \
if ( (cache_ptr)->slist_enabled ) { \
\
HDassert( (cache_ptr)->slist_ring_size[(entry_ptr->ring)] >=(old_size) ); \
((cache_ptr)->slist_ring_size[(entry_ptr)->ring]) -= (old_size); \
((cache_ptr)->slist_ring_size[(entry_ptr)->ring]) += (new_size); \
HDassert( (old_size) > 0 ); \
HDassert( (new_size) > 0 ); \
HDassert( (old_size) <= (cache_ptr)->slist_size ); \
HDassert( (cache_ptr)->slist_len > 0 ); \
HDassert( ((cache_ptr)->slist_len > 1) || \
( (cache_ptr)->slist_size == (old_size) ) ); \
HDassert( (entry_ptr)->ring > H5C_RING_UNDEFINED ); \
HDassert( (entry_ptr)->ring < H5C_RING_NTYPES ); \
HDassert( (cache_ptr)->slist_ring_len[(entry_ptr)->ring] <= \
(cache_ptr)->slist_len ); \
HDassert( (cache_ptr)->slist_ring_size[(entry_ptr)->ring] <= \
(cache_ptr)->slist_size ); \
\
HDassert( (new_size) <= (cache_ptr)->slist_size ); \
HDassert( ( (cache_ptr)->slist_len > 1 ) || \
( (cache_ptr)->slist_size == (new_size) ) ); \
(cache_ptr)->slist_size -= (old_size); \
(cache_ptr)->slist_size += (new_size); \
\
HDassert( (cache_ptr)->slist_ring_size[(entry_ptr->ring)] >= \
(old_size) ); \
((cache_ptr)->slist_ring_size[(entry_ptr)->ring]) -= (old_size); \
((cache_ptr)->slist_ring_size[(entry_ptr)->ring]) += (new_size); \
\
HDassert( (new_size) <= (cache_ptr)->slist_size ); \
HDassert( ( (cache_ptr)->slist_len > 1 ) || \
( (cache_ptr)->slist_size == (new_size) ) ); \
\
} else { /* slist disabled */ \
\
HDassert( (cache_ptr)->slist_len == 0 ); \
HDassert( (cache_ptr)->slist_size == 0 ); \
} \
} /* H5C__UPDATE_SLIST_FOR_SIZE_CHANGE */
#endif /* H5C_DO_SANITY_CHECKS */
@ -3723,10 +3852,11 @@ typedef struct H5C_tag_info_t {
* one.
*
* entry_watched_for_removal: Pointer to an instance of H5C_cache_entry_t
* which contains the 'next' entry for an iteration. Removing
* which contains the 'next' entry for an iteration. Removing
* this entry must trigger a rescan of the iteration, so each
* entry removed from the cache is compared against this pointer
* and the pointer is reset to NULL if the watched entry is removed.
* and the pointer is reset to NULL if the watched entry is
* removed.
* (This functions similarly to a "dead man's switch")
*
*
@ -3740,6 +3870,36 @@ typedef struct H5C_tag_info_t {
* are flushed. (this has been changed -- dirty entries are now removed from
* the skip list as they are flushed. JRM - 10/25/05)
*
* Update 4/21/20:
*
* Profiling indicates that the cost of maintaining the skip list is
* significant. As it is only used on flush and close, maintaining it
* only when needed is an obvious optimization.
*
* To do this, we add a flag to control maintenanace of the skip list.
* This flag is initially set to FALSE, which disables all operations
* on the skip list.
*
* At the beginning of either flush or close, we scan the index list,
* insert all dirtly entries in the skip list, and enable operations
* on skip list by setting above control flag to true.
*
* At the end of a complete flush, we verify that the skip list is empty,
* and set the control flag back to false, so as to avoid skip list
* maintenance overhead until the next flush or close.
*
* In the case of a partial flush (i.e. flush marked entries), we remove
* all remaining entries from the skip list, and then set the control flag
* back to false -- again avoiding skip list maintenance overhead until
* the next flush or close.
*
* slist_enabled: Boolean flag used to control operation of the skip
* list. If this filed is FALSE, operations on the
* slist are no-ops, and the slist must be empty. If
* it is TRUE, operations on the slist proceed as usual,
* and all dirty entries in the metadata cache must be
* listed in the slist.
*
* slist_changed: Boolean flag used to indicate whether the contents of
* the slist has changed since the last time this flag was
* reset. This is used in the cache flush code to detect
@ -4649,6 +4809,7 @@ typedef struct H5C_tag_info_t {
* NDEBUG is not #defined.
*
****************************************************************************/
struct H5C_t {
uint32_t magic;
hbool_t flush_in_progress;
@ -4664,7 +4825,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];
@ -4685,6 +4846,7 @@ struct H5C_t {
H5C_cache_entry_t * entry_watched_for_removal;
/* Fields for maintaining list of in-order entries, for flushing */
hbool_t slist_enabled;
hbool_t slist_changed;
uint32_t slist_len;
size_t slist_size;
@ -4882,7 +5044,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);
@ -4911,8 +5074,6 @@ H5_DLL herr_t H5C__mark_flush_dep_unserialized(H5C_cache_entry_t * entry_ptr);
H5_DLL herr_t H5C__make_space_in_cache(H5F_t * f, size_t space_needed,
hbool_t write_permitted);
H5_DLL herr_t H5C__flush_marked_entries(H5F_t * f);
H5_DLL herr_t H5C__generate_image(H5F_t *f, H5C_t *cache_ptr,
H5C_cache_entry_t *entry_ptr);
H5_DLL herr_t H5C__serialize_cache(H5F_t *f);
H5_DLL herr_t H5C__iter_tagged_entries(H5C_t *cache, haddr_t tag, hbool_t match_global,
H5C_tag_iter_cb_t cb, void *cb_ctx);

@ -20,8 +20,6 @@
* Purpose: Constants and typedefs available to the rest of the
* library.
*
* Modifications:
*
*-------------------------------------------------------------------------
*/
@ -2243,7 +2241,6 @@ H5_DLL herr_t H5C_expunge_entry(H5F_t *f, const H5C_class_t *type, haddr_t addr,
unsigned flags);
H5_DLL herr_t H5C_flush_cache(H5F_t *f, unsigned flags);
H5_DLL herr_t H5C_flush_tagged_entries(H5F_t *f, haddr_t tag);
H5_DLL herr_t H5C_force_cache_image_load(H5F_t * f);
H5_DLL herr_t H5C_evict_tagged_entries(H5F_t *f, haddr_t tag, hbool_t match_global);
H5_DLL herr_t H5C_expunge_tag_type_metadata(H5F_t *f, haddr_t tag, int type_id, unsigned flags);
H5_DLL herr_t H5C_get_tag(const void *thing, /*OUT*/ haddr_t *tag);
@ -2288,7 +2285,10 @@ H5_DLL herr_t H5C_resize_entry(void *thing, size_t new_size);
H5_DLL herr_t H5C_set_cache_auto_resize_config(H5C_t *cache_ptr, H5C_auto_size_ctl_t *config_ptr);
H5_DLL herr_t H5C_set_cache_image_config(const H5F_t *f, H5C_t *cache_ptr,
H5C_cache_image_ctl_t *config_ptr);
H5_DLL herr_t H5C_set_evictions_enabled(H5C_t *cache_ptr, hbool_t evictions_enabled);
H5_DLL herr_t H5C_set_evictions_enabled(H5C_t *cache_ptr,
hbool_t evictions_enabled);
H5_DLL herr_t H5C_set_slist_enabled(H5C_t *cache_ptr, hbool_t slist_enabled,
hbool_t clear_slist);
H5_DLL herr_t H5C_set_prefix(H5C_t *cache_ptr, char *prefix);
H5_DLL herr_t H5C_stats(H5C_t *cache_ptr, const char *cache_name,
hbool_t display_detailed_stats);
@ -2336,12 +2336,9 @@ H5_DLL herr_t H5C_dump_cache_LRU(H5C_t *cache_ptr, const char *cache_name);
H5_DLL hbool_t H5C_get_serialization_in_progress(const H5C_t *cache_ptr);
H5_DLL hbool_t H5C_cache_is_clean(const H5C_t *cache_ptr, H5C_ring_t inner_ring);
H5_DLL herr_t H5C_dump_cache_skip_list(H5C_t *cache_ptr, char *calling_fcn);
#ifdef H5_HAVE_PARALLEL
H5_DLL herr_t H5C_dump_coll_write_list(H5C_t * cache_ptr, char * calling_fcn);
#endif /* H5_HAVE_PARALLEL */
H5_DLL herr_t H5C_get_entry_ptr_from_addr(H5C_t *cache_ptr, haddr_t addr,
void **entry_ptr_ptr);
H5_DLL herr_t H5C_flush_dependency_exists(H5C_t *cache_ptr, haddr_t parent_addr,
H5_DLL herr_t H5C_flush_dependency_exists(H5C_t *cache_ptr, haddr_t parent_addr,
haddr_t child_addr, hbool_t *fd_exists_ptr);
H5_DLL herr_t H5C_verify_entry_type(H5C_t *cache_ptr, haddr_t addr,
const H5C_class_t *expected_type, hbool_t *in_cache_ptr,

@ -19,8 +19,6 @@
*
* Purpose: Public include file for cache functions.
*
* Modifications:
*
*-------------------------------------------------------------------------
*/
#ifndef _H5Cpublic_H

@ -11,7 +11,7 @@
* help@hdfgroup.org. *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/* Programmer: Robb Matzke <matzke@llnl.gov>
/* Programmer: Robb Matzke
* Wednesday, October 8, 1997
*
* Purpose: v1 B-tree indexed (chunked) I/O functions. The chunks are
@ -620,8 +620,7 @@ done:
*
* Return: Non-negative on success/Negative on failure
*
* Programmer: Robb Matzke
* Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
* March 28, 2002
*
*-------------------------------------------------------------------------

@ -112,7 +112,7 @@ static herr_t H5D__bt2_found_cb(const void *nrecord, void *op_data);
*/
static herr_t H5D__bt2_remove_cb(const void *nrecord, void *_udata);
/* Callback for H5B2_modify() which is called in H5D__bt2_idx_insert() */
/* Callback for H5B2_update() which is called in H5D__bt2_idx_insert() */
static herr_t H5D__bt2_mod_cb(void *_record, void *_op_data, hbool_t *changed);
/* Chunked layout indexing callbacks for v2 B-tree indexing */
@ -837,7 +837,7 @@ H5D__bt2_idx_is_space_alloc(const H5O_storage_chunk_t *storage)
* Function: H5D__bt2_mod_cb
*
* Purpose: Modify record for dataset chunk when it is found in a v2 B-tree.
* This is the callback for H5B2_modify() which is called in
* This is the callback for H5B2_update() which is called in
* H5D__bt2_idx_insert().
*
* Return: Success: non-negative
@ -1266,13 +1266,6 @@ done:
*
* Programmer: Vailin Choi; June 2010
*
* Modifications:
* Vailin Choi; March 2011
* Initialize size of an unfiltered chunk.
* This is a fix for for the assertion failure in:
* [src/H5FSsection.c:968: H5FS_sect_link_size: Assertion `bin < sinfo->nbins' failed.]
* which is uncovered by test_unlink_chunked_dataset() in test/unlink.c
*
*-------------------------------------------------------------------------
*/
static herr_t

@ -11,7 +11,7 @@
* help@hdfgroup.org. *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/* Programmer: Quincey Koziol <koziol@hdfgroup.org>
/* Programmer: Quincey Koziol
* Thursday, April 24, 2008
*
* Purpose: Abstract indexed (chunked) I/O functions. The logical
@ -278,7 +278,7 @@ H5D__nonexistent_readvv(const H5D_io_info_t *io_info,
size_t chunk_max_nseq, size_t *chunk_curr_seq, size_t chunk_len_arr[], hsize_t chunk_offset_arr[],
size_t mem_max_nseq, size_t *mem_curr_seq, size_t mem_len_arr[], hsize_t mem_offset_arr[]);
/* format convert cb */
/* Format convert cb */
static int H5D__chunk_format_convert_cb(const H5D_chunk_rec_t *chunk_rec, void *_udata);
/* Helper routines */
@ -300,9 +300,7 @@ static herr_t H5D__create_chunk_file_map_all(H5D_chunk_map_t *fm,
const H5D_io_info_t *io_info);
static herr_t H5D__create_chunk_file_map_hyper(H5D_chunk_map_t *fm,
const H5D_io_info_t *io_info);
static herr_t H5D__create_chunk_mem_map_1d(const H5D_chunk_map_t *fm);
static herr_t H5D__create_chunk_mem_map_hyper(const H5D_chunk_map_t *fm);
static herr_t H5D__chunk_file_cb(void *elem, const H5T_t *type, unsigned ndims,
const hsize_t *coords, void *fm);
@ -327,8 +325,8 @@ static herr_t H5D__chunk_collective_fill(const H5D_t *dset,
static int H5D__chunk_cmp_addr(const void *addr1, const void *addr2);
#endif /* H5_HAVE_PARALLEL */
static int
H5D__chunk_dump_index_cb(const H5D_chunk_rec_t *chunk_rec, void *_udata);
/* Debugging helper routine callback */
static int H5D__chunk_dump_index_cb(const H5D_chunk_rec_t *chunk_rec, void *_udata);
/*********************/
/* Package Variables */
@ -999,7 +997,7 @@ H5D__chunk_init(H5F_t *f, const H5D_t * const dset, hid_t dapl_id)
rdcc->scaled_dims[u] = (dset->shared->curr_dims[u] + dset->shared->layout.u.chunk.dim[u] - 1) /
dset->shared->layout.u.chunk.dim[u];
if( !(scaled_power2up = H5VM_power2up(rdcc->scaled_dims[u])) )
if(!(scaled_power2up = H5VM_power2up(rdcc->scaled_dims[u])))
HGOTO_ERROR(H5E_DATASET, H5E_CANTGET, FAIL, "unable to get the next power of 2")
/* Inital 'power2up' values for scaled dimensions */
@ -2821,12 +2819,12 @@ H5D__chunk_flush(H5D_t *dset)
/* Loop over all entries in the chunk cache */
for(ent = rdcc->head; ent; ent = next) {
next = ent->next;
next = ent->next;
if(H5D__chunk_flush_entry(dset, ent, FALSE) < 0)
nerrors++;
} /* end for */
if(nerrors)
HGOTO_ERROR(H5E_DATASET, H5E_CANTFLUSH, FAIL, "unable to flush one or more raw data chunks")
HGOTO_ERROR(H5E_DATASET, H5E_CANTFLUSH, FAIL, "unable to flush one or more raw data chunks")
done:
FUNC_LEAVE_NOAPI(ret_value)
@ -2970,7 +2968,7 @@ H5D_chunk_idx_reset(H5O_storage_chunk_t *storage, hbool_t reset_addr)
/* Reset index structures */
if((storage->ops->reset)(storage, reset_addr) < 0)
HGOTO_ERROR(H5E_DATASET, H5E_CANTFREE, FAIL, "unable to reset chunk index info")
HGOTO_ERROR(H5E_DATASET, H5E_CANTFREE, FAIL, "unable to reset chunk index info")
done:
FUNC_LEAVE_NOAPI(ret_value)
@ -2992,7 +2990,7 @@ done:
static herr_t
H5D__chunk_cinfo_cache_reset(H5D_chunk_cached_t *last)
{
FUNC_ENTER_PACKAGE_NOERR
FUNC_ENTER_STATIC_NOERR
/* Sanity check */
HDassert(last);
@ -3615,14 +3613,14 @@ H5D__chunk_cache_evict(const H5D_t *dset, H5D_rdcc_ent_t *ent, hbool_t flush)
static herr_t
H5D__chunk_cache_prune(const H5D_t *dset, size_t size)
{
const H5D_rdcc_t *rdcc = &(dset->shared->cache.chunk);
size_t total = rdcc->nbytes_max;
const int nmeth = 2; /*number of methods */
int w[1]; /*weighting as an interval */
H5D_rdcc_ent_t *p[2], *cur; /*list pointers */
H5D_rdcc_ent_t *n[2]; /*list next pointers */
int nerrors = 0; /* Accumulated error count during preemptions */
herr_t ret_value = SUCCEED; /* Return value */
const H5D_rdcc_t *rdcc = &(dset->shared->cache.chunk);
size_t total = rdcc->nbytes_max;
const int nmeth = 2; /* Number of methods */
int w[1]; /* Weighting as an interval */
H5D_rdcc_ent_t *p[2], *cur; /* List pointers */
H5D_rdcc_ent_t *n[2]; /* List next pointers */
int nerrors = 0; /* Accumulated error count during preemptions */
herr_t ret_value = SUCCEED;/* Return value */
FUNC_ENTER_STATIC
@ -3643,62 +3641,62 @@ H5D__chunk_cache_prune(const H5D_t *dset, size_t size)
while((p[0] || p[1]) && (rdcc->nbytes_used + size) > total) {
int i; /* Local index variable */
/* Introduce new pointers */
for(i = 0; i < nmeth - 1; i++)
/* Introduce new pointers */
for(i = 0; i < nmeth - 1; i++)
if(0 == w[i])
p[i + 1] = rdcc->head;
/* Compute next value for each pointer */
for(i = 0; i < nmeth; i++)
/* Compute next value for each pointer */
for(i = 0; i < nmeth; i++)
n[i] = p[i] ? p[i]->next : NULL;
/* Give each method a chance */
for(i = 0; i < nmeth && (rdcc->nbytes_used + size) > total; i++) {
if(0 == i && p[0] && !p[0]->locked &&
/* Give each method a chance */
for(i = 0; i < nmeth && (rdcc->nbytes_used + size) > total; i++) {
if(0 == i && p[0] && !p[0]->locked &&
((0 == p[0]->rd_count && 0 == p[0]->wr_count) ||
(0 == p[0]->rd_count && dset->shared->layout.u.chunk.size == p[0]->wr_count) ||
(dset->shared->layout.u.chunk.size == p[0]->rd_count && 0 == p[0]->wr_count))) {
/*
* Method 0: Preempt entries that have been completely written
* and/or completely read but not entries that are partially
* written or partially read.
*/
cur = p[0];
} else if(1 == i && p[1] && !p[1]->locked) {
/*
* Method 1: Preempt the entry without regard to
* considerations other than being locked. This is the last
* resort preemption.
*/
cur = p[1];
} else {
/* Nothing to preempt at this point */
cur = NULL;
}
(0 == p[0]->rd_count && dset->shared->layout.u.chunk.size == p[0]->wr_count) ||
(dset->shared->layout.u.chunk.size == p[0]->rd_count && 0 == p[0]->wr_count))) {
/*
* Method 0: Preempt entries that have been completely written
* and/or completely read but not entries that are partially
* written or partially read.
*/
cur = p[0];
} else if(1 == i && p[1] && !p[1]->locked) {
/*
* Method 1: Preempt the entry without regard to
* considerations other than being locked. This is the last
* resort preemption.
*/
cur = p[1];
} else {
/* Nothing to preempt at this point */
cur = NULL;
}
if(cur) {
if(cur) {
int j; /* Local index variable */
for(j = 0; j < nmeth; j++) {
if(p[j] == cur)
for(j = 0; j < nmeth; j++) {
if(p[j] == cur)
p[j] = NULL;
if(n[j] == cur)
if(n[j] == cur)
n[j] = cur->next;
} /* end for */
if(H5D__chunk_cache_evict(dset, cur, TRUE) < 0)
} /* end for */
if(H5D__chunk_cache_evict(dset, cur, TRUE) < 0)
nerrors++;
} /* end if */
} /* end for */
} /* end if */
} /* end for */
/* Advance pointers */
for(i = 0; i < nmeth; i++)
/* Advance pointers */
for(i = 0; i < nmeth; i++)
p[i] = n[i];
for(i = 0; i < nmeth - 1; i++)
for(i = 0; i < nmeth - 1; i++)
w[i] -= 1;
} /* end while */
if(nerrors)
HGOTO_ERROR(H5E_IO, H5E_CANTFLUSH, FAIL, "unable to preempt one or more raw data cache entry")
HGOTO_ERROR(H5E_IO, H5E_CANTFLUSH, FAIL, "unable to preempt one or more raw data cache entry")
done:
FUNC_LEAVE_NOAPI(ret_value)
@ -4347,7 +4345,7 @@ H5D__chunk_allocate(const H5D_io_info_t *io_info, hbool_t full_overwrite, hsize_
hbool_t unfilt_edge_chunk_dim[H5O_LAYOUT_NDIMS]; /* Whether there are unfiltered edge chunks at the edge of each dimension */
hsize_t edge_chunk_scaled[H5O_LAYOUT_NDIMS]; /* Offset of the unfiltered edge chunks at the edge of each dimension */
unsigned nunfilt_edge_chunk_dims = 0; /* Number of dimensions on an edge */
const H5O_storage_chunk_t *sc = &(layout->storage.u.chunk);
H5O_storage_chunk_t *sc = &(layout->storage.u.chunk); /* Convenience variable */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_PACKAGE
@ -4556,9 +4554,8 @@ H5D__chunk_allocate(const H5D_io_info_t *io_info, hbool_t full_overwrite, hsize_
HGOTO_ERROR(H5E_DATASET, H5E_CANTGET, FAIL, "error looking up chunk address")
#ifndef NDEBUG
/* None of the chunks should be allocated */
if(H5D_CHUNK_IDX_NONE != sc->idx_type) {
if(H5D_CHUNK_IDX_NONE != sc->idx_type)
HDassert(!H5F_addr_defined(udata.chunk_block.offset));
}
/* Make sure the chunk is really in the dataset and outside the
* original dimensions */
@ -4957,7 +4954,7 @@ H5D__chunk_collective_fill(const H5D_t *dset, H5D_chunk_coll_info_t *chunk_info,
int blocks, leftover, block_len; /* converted to int for MPI */
MPI_Aint *chunk_disp_array = NULL;
int *block_lens = NULL;
MPI_Datatype mem_type, file_type;
MPI_Datatype mem_type = MPI_BYTE, file_type = MPI_BYTE;
H5FD_mpio_xfer_t prev_xfer_mode; /* Previous data xfer mode */
hbool_t have_xfer_mode = FALSE; /* Whether the previous xffer mode has been retrieved */
hbool_t need_addr_sort = FALSE;
@ -4983,9 +4980,9 @@ H5D__chunk_collective_fill(const H5D_t *dset, H5D_chunk_coll_info_t *chunk_info,
HGOTO_ERROR(H5E_DATASET, H5E_BADVALUE, FAIL, "Resulted in division by zero")
num_blocks = (size_t)(chunk_info->num_io / (size_t)mpi_size); /* value should be the same on all procs */
/* after evenly distributing the blocks between processes, are
there any leftover blocks for each individual process
(round-robin) */
/* After evenly distributing the blocks between processes, are there any
* leftover blocks for each individual process (round-robin)?
*/
leftover_blocks = (size_t)(chunk_info->num_io % (size_t)mpi_size);
/* Cast values to types needed by MPI */
@ -4993,58 +4990,62 @@ H5D__chunk_collective_fill(const H5D_t *dset, H5D_chunk_coll_info_t *chunk_info,
H5_CHECKED_ASSIGN(leftover, int, leftover_blocks, size_t);
H5_CHECKED_ASSIGN(block_len, int, chunk_size, size_t);
/* Allocate buffers */
/* (MSC - should not need block_lens if MPI_type_create_hindexed_block is working) */
if(NULL == (block_lens = (int *)H5MM_malloc((size_t)(blocks + 1) * sizeof(int))))
HGOTO_ERROR(H5E_DATASET, H5E_CANTALLOC, FAIL, "couldn't allocate chunk lengths buffer")
if(NULL == (chunk_disp_array = (MPI_Aint *)H5MM_malloc((size_t)(blocks + 1) * sizeof(MPI_Aint))))
HGOTO_ERROR(H5E_DATASET, H5E_CANTALLOC, FAIL, "couldn't allocate chunk file displacement buffer")
/* Check if we have any chunks to write on this rank */
if(num_blocks > 0 || (leftover && leftover > mpi_rank)) {
/* Allocate buffers */
/* (MSC - should not need block_lens if MPI_type_create_hindexed_block is working) */
if(NULL == (block_lens = (int *)H5MM_malloc((size_t)(blocks + 1) * sizeof(int))))
HGOTO_ERROR(H5E_DATASET, H5E_CANTALLOC, FAIL, "couldn't allocate chunk lengths buffer")
if(NULL == (chunk_disp_array = (MPI_Aint *)H5MM_malloc((size_t)(blocks + 1) * sizeof(MPI_Aint))))
HGOTO_ERROR(H5E_DATASET, H5E_CANTALLOC, FAIL, "couldn't allocate chunk file displacement buffer")
for(i = 0 ; i < blocks ; i++) {
/* store the chunk address as an MPI_Aint */
chunk_disp_array[i] = (MPI_Aint)(chunk_info->addr[i + mpi_rank*blocks]);
for(i = 0 ; i < blocks ; i++) {
/* store the chunk address as an MPI_Aint */
chunk_disp_array[i] = (MPI_Aint)(chunk_info->addr[i + (mpi_rank * blocks)]);
/* MSC - should not need this if MPI_type_create_hindexed_block is working */
block_lens[i] = block_len;
/* MSC - should not need this if MPI_type_create_hindexed_block is working */
block_lens[i] = block_len;
/* make sure that the addresses in the datatype are
monotonically non decreasing */
if(i && (chunk_disp_array[i] < chunk_disp_array[i - 1]))
need_addr_sort = TRUE;
} /* end for */
/* Make sure that the addresses in the datatype are
* monotonically non-decreasing
*/
if(i && (chunk_disp_array[i] < chunk_disp_array[i - 1]))
need_addr_sort = TRUE;
} /* end for */
/* calculate if there are any leftover blocks after evenly
distributing. If there are, then round robin the distribution
to processes 0 -> leftover. */
if(leftover && leftover > mpi_rank) {
chunk_disp_array[blocks] = (MPI_Aint)chunk_info->addr[blocks*mpi_size + mpi_rank];
if(blocks && (chunk_disp_array[blocks] < chunk_disp_array[blocks - 1]))
need_addr_sort = TRUE;
block_lens[blocks] = block_len;
blocks++;
}
/* Calculate if there are any leftover blocks after evenly
* distributing. If there are, then round-robin the distribution
* to processes 0 -> leftover.
*/
if(leftover && leftover > mpi_rank) {
chunk_disp_array[blocks] = (MPI_Aint)chunk_info->addr[(blocks * mpi_size) + mpi_rank];
if(blocks && (chunk_disp_array[blocks] < chunk_disp_array[blocks - 1]))
need_addr_sort = TRUE;
block_lens[blocks] = block_len;
blocks++;
}
/*
* Ensure that the blocks are sorted in monotonically non-decreasing
* order of offset in the file.
*/
if(need_addr_sort)
HDqsort(chunk_disp_array, blocks, sizeof(MPI_Aint), H5D__chunk_cmp_addr);
/* Ensure that the blocks are sorted in monotonically non-decreasing
* order of offset in the file.
*/
if(need_addr_sort)
HDqsort(chunk_disp_array, blocks, sizeof(MPI_Aint), H5D__chunk_cmp_addr);
/* MSC - should use this if MPI_type_create_hindexed block is working:
* mpi_code = MPI_Type_create_hindexed_block(blocks, block_len, chunk_disp_array, MPI_BYTE, &file_type);
*/
mpi_code = MPI_Type_create_hindexed(blocks, block_lens, chunk_disp_array, MPI_BYTE, &file_type);
if(mpi_code != MPI_SUCCESS)
HMPI_GOTO_ERROR(FAIL, "MPI_Type_create_hindexed failed", mpi_code)
if(MPI_SUCCESS != (mpi_code = MPI_Type_commit(&file_type)))
HMPI_GOTO_ERROR(FAIL, "MPI_Type_commit failed", mpi_code)
/* MSC - should use this if MPI_type_create_hindexed block is working:
* mpi_code = MPI_Type_create_hindexed_block(blocks, block_len, chunk_disp_array, MPI_BYTE, &file_type);
*/
mpi_code = MPI_Type_create_hindexed(blocks, block_lens, chunk_disp_array, MPI_BYTE, &file_type);
if(mpi_code != MPI_SUCCESS)
HMPI_GOTO_ERROR(FAIL, "MPI_Type_create_hindexed failed", mpi_code)
if(MPI_SUCCESS != (mpi_code = MPI_Type_commit(&file_type)))
HMPI_GOTO_ERROR(FAIL, "MPI_Type_commit failed", mpi_code)
mpi_code = MPI_Type_create_hvector(blocks, block_len, 0, MPI_BYTE, &mem_type);
if(mpi_code != MPI_SUCCESS)
HMPI_GOTO_ERROR(FAIL, "MPI_Type_create_hvector failed", mpi_code)
if(MPI_SUCCESS != (mpi_code = MPI_Type_commit(&mem_type)))
HMPI_GOTO_ERROR(FAIL, "MPI_Type_commit failed", mpi_code)
mpi_code = MPI_Type_create_hvector(blocks, block_len, 0, MPI_BYTE, &mem_type);
if(mpi_code != MPI_SUCCESS)
HMPI_GOTO_ERROR(FAIL, "MPI_Type_create_hvector failed", mpi_code)
if(MPI_SUCCESS != (mpi_code = MPI_Type_commit(&mem_type)))
HMPI_GOTO_ERROR(FAIL, "MPI_Type_commit failed", mpi_code)
} /* end if */
/* Set MPI-IO VFD properties */
@ -5076,10 +5077,12 @@ done:
HDONE_ERROR(H5E_DATASET, H5E_CANTSET, FAIL, "can't set transfer mode")
/* free things */
if(MPI_SUCCESS != (mpi_code = MPI_Type_free(&file_type)))
HMPI_DONE_ERROR(FAIL, "MPI_Type_free failed", mpi_code)
if(MPI_SUCCESS != (mpi_code = MPI_Type_free(&mem_type)))
HMPI_DONE_ERROR(FAIL, "MPI_Type_free failed", mpi_code)
if(MPI_BYTE != file_type)
if(MPI_SUCCESS != (mpi_code = MPI_Type_free(&file_type)))
HMPI_DONE_ERROR(FAIL, "MPI_Type_free failed", mpi_code)
if(MPI_BYTE != mem_type)
if(MPI_SUCCESS != (mpi_code = MPI_Type_free(&mem_type)))
HMPI_DONE_ERROR(FAIL, "MPI_Type_free failed", mpi_code)
H5MM_xfree(chunk_disp_array);
H5MM_xfree(block_lens);
@ -5126,8 +5129,8 @@ H5D__chunk_cmp_addr(const void *addr1, const void *addr2)
*
* Return: Non-negative on success/Negative on failure
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* March 26, 2002
* Programmer: Pedro Vicente
* March 26, 2002
*
*-------------------------------------------------------------------------
*/
@ -5252,7 +5255,7 @@ done:
*
* Return: Non-negative on success/Negative on failure
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
* Algorithm: Robb Matzke
* March 27, 2002
*
@ -5405,13 +5408,13 @@ H5D__chunk_prune_by_extent(H5D_t *dset, const hsize_t *old_dim)
elmts_per_chunk = 1;
for(u = 0; u < space_ndims; u++) {
elmts_per_chunk *= layout->u.chunk.dim[u];
chunk_dim[u] = layout->u.chunk.dim[u];
shrunk_dim[u] = (space_dim[u] < old_dim[u]);
chunk_dim[u] = layout->u.chunk.dim[u];
shrunk_dim[u] = (space_dim[u] < old_dim[u]);
} /* end for */
/* Create a dataspace for a chunk & set the extent */
if(NULL == (chunk_space = H5S_create_simple(space_ndims, chunk_dim, NULL)))
HGOTO_ERROR(H5E_DATASPACE, H5E_CANTCREATE, FAIL, "can't create simple dataspace")
HGOTO_ERROR(H5E_DATASPACE, H5E_CANTCREATE, FAIL, "can't create simple dataspace")
/* Reset hyperslab start array */
/* (hyperslabs will always start from origin) */
@ -5599,7 +5602,7 @@ H5D__chunk_prune_by_extent(H5D_t *dset, const hsize_t *old_dim)
/* Remove the chunk from disk, if present */
if(H5F_addr_defined(chk_udata.chunk_block.offset)) {
/* Update the offset in idx_udata */
idx_udata.scaled = udata.common.scaled;
idx_udata.scaled = udata.common.scaled;
/* Remove the chunk from disk */
if((sc->ops->remove)(&idx_info, &idx_udata) < 0)
@ -5989,7 +5992,7 @@ H5D__chunk_copy_cb(const H5D_chunk_rec_t *chunk_rec, void *_udata)
if(pline && pline->nused) {
must_filter = TRUE;
if((udata->common.layout->flags & H5O_LAYOUT_CHUNK_DONT_FILTER_PARTIAL_BOUND_CHUNKS) &&
H5D__chunk_is_partial_edge_chunk(udata->dset_ndims, udata->common.layout->dim, chunk_rec->scaled, udata->dset_dims))
H5D__chunk_is_partial_edge_chunk(udata->dset_ndims, udata->common.layout->dim, chunk_rec->scaled, udata->dset_dims))
must_filter = FALSE;
}
@ -6932,9 +6935,9 @@ H5D__chunk_file_alloc(const H5D_chk_idx_info_t *idx_info, const H5F_block_t *old
} /* end else */
} /* end if */
else {
HDassert(!H5F_addr_defined(new_chunk->offset));
HDassert(new_chunk->length == idx_info->layout->size);
alloc_chunk = TRUE;
HDassert(!H5F_addr_defined(new_chunk->offset));
HDassert(new_chunk->length == idx_info->layout->size);
alloc_chunk = TRUE;
} /* end else */
/* Actually allocate space for the chunk in the file */

@ -12,7 +12,7 @@
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/*
* Programmer: Raymond Lu <slu@ncsa.uiuc.edu>
* Programmer: Raymond Lu
* August 5, 2002
*
* Purpose: Compact dataset I/O functions. These routines are similar

@ -12,7 +12,7 @@
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/*
* Programmer: Quincey Koziol <koziol@ncsa.uiuc.edu>
* Programmer: Quincey Koziol
* Thursday, September 28, 2000
*
* Purpose:

@ -15,7 +15,7 @@
*
* Created: H5Ddeprec.c
* April 5 2007
* Quincey Koziol <koziol@hdfgroup.org>
* Quincey Koziol
*
* Purpose: Deprecated functions from the H5D interface. These
* functions are here for compatibility purposes and may be
@ -148,12 +148,12 @@ H5Dcreate1(hid_t loc_id, const char *name, hid_t type_id, hid_t space_id,
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")

@ -12,7 +12,7 @@
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/*
* Programmer: Quincey Koziol <koziol@ncsa.uiuc.edu>
* Programmer: Quincey Koziol
* Thursday, September 30, 2004
*/
@ -336,9 +336,6 @@ done:
* Programmer: Robb Matzke
* Wednesday, March 4, 1998
*
* Modifications:
* Robb Matzke, 1999-07-28
* The ADDR argument is passed by value.
*-------------------------------------------------------------------------
*/
static herr_t

@ -15,7 +15,7 @@
*
* Created: H5Dfill.c
* Jun 19 2007
* Quincey Koziol <koziol@hdfgroup.org>
* Quincey Koziol
*
* Purpose: Fill value operations for datasets
*
@ -647,7 +647,7 @@ done:
static herr_t
H5D__fill_release(H5D_fill_buf_info_t *fb_info)
{
FUNC_ENTER_PACKAGE_NOERR
FUNC_ENTER_STATIC_NOERR
/* Check args */
HDassert(fb_info);

Some files were not shown because too many files have changed in this diff Show More