Merging in latest from upstream (HDFFV/hdf5:refs/heads/develop)

* commit '0e34f0feaaeb6d2286f87f695f25fae45c070a42': (26 commits)
  HDFFV-10664 update reference file
  HDFFV-10664 update reference files
  HDFFV-10664 add missing function and check for restriction
  Remove "bad" statements at end of TEST_ERROR.     Formerly arguments to FAIL_PUTS_ERROR
  Add RELEASE.txt entry for HDFFV-10596.
  Add semicolon at end of TEST_ERROR() invocation for consistency.
  Uninstall should remove the libhdf5_hl_fortran links.
  Add symlinks named libhdf5_hl_fortran* to libhdf5hl_fortran in Makefile.am to match cmake install and the name pattern for other hl lib files.
  Change FAIL_PUTS_ERROR to TEST_ERROR.
  Cleaned up the parallel flush test and set t_pflush1 to always fail. Also set CMake to handle this.
  Update calls: H5Dcreate to H5Dcreate2, H5Acreate to H5Acreate2.
  Removed a comment.
  Fix comment
  Align H5Lcreate_ud behavior with documentation for NULL udata pointer
  Update toolchain comment
  Use c99 standard cmake variable
  Add PGI toolchain
  Correction based on code review.
  HDFFV-10664 add check for state before set call
  HDFFV-10546 refactor variable name
  ...
This commit is contained in:
Larry Knox 2019-01-05 07:41:12 -06:00
commit cceb9f06b8
40 changed files with 1104 additions and 438 deletions

View File

@ -968,6 +968,7 @@
./test/cross_read.c
./test/dangle.c
./test/deflate.h5
./test/del_many_dense_attrs.c
./test/direct_chunk.c
./test/dsets.c
./test/dt_arith.c
@ -1102,10 +1103,10 @@
./test/tcheck_version.c
./test/tconfig.c
./test/tcoords.c
./test/testabort_fail.sh.in
./test/testcheck_version.sh.in
./test/testerror.sh.in
./test/testlinks_env.sh.in
./test/test_filenotclosed.sh.in
./test/test_filter_plugin.sh.in
./test/test_filters_le.h5
./test/test_filters_be.h5
@ -3191,6 +3192,7 @@
./config/toolchain/crayle.cmake
./config/toolchain/GCC.cmake
./config/toolchain/intel.cmake
./config/toolchain/PGI.cmake
./config/cmake/cacheinit.cmake
./config/cmake/CMakeFindJavaCommon.cmake

View File

@ -53,8 +53,7 @@
* <br />
* \section install_sec Installation
*
* The HDF5 C++ API is included with the HDF5 source code and can
* be obtained from
* The HDF5 C++ API is included with the HDF5 source code.
*
* Please refer to the release_docs/INSTALL file under the top directory
* of the HDF5 source code for information about installing, building,

View File

@ -18,16 +18,6 @@ ENABLE_LANGUAGE (Fortran)
set (HDF_PREFIX "H5")
include (CheckFortranFunctionExists)
## Check for non-standard extenstion quadmath.h
CHECK_INCLUDE_FILES(quadmath.h C_HAVE_QUADMATH)
if (${C_HAVE_QUADMATH})
set(${HDF_PREFIX}_HAVE_QUADMATH_H 1)
else ()
set(${HDF_PREFIX}_HAVE_QUADMATH_H 0)
endif ()
# The provided CMake Fortran macros don't provide a general compile/run function
# so this one is used.
#-----------------------------------------------------------------------------
@ -40,7 +30,7 @@ macro (FORTRAN_RUN FUNCTION_NAME SOURCE_CODE RUN_RESULT_VAR1 COMPILE_RESULT_VAR1
TRY_RUN (RUN_RESULT_VAR COMPILE_RESULT_VAR
${CMAKE_BINARY_DIR}
${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testFortranCompiler1.f90
LINK_LIBRARIES "${CMAKE_REQUIRED_LIBRARIES}"
LINK_LIBRARIES "${HDF5_REQUIRED_LIBRARIES}"
)
if (${COMPILE_RESULT_VAR})
@ -367,9 +357,9 @@ ENABLE_LANGUAGE (C)
#-----------------------------------------------------------------------------
macro (C_RUN FUNCTION_NAME SOURCE_CODE RETURN_VAR)
message (STATUS "Detecting C ${FUNCTION_NAME}")
if (CMAKE_REQUIRED_LIBRARIES)
if (HDF5_REQUIRED_LIBRARIES)
set (CHECK_FUNCTION_EXISTS_ADD_LIBRARIES
"-DLINK_LIBRARIES:STRING=${CMAKE_REQUIRED_LIBRARIES}")
"-DLINK_LIBRARIES:STRING=${HDF5_REQUIRED_LIBRARIES}")
else ()
set (CHECK_FUNCTION_EXISTS_ADD_LIBRARIES)
endif ()

View File

@ -9,16 +9,16 @@
# If you do not have access to either file, you may request a copy from
# help@hdfgroup.org.
#
set(CMAKE_C_STANDARD 99)
set(CMAKE_C_STANDARD_REQUIRED TRUE)
message (STATUS "Warnings Configuration:")
set (CMAKE_C_FLAGS "${CMAKE_C99_STANDARD_COMPILE_OPTION} ${CMAKE_C_FLAGS}")
#-----------------------------------------------------------------------------
# Compiler specific flags : Shouldn't there be compiler tests for these
#-----------------------------------------------------------------------------
if (CMAKE_COMPILER_IS_GNUCC)
set (CMAKE_C_FLAGS "${CMAKE_ANSI_CFLAGS} ${CMAKE_C_FLAGS}")
if (NOT CYGWIN)
set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c99")
endif ()
if (${HDF_CFG_NAME} MATCHES "Debug")
if (NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 5.0)
set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Og -ftrapv -fno-common")

View File

@ -70,7 +70,7 @@ if (WIN32)
set (CMAKE_REQUIRED_FLAGS "-DWIN32_LEAN_AND_MEAN=1 -DNOGDI=1")
endif ()
set (${HDF_PREFIX}_HAVE_WIN32_API 1)
set (CMAKE_REQUIRED_LIBRARIES "ws2_32.lib;wsock32.lib")
set (HDF5_REQUIRED_LIBRARIES "ws2_32.lib;wsock32.lib")
if (NOT UNIX AND NOT MINGW)
set (WINDOWS 1)
set (CMAKE_REQUIRED_FLAGS "/DWIN32_LEAN_AND_MEAN=1 /DNOGDI=1")
@ -109,84 +109,10 @@ endif ()
# END of WINDOWS Hard code Values
# ----------------------------------------------------------------------
if (CYGWIN)
set (${HDF_PREFIX}_HAVE_LSEEK64 0)
endif ()
#-----------------------------------------------------------------------------
# Check for the math library "m"
#-----------------------------------------------------------------------------
if (NOT WINDOWS)
CHECK_LIBRARY_EXISTS_CONCAT ("m" ceil ${HDF_PREFIX}_HAVE_LIBM)
CHECK_LIBRARY_EXISTS_CONCAT ("dl" dlopen ${HDF_PREFIX}_HAVE_LIBDL)
CHECK_LIBRARY_EXISTS_CONCAT ("ws2_32" WSAStartup ${HDF_PREFIX}_HAVE_LIBWS2_32)
CHECK_LIBRARY_EXISTS_CONCAT ("wsock32" gethostbyname ${HDF_PREFIX}_HAVE_LIBWSOCK32)
endif ()
# UCB (BSD) compatibility library
CHECK_LIBRARY_EXISTS_CONCAT ("ucb" gethostname ${HDF_PREFIX}_HAVE_LIBUCB)
# For other tests to use the same libraries
set (CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} ${LINK_LIBS})
set (USE_INCLUDES "")
if (WINDOWS)
set (USE_INCLUDES ${USE_INCLUDES} "windows.h")
endif ()
if (NOT WINDOWS)
TEST_BIG_ENDIAN (${HDF_PREFIX}_WORDS_BIGENDIAN)
endif ()
# For other specific tests, use this MACRO.
macro (HDF_FUNCTION_TEST OTHER_TEST)
if (NOT DEFINED ${HDF_PREFIX}_${OTHER_TEST})
set (MACRO_CHECK_FUNCTION_DEFINITIONS "-D${OTHER_TEST} ${CMAKE_REQUIRED_FLAGS}")
foreach (def
HAVE_SYS_TIME_H
HAVE_UNISTD_H
HAVE_SYS_TYPES_H
HAVE_SYS_SOCKET_H
)
if ("${${HDF_PREFIX}_${def}}")
set (MACRO_CHECK_FUNCTION_DEFINITIONS "${MACRO_CHECK_FUNCTION_DEFINITIONS} -D${def}")
endif ()
endforeach ()
if (LARGEFILE)
set (MACRO_CHECK_FUNCTION_DEFINITIONS
"${MACRO_CHECK_FUNCTION_DEFINITIONS} -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE"
)
endif ()
#message (STATUS "Performing ${OTHER_TEST}")
TRY_COMPILE (${OTHER_TEST}
${CMAKE_BINARY_DIR}
${HDF_RESOURCES_EXT_DIR}/HDFTests.c
COMPILE_DEFINITIONS "${MACRO_CHECK_FUNCTION_DEFINITIONS}"
LINK_LIBRARIES "${CMAKE_REQUIRED_LIBRARIES}"
OUTPUT_VARIABLE OUTPUT
)
if (${OTHER_TEST})
set (${HDF_PREFIX}_${OTHER_TEST} 1 CACHE INTERNAL "Other test ${FUNCTION}")
message (STATUS "Performing Other Test ${OTHER_TEST} - Success")
else ()
message (STATUS "Performing Other Test ${OTHER_TEST} - Failed")
set (${HDF_PREFIX}_${OTHER_TEST} "" CACHE INTERNAL "Other test ${FUNCTION}")
file (APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
"Performing Other Test ${OTHER_TEST} failed with the following output:\n"
"${OUTPUT}\n"
)
endif ()
endif ()
endmacro ()
#-----------------------------------------------------------------------------
# Check for these functions before the time headers are checked
#-----------------------------------------------------------------------------
HDF_FUNCTION_TEST (STDC_HEADERS)
#-----------------------------------------------------------------------------
# Check IF header file exists and add it to the list.
#-----------------------------------------------------------------------------
@ -243,6 +169,91 @@ CHECK_INCLUDE_FILE_CONCAT ("memory.h" ${HDF_PREFIX}_HAVE_MEMORY_H)
CHECK_INCLUDE_FILE_CONCAT ("dlfcn.h" ${HDF_PREFIX}_HAVE_DLFCN_H)
CHECK_INCLUDE_FILE_CONCAT ("inttypes.h" ${HDF_PREFIX}_HAVE_INTTYPES_H)
CHECK_INCLUDE_FILE_CONCAT ("netinet/in.h" ${HDF_PREFIX}_HAVE_NETINET_IN_H)
# _Bool type support
CHECK_INCLUDE_FILE_CONCAT (stdbool.h ${HDF_PREFIX}_HAVE_STDBOOL_H)
## Check for non-standard extenstion quadmath.h
CHECK_INCLUDE_FILES(quadmath.h C_HAVE_QUADMATH)
if (${C_HAVE_QUADMATH})
set(${HDF_PREFIX}_HAVE_QUADMATH_H 1)
else ()
set(${HDF_PREFIX}_HAVE_QUADMATH_H 0)
endif ()
if (CYGWIN)
set (${HDF_PREFIX}_HAVE_LSEEK64 0)
endif ()
#-----------------------------------------------------------------------------
# Check for the math library "m"
#-----------------------------------------------------------------------------
if (NOT WINDOWS)
CHECK_LIBRARY_EXISTS_CONCAT ("m" ceil ${HDF_PREFIX}_HAVE_LIBM)
CHECK_LIBRARY_EXISTS_CONCAT ("dl" dlopen ${HDF_PREFIX}_HAVE_LIBDL)
CHECK_LIBRARY_EXISTS_CONCAT ("ws2_32" WSAStartup ${HDF_PREFIX}_HAVE_LIBWS2_32)
CHECK_LIBRARY_EXISTS_CONCAT ("wsock32" gethostbyname ${HDF_PREFIX}_HAVE_LIBWSOCK32)
endif ()
# UCB (BSD) compatibility library
CHECK_LIBRARY_EXISTS_CONCAT ("ucb" gethostname ${HDF_PREFIX}_HAVE_LIBUCB)
# For other tests to use the same libraries
set (HDF5_REQUIRED_LIBRARIES ${HDF5_REQUIRED_LIBRARIES} ${LINK_LIBS})
set (USE_INCLUDES "")
if (WINDOWS)
set (USE_INCLUDES ${USE_INCLUDES} "windows.h")
endif ()
# For other specific tests, use this MACRO.
macro (HDF_FUNCTION_TEST OTHER_TEST)
if (NOT DEFINED ${HDF_PREFIX}_${OTHER_TEST})
set (MACRO_CHECK_FUNCTION_DEFINITIONS "-D${OTHER_TEST} ${CMAKE_REQUIRED_FLAGS}")
foreach (def
HAVE_SYS_TIME_H
HAVE_UNISTD_H
HAVE_SYS_TYPES_H
HAVE_SYS_SOCKET_H
)
if ("${${HDF_PREFIX}_${def}}")
set (MACRO_CHECK_FUNCTION_DEFINITIONS "${MACRO_CHECK_FUNCTION_DEFINITIONS} -D${def}")
endif ()
endforeach ()
if (LARGEFILE)
set (MACRO_CHECK_FUNCTION_DEFINITIONS
"${MACRO_CHECK_FUNCTION_DEFINITIONS} -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE"
)
endif ()
#message (STATUS "Performing ${OTHER_TEST}")
TRY_COMPILE (${OTHER_TEST}
${CMAKE_BINARY_DIR}
${HDF_RESOURCES_EXT_DIR}/HDFTests.c
COMPILE_DEFINITIONS "${MACRO_CHECK_FUNCTION_DEFINITIONS}"
LINK_LIBRARIES "${HDF5_REQUIRED_LIBRARIES}"
OUTPUT_VARIABLE OUTPUT
)
if (${OTHER_TEST})
set (${HDF_PREFIX}_${OTHER_TEST} 1 CACHE INTERNAL "Other test ${FUNCTION}")
message (STATUS "Performing Other Test ${OTHER_TEST} - Success")
else ()
message (STATUS "Performing Other Test ${OTHER_TEST} - Failed")
set (${HDF_PREFIX}_${OTHER_TEST} "" CACHE INTERNAL "Other test ${FUNCTION}")
file (APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
"Performing Other Test ${OTHER_TEST} failed with the following output:\n"
"${OUTPUT}\n"
)
endif ()
endif ()
endmacro ()
#-----------------------------------------------------------------------------
# Check for these functions before the time headers are checked
#-----------------------------------------------------------------------------
HDF_FUNCTION_TEST (STDC_HEADERS)
#-----------------------------------------------------------------------------
# Check for large file support
@ -408,7 +419,6 @@ endif ()
#-----------------------------------------------------------------------------
# _Bool type support
CHECK_INCLUDE_FILE_CONCAT (stdbool.h ${HDF_PREFIX}_HAVE_STDBOOL_H)
if (HAVE_STDBOOL_H)
set (CMAKE_EXTRA_INCLUDE_FILES stdbool.h)
HDF_CHECK_TYPE_SIZE (bool ${HDF_PREFIX}_SIZEOF_BOOL)
@ -580,7 +590,7 @@ if (WINDOWS)
${CMAKE_BINARY_DIR}
${HDF_RESOURCES_EXT_DIR}/HDFTests.c
COMPILE_DEFINITIONS "${CMAKE_REQUIRED_DEFINITIONS} ${MACRO_CHECK_FUNCTION_DEFINITIONS}"
LINK_LIBRARIES "${CMAKE_REQUIRED_LIBRARIES}"
LINK_LIBRARIES "${HDF5_REQUIRED_LIBRARIES}"
CMAKE_FLAGS "${CHECK_C_SOURCE_COMPILES_ADD_INCLUDES} -DCMAKE_SKIP_RPATH:BOOL=${CMAKE_SKIP_RPATH}"
COMPILE_OUTPUT_VARIABLE OUTPUT
)

View File

@ -48,8 +48,8 @@ macro (HDF_CXX_FUNCTION_TEST OTHER_TEST)
if (NOT DEFINED ${OTHER_TEST})
set (MACRO_CHECK_FUNCTION_DEFINITIONS "-D${OTHER_TEST} ${CMAKE_REQUIRED_FLAGS}")
set (OTHER_TEST_ADD_LIBRARIES)
if (CMAKE_REQUIRED_LIBRARIES)
set (OTHER_TEST_ADD_LIBRARIES "-DLINK_LIBRARIES:STRING=${CMAKE_REQUIRED_LIBRARIES}")
if (HDF5_REQUIRED_LIBRARIES)
set (OTHER_TEST_ADD_LIBRARIES "-DLINK_LIBRARIES:STRING=${HDF5_REQUIRED_LIBRARIES}")
endif ()
foreach (def

View File

@ -48,9 +48,9 @@ set (H5_FC_FUNC_ "H5_FC_FUNC_(name,NAME) ${CMAKE_MATCH_1}")
#-----------------------------------------------------------------------------
macro (CHECK_FORTRAN_FEATURE FUNCTION CODE VARIABLE)
message (STATUS "Testing Fortran ${FUNCTION}")
if (CMAKE_REQUIRED_LIBRARIES)
if (HDF5_REQUIRED_LIBRARIES)
set (CHECK_FUNCTION_EXISTS_ADD_LIBRARIES
"-DLINK_LIBRARIES:STRING=${CMAKE_REQUIRED_LIBRARIES}")
"-DLINK_LIBRARIES:STRING=${HDF5_REQUIRED_LIBRARIES}")
else ()
set (CHECK_FUNCTION_EXISTS_ADD_LIBRARIES)
endif ()

View File

@ -1,5 +1,6 @@
# Uncomment the following to use cross-compiling
# Uncomment the following line and the correct system name to use cross-compiling
#set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_COMPILER_VENDOR "GCC")
set(CMAKE_C_COMPILER cc)

View File

@ -0,0 +1,11 @@
# Uncomment the following to use cross-compiling
#set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_COMPILER_VENDOR "PGI")
set(CMAKE_C_COMPILER pgcc)
set(CMAKE_CXX_COMPILER pgc++)
set(CMAKE_Fortran_COMPILER pgf90)
# the following is used if cross-compiling
set(CMAKE_CROSSCOMPILING_EMULATOR "")

View File

@ -1,5 +1,6 @@
# Uncomment the following to use cross-compiling
# The following line will use cross-compiling
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_COMPILER_VENDOR "CrayLinuxEnvironment")
set(CMAKE_C_COMPILER cc)

View File

@ -1,5 +1,6 @@
# Uncomment the following to use cross-compiling
#set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_COMPILER_VENDOR "intel")
set(CMAKE_C_COMPILER icc)

View File

@ -3399,6 +3399,7 @@ AC_CONFIG_FILES([src/libhdf5.settings
src/Makefile
test/Makefile
test/H5srcdir_str.h
test/testabort_fail.sh
test/testcheck_version.sh
test/testerror.sh
test/testflushrefresh.sh
@ -3406,7 +3407,6 @@ AC_CONFIG_FILES([src/libhdf5.settings
test/testlinks_env.sh
test/testswmr.sh
test/testvdsswmr.sh
test/test_filenotclosed.sh
test/test_filter_plugin.sh
test/test_usecases.sh
test/test_vol_plugin.sh

View File

@ -50,6 +50,19 @@ libhdf5hl_fortran_la_SOURCES=H5DSfc.c H5LTfc.c H5IMfc.c H5IMcc.c H5TBfc.c \
# HDF5 HL Fortran library depends on HDF5 Library.
libhdf5hl_fortran_la_LIBADD=$(LIBH5_HL) $(LIBH5F)
# The name of the lib file doesn't follow the same pattern as the other hl lib
# files, namely libhdf5_hl_*. Add a symlink with the compliant name to the
# actual lib file.
install-exec-hook:
cd $(DESTDIR)$(libdir) && \
if test -f libhdf5hl_fortran.a; then \
$(LN_S) libhdf5hl_fortran.a libhdf5_hl_fortran.a; \
fi; \
if test -f libhdf5hl_fortran.so; then \
$(LN_S) libhdf5hl_fortran.so libhdf5_hl_fortran.so; \
fi;
# Fortran module files can have different extensions and different names
# (e.g., different capitalizations) on different platforms. Write rules
# for them explicitly rather than trying to teach automake about them.
@ -72,6 +85,7 @@ uninstall-local:
set -x; $(RM) $(includedir)/*.$(F9XMODEXT); \
fi; \
fi
$(RM) $(DESTDIR)$(libdir)/libhdf5_hl_fortran*
# These are the helper programs we need to build.
noinst_PROGRAMS = H5HL_buildiface

View File

@ -3229,13 +3229,56 @@ public class H5 implements java.io.Serializable {
public synchronized static native void H5Fget_mdc_logging_status(long file_id, boolean[] mdc_logging_status)
throws HDF5LibraryException, NullPointerException;
/**
* H5Fget_dset_no_attrs_hint gets the file-level setting to create minimized dataset object headers.
*
* @param file_id
* IN: Identifier of the target file.
*
* @exception HDF5LibraryException
* - Error from the HDF-5 Library.
**/
public synchronized static native boolean H5Fget_dset_no_attrs_hint(long file_id)
throws HDF5LibraryException;
/**
* H5Fset_dset_no_attrs_hint sets the file-level setting to create minimized dataset object headers.
*
* @param file_id
* IN: Identifier of the target file.
* @param minimize
* the minimize hint setting
*
* @exception HDF5LibraryException
* - Error from the HDF-5 Library.
**/
public synchronized static native void H5Fset_dset_no_attrs_hint(long file_id, boolean minimize)
throws HDF5LibraryException;
/**
* H5Fset_libver_bounds sets a different low and high bounds while a file is open.
*
* @param file_id
* IN: Identifier of the target file.
* @param low
* IN: The earliest version of the library that will be used for writing objects
* @param high
* IN: The latest version of the library that will be used for writing objects.
*
* @exception HDF5LibraryException
* - Error from the HDF-5 Library.
**/
public synchronized static native void H5Fset_libver_bounds(long file_id, int low, int high)
throws HDF5LibraryException;
// /////// unimplemented ////////
// herr_t H5Fget_eoa(hid_t file_id, haddr_t *eoa);
// herr_t H5Fincrement_filesize(hid_t file_id, hsize_t increment);
// ssize_t H5Fget_file_image(hid_t file_id, void * buf_ptr, size_t buf_len);
// herr_t H5Fget_metadata_read_retry_info(hid_t file_id, H5F_retry_info_t *info);
// ssize_t H5Fget_free_sections(hid_t file_id, H5F_mem_t type, size_t nsects, H5F_sect_info_t *sect_info/*out*/);
// herr_t H5Fset_libver_bounds(hid_t file_id, H5F_libver_t low, H5F_libver_t high);
// herr_t H5Fformat_convert(hid_t fid);
// herr_t H5Freset_page_buffering_stats(hid_t file_id);
// herr_t H5Fget_page_buffering_stats(hid_t file_id, unsigned accesses[2],
@ -6922,8 +6965,6 @@ public class H5 implements java.io.Serializable {
public synchronized static native int H5Pset_fill_time(long plist_id, int fill_time) throws HDF5LibraryException,
NullPointerException;
// /////// Dataset creation property list (DCPL) routines ///////
/**
* H5Pset_chunk_opts Sets the edge chunk option in a dataset creation property list.
*
@ -6952,6 +6993,36 @@ public class H5 implements java.io.Serializable {
**/
public synchronized static native int H5Pget_chunk_opts(long dcpl_id) throws HDF5LibraryException;
/**
* H5Pget_dset_no_attrs_hint accesses the flag for whether or not datasets created by the given dcpl
* will be created with a "minimized" object header.
*
* @param dcpl_id
* IN: Dataset creation property list
*
* @exception HDF5LibraryException
* - Error from the HDF-5 Library.
**/
public synchronized static native boolean H5Pget_dset_no_attrs_hint(long dcpl_id)
throws HDF5LibraryException;
/**
* H5Pset_dset_no_attrs_hint sets the dcpl to minimize (or explicitly to not minimized) dataset object
* headers upon creation.
*
* @param dcpl_id
* IN: Dataset creation property list
*
* @param minimize
* the minimize hint setting
*
* @exception HDF5LibraryException
* - Error from the HDF-5 Library.
**/
public synchronized static native void H5Pset_dset_no_attrs_hint(long dcpl_id, boolean minimize)
throws HDF5LibraryException;
// /////// Dataset access property list (DAPL) routines ///////
/**

View File

@ -149,6 +149,9 @@ Java_hdf_hdf5lib_H5_H5Fis_1hdf5
(JNIEnv *env, jclass clss, jstring name)
{
htri_t bval = JNI_FALSE;
#ifdef H5_NO_DEPRECATED_SYMBOLS
h5unimplemented(env, "H5Fis_hdf5: not implemented");
#else
const char *fileName;
PIN_JAVA_STRING(name, fileName);
@ -162,7 +165,7 @@ Java_hdf_hdf5lib_H5_H5Fis_1hdf5
else if (bval < 0)
h5libraryError(env);
}
#endif
return (jboolean)bval;
} /* end Java_hdf_hdf5lib_H5_H5Fis_1hdf5 */
@ -636,6 +639,66 @@ Java_hdf_hdf5lib_H5_H5Fget_1mdc_1logging_1status
} /* end else */
} /* end Java_hdf_hdf5lib_H5_H5Fget_1mdc_1logging_1status */
/*
* Class: hdf_hdf5lib_H5
* Method: H5Fset_dset_no_attrs_hint
* Signature: (JZ)V
*/
JNIEXPORT void JNICALL
Java_hdf_hdf5lib_H5_H5Fset_1dset_1no_1attrs_1hint
(JNIEnv *env, jclass clss, jlong file_id, jboolean minimize)
{
herr_t retVal = -1;
hbool_t minimize_val;
if (minimize == JNI_TRUE)
minimize_val = TRUE;
else
minimize_val = FALSE;
retVal = H5Fset_dset_no_attrs_hint((hid_t)file_id, (hbool_t)minimize_val);
if (retVal < 0)
h5libraryError(env);
}
/*
* Class: hdf_hdf5lib_H5
* Method: H5Fget_dset_no_attrs_hint
* Signature: (J)Z
*/
JNIEXPORT jboolean JNICALL
Java_hdf_hdf5lib_H5_H5Fget_1dset_1no_1attrs_1hint
(JNIEnv *env, jclass clss, jlong file_id)
{
hbool_t minimize = FALSE;
jboolean bval = JNI_FALSE;
if (H5Fget_dset_no_attrs_hint((hid_t)file_id, (hbool_t *)&minimize) < 0) {
h5libraryError(env);
}
else {
if (minimize == TRUE)
bval = JNI_TRUE;
} /* end else */
return bval;
}
/*
* Class: hdf_hdf5lib_H5
* Method: H5Fset_libver_bounds
* Signature: (JII)V
*/
JNIEXPORT void JNICALL
Java_hdf_hdf5lib_H5_H5Fset_1libver_1bounds
(JNIEnv *env, jclass clss, jlong file_id, jint low, jint high)
{
herr_t retVal = -1;
retVal = H5Fset_libver_bounds((hid_t)file_id, (H5F_libver_t)low, (H5F_libver_t)high);
if(retVal < 0)
h5libraryError(env);
} /* end Java_hdf_hdf5lib_H5_H5Fset_1libver_1bounds */
#ifdef __cplusplus

View File

@ -255,6 +255,33 @@ JNIEXPORT void JNICALL
Java_hdf_hdf5lib_H5_H5Fget_1mdc_1logging_1status
(JNIEnv *, jclass, jlong, jbooleanArray);
/*
* Class: hdf_hdf5lib_H5
* Method: H5Fset_dset_no_attrs_hint
* Signature: (JZ)V
*/
JNIEXPORT void JNICALL
Java_hdf_hdf5lib_H5_H5Fset_1dset_1no_1attrs_1hint
(JNIEnv *, jclass, jlong, jboolean);
/*
* Class: hdf_hdf5lib_H5
* Method: H5Fget_dset_no_attrs_hint
* Signature: (J)Z
*/
JNIEXPORT jboolean JNICALL
Java_hdf_hdf5lib_H5_H5Fget_1dset_1no_1attrs_1hint
(JNIEnv *, jclass, jlong);
/*
* Class: hdf_hdf5lib_H5
* Method: H5Fset_libver_bounds
* Signature: (JII)V
*/
JNIEXPORT void JNICALL
Java_hdf_hdf5lib_H5_H5Fset_1libver_1bounds
(JNIEnv *, jclass, jlong, jint, jint);
#ifdef __cplusplus
} /* end extern "C" */
#endif /* __cplusplus */

View File

@ -5946,6 +5946,51 @@ Java_hdf_hdf5lib_H5_H5Pget_1chunk_1opts
return (jint)opts;
} /* end Java_hdf_hdf5lib_H5_H5Pget_1chunk_1opts */
/*
* Class: hdf_hdf5lib_H5
* Method: H5Pset_dset_no_attrs_hint
* Signature: (JZ)V
*/
JNIEXPORT void JNICALL
Java_hdf_hdf5lib_H5_H5Pset_1dset_1no_1attrs_1hint
(JNIEnv *env, jclass clss, jlong dcpl_id, jboolean minimize)
{
herr_t retVal = -1;
hbool_t minimize_val;
if (minimize == JNI_TRUE)
minimize_val = TRUE;
else
minimize_val = FALSE;
retVal = H5Pset_dset_no_attrs_hint((hid_t)dcpl_id, (hbool_t)minimize_val);
if (retVal < 0)
h5libraryError(env);
}
/*
* Class: hdf_hdf5lib_H5
* Method: H5Pget_dset_no_attrs_hint
* Signature: (J)Z
*/
JNIEXPORT jboolean JNICALL
Java_hdf_hdf5lib_H5_H5Pget_1dset_1no_1attrs_1hint
(JNIEnv *env, jclass clss, jlong dcpl_id)
{
hbool_t minimize = FALSE;
jboolean bval = JNI_FALSE;
if (H5Pget_dset_no_attrs_hint((hid_t)dcpl_id, (hbool_t *)&minimize) < 0) {
h5libraryError(env);
}
else {
if (minimize == TRUE)
bval = JNI_TRUE;
} /* end else */
return bval;
}
#ifdef __cplusplus
} /* end extern "C" */
#endif /* __cplusplus */

View File

@ -1614,6 +1614,24 @@ JNIEXPORT jint JNICALL
Java_hdf_hdf5lib_H5_H5Pget_1chunk_1opts
(JNIEnv *, jclass, jlong);
/*
* Class: hdf_hdf5lib_H5
* Method: H5Pset_dset_no_attrs_hint
* Signature: (JZ)V
*/
JNIEXPORT void JNICALL
Java_hdf_hdf5lib_H5_H5Pset_1dset_1no_1attrs_1hint
(JNIEnv *, jclass, jlong, jboolean);
/*
* Class: hdf_hdf5lib_H5
* Method: H5Pget_dset_no_attrs_hint
* Signature: (J)Z
*/
JNIEXPORT jboolean JNICALL
Java_hdf_hdf5lib_H5_H5Pget_1dset_1no_1attrs_1hint
(JNIEnv *, jclass, jlong);
#ifdef __cplusplus
} /* end extern "C" */

View File

@ -13,6 +13,7 @@
package test;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
@ -211,4 +212,23 @@ public class TestH5Dplist {
assertTrue("testH5Dset_extent - H5.H5Dread: ", extend_dset_data[4][8] == 99);
}
@Test
public void testH5P_dset_no_attrs_hint() {
boolean ret_val_id = true;
_createPDataset(H5fid, H5dsid, "dset", HDF5Constants.H5P_DATASET_CREATE);
try {
ret_val_id = H5.H5Pget_dset_no_attrs_hint(H5dcpl_id);
assertFalse("H5P_dset_no_attrs_hint", ret_val_id);
H5.H5Pset_dset_no_attrs_hint(H5dcpl_id, true);
ret_val_id = H5.H5Pget_dset_no_attrs_hint(H5dcpl_id);
assertTrue("H5P_dset_no_attrs_hint", ret_val_id);
}
catch (Throwable err) {
err.printStackTrace();
fail("H5P_dset_no_attrs_hint: " + err);
}
}
}

View File

@ -14,6 +14,7 @@
package test;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
@ -68,19 +69,6 @@ public class TestH5Fbasic {
assertTrue(H5fid > 0);
}
@Test
public void testH5Fis_hdf5() {
boolean isH5 = false;
try {
isH5 = H5.H5Fis_hdf5(H5_FILE);
}
catch (Throwable err) {
fail("H5.H5Fis_hdf5 failed on " + H5_FILE + ": " + err);
}
assertTrue(isH5 == true);
}
@Test
public void testH5Fis_accessible() {
boolean isH5 = false;
@ -328,4 +316,20 @@ public class TestH5Fbasic {
fail("H5.H5Freset_mdc_hit_rate_stats: " + err);
}
}
@Test
public void testH5F_dset_no_attrs_hint() {
boolean ret_val_id = true;
try {
ret_val_id = H5.H5Fget_dset_no_attrs_hint(H5fid);
assertFalse("H5F_dset_no_attrs_hint", ret_val_id);
H5.H5Fset_dset_no_attrs_hint(H5fid, true);
ret_val_id = H5.H5Fget_dset_no_attrs_hint(H5fid);
assertTrue("H5F_dset_no_attrs_hint", ret_val_id);
}
catch (Throwable err) {
err.printStackTrace();
fail("H5F_dset_no_attrs_hint: " + err);
}
}
}

View File

@ -22,10 +22,12 @@ import java.io.File;
import hdf.hdf5lib.H5;
import hdf.hdf5lib.HDF5Constants;
import hdf.hdf5lib.exceptions.HDF5FunctionArgumentException;
import hdf.hdf5lib.structs.H5F_info2_t;
import org.junit.After;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TestName;
@ -54,11 +56,6 @@ public class TestH5Fparams {
H5.H5Fopen(null, HDF5Constants.H5F_ACC_RDWR, HDF5Constants.H5P_DEFAULT);
}
@Test(expected = NullPointerException.class)
public void testH5Fis_hdf5_null() throws Throwable {
H5.H5Fis_hdf5(null);
}
@Test(expected = NullPointerException.class)
public void testH5Fis_accessible_null() throws Throwable {
H5.H5Fis_accessible(null, -1);
@ -74,7 +71,7 @@ public class TestH5Fparams {
H5.H5Funmount(-1, null);
}
@Test
@Ignore
public void testH5Fis_hdf5_text() {
File txtFile = null;
boolean isH5 = false;
@ -195,7 +192,7 @@ public class TestH5Fparams {
HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
}
catch (Throwable err) {
fail("H5.H5Fopen: " + err);
fail("H5.H5Fcreate: " + err);
}
try {
@ -215,4 +212,42 @@ public class TestH5Fparams {
try {H5.H5Fclose(fid);} catch (Exception ex) {}
}
}
@Ignore//(expected = HDF5FunctionArgumentException.class)
public void testH5Fset_libver_bounds_invalidlow() throws Throwable {
long fid = -1;
try {
try {
fid = H5.H5Fcreate("test.h5", HDF5Constants.H5F_ACC_TRUNC,
HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
}
catch (Throwable err) {
fail("H5.H5Fcreate: " + err);
}
H5.H5Fset_libver_bounds(fid, 5, HDF5Constants.H5F_LIBVER_LATEST);
}
finally {
try {H5.H5Fclose(fid);} catch (Exception ex) {}
}
}
@Ignore//(expected = HDF5FunctionArgumentException.class)
public void testH5Fset_libver_bounds_invalidhigh() throws Throwable {
long fid = -1;
try {
try {
fid = H5.H5Fcreate("test.h5", HDF5Constants.H5F_ACC_TRUNC,
HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
}
catch (Throwable err) {
fail("H5.H5Fcreate: " + err);
}
H5.H5Fset_libver_bounds(fid, HDF5Constants.H5F_LIBVER_V110, HDF5Constants.H5F_LIBVER_V110+1);
}
finally {
try {H5.H5Fclose(fid);} catch (Exception ex) {}
}
}
}

View File

@ -1,7 +1,8 @@
JUnit version 4.11
.testH5P_dset_no_attrs_hint
.testH5Dset_extent
Time: XXXX
OK (1 test)
OK (2 tests)

View File

@ -1,7 +1,7 @@
JUnit version 4.11
.testH5Fget_mdc_size
.testH5Fget_mdc_hit_rate
.testH5Fis_hdf5
.testH5F_dset_no_attrs_hint
.testH5Fget_freespace
.testH5Fclose
.testH5Fget_filesize

View File

@ -9,10 +9,8 @@ JUnit version 4.11
.testH5Funmount_null
.testH5Fclose_negative
.testH5Fopen_null
.testH5Fis_hdf5_null
.testH5Fis_hdf5_text
Time: XXXX
OK (12 tests)
OK (10 tests)

View File

@ -1,4 +1,4 @@
HDF5 version 1.11.4 currently under development
version 1.11.4 currently under development
================================================================================
@ -243,6 +243,19 @@ Bug Fixes since HDF5-1.10.3 release
Library
-------
- Deleting attributes in dense storage
The library aborts with "infinite loop closing library" after
attributes in dense storage are created and then deleted.
When deleting the attribute nodes from the name index v2 B-tree,
if an attribute is found in the intermediate B-tree nodes,
which may be merged/redistributed in the process, we need to
free the dynamically allocated spaces for the intermediate
decoded attribute.
(VC - 2018/12/26, HDFFV-10659)
- Allow H5detect and H5make_libsettings to take a file as an argument.
Rather than only writing to stdout, add a command argument to name
@ -314,6 +327,15 @@ Bug Fixes since HDF5-1.10.3 release
Fortran
--------
- Added symbolic links libhdf5_hl_fortran.so to libhdf5hl_fortran.so and
libhdf5_hl_fortran.a to libhdf5hl_fortran.a in hdf5/lib directory for
autotools installs. These were added to match the name of the files
installed by cmake and the general pattern of hl lib files. We will
change the names of the installed lib files to the matching name in
the next major release.
(LRK - 2019/01/04, HDFFV-10596)
- Made Fortran specific subroutines PRIVATE in generic procedures.
Effected generic procedures were functions in H5A, H5D, H5P, H5R and H5T.

View File

@ -300,18 +300,49 @@ static herr_t
H5A__dense_fnd_cb(const H5A_t *attr, hbool_t *took_ownership, void *_user_attr)
{
H5A_t const **user_attr = (H5A_t const **)_user_attr; /* User data from v2 B-tree attribute lookup */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_STATIC_NOERR
FUNC_ENTER_STATIC
/* Check arguments */
HDassert(attr);
HDassert(user_attr);
HDassert(took_ownership);
/*
* If there is an attribute already stored in "user_attr",
* we need to free the dynamially allocated spaces for the
* attribute, otherwise we got infinite loop closing library due to
* outstanding allocation. (HDFFV-10659)
*
* This callback is used by H5A__dense_remove() to close/free the
* attribute stored in "user_attr" (via H5O__msg_free_real()) after
* the attribute node is deleted from the name index v2 B-tree.
* The issue is:
* When deleting the attribute node from the B-tree,
* if the attribute is found in the intermediate B-tree nodes,
* which may be merged/redistributed, we need to free the dynamically
* allocated spaces for the intermediate decoded attribute.
*/
if(*user_attr != NULL) {
H5A_t *old_attr = *user_attr;
if(old_attr->shared) {
/* Free any dynamically allocated items */
if(H5A__free(old_attr) < 0)
HGOTO_ERROR(H5E_ATTR, H5E_CANTRELEASE, FAIL, "can't release attribute info")
/* Destroy shared attribute struct */
old_attr->shared = H5FL_FREE(H5A_shared_t, old_attr->shared);
} /* end if */
old_attr = H5FL_FREE(H5A_t, old_attr);
} /* end if */
/* Take over attribute ownership */
*user_attr = attr;
*took_ownership = TRUE;
FUNC_LEAVE_NOAPI(SUCCEED)
done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5A__dense_fnd_cb() */

View File

@ -1493,6 +1493,9 @@ H5D__create_chunk_map_single(H5D_chunk_map_t *fm, const H5D_io_info_t
/* Set chunk location & hyperslab size */
for(u = 0; u < fm->f_ndims; u++) {
/* Validate this chunk dimension */
if(fm->layout->u.chunk.dim[u] == 0)
HGOTO_ERROR(H5E_DATASET, H5E_BADVALUE, FAIL, "chunk size must be > 0, dim = %u ", u)
HDassert(sel_start[u] == sel_end[u]);
chunk_info->scaled[u] = sel_start[u] / fm->layout->u.chunk.dim[u];
coords[u] = chunk_info->scaled[u] * fm->layout->u.chunk.dim[u];
@ -1580,6 +1583,9 @@ H5D__create_chunk_file_map_hyper(H5D_chunk_map_t *fm, const H5D_io_info_t
/* Set initial chunk location & hyperslab size */
for(u = 0; u < fm->f_ndims; u++) {
/* Validate this chunk dimension */
if(fm->layout->u.chunk.dim[u] == 0)
HGOTO_ERROR(H5E_DATASET, H5E_BADVALUE, FAIL, "chunk size must be > 0, dim = %u ", u)
scaled[u] = start_scaled[u] = sel_start[u] / fm->layout->u.chunk.dim[u];
coords[u] = start_coords[u] = scaled[u] * fm->layout->u.chunk.dim[u];
end[u] = (coords[u] + fm->chunk_dim[u]) - 1;
@ -4043,6 +4049,9 @@ H5D__chunk_allocate(const H5D_io_info_t *io_info, hbool_t full_overwrite, hsize_
* assume here that all elements of space_dim are > 0. This is checked at
* the top of this function. */
for(op_dim=0; op_dim<space_ndims; op_dim++) {
/* Validate this chunk dimension */
if(chunk_dim[op_dim] == 0)
HGOTO_ERROR(H5E_DATASET, H5E_BADVALUE, FAIL, "chunk size must be > 0, dim = %u ", op_dim)
min_unalloc[op_dim] = (old_dim[op_dim] + chunk_dim[op_dim] - 1) / chunk_dim[op_dim];
max_unalloc[op_dim] = (space_dim[op_dim] - 1) / chunk_dim[op_dim];
@ -4484,13 +4493,17 @@ H5D__chunk_update_old_edge_chunks(H5D_t *dset, hsize_t old_dim[])
/* Start off with this dimension marked as not needing to be modified */
new_full_dim[op_dim] = FALSE;
/* Validate this chunk dimension */
if(chunk_dim[op_dim] == 0)
HGOTO_ERROR(H5E_DATASET, H5E_BADVALUE, FAIL, "chunk size must be > 0, dim = %u ", op_dim)
/* Calculate offset of first previously incomplete chunk in this
* dimension */
old_edge_chunk_sc[op_dim] = (old_dim[op_dim] / chunk_dim[op_dim]);
old_edge_chunk_sc[op_dim] = (old_dim[op_dim] / chunk_dim[op_dim]);
/* Calculate the largest offset of chunks that might need to be
* modified in this dimension */
max_edge_chunk_sc[op_dim] = MIN((old_dim[op_dim] - 1) / chunk_dim[op_dim],
max_edge_chunk_sc[op_dim] = MIN((old_dim[op_dim] - 1) / chunk_dim[op_dim],
MAX((space_dim[op_dim] / chunk_dim[op_dim]), 1) - 1);
/* Check for old_dim aligned with chunk boundary in this dimension, if
@ -4626,6 +4639,8 @@ H5D__chunk_collective_fill(const H5D_t *dset, H5D_chunk_coll_info_t *chunk_info,
HGOTO_ERROR(H5E_INTERNAL, H5E_MPI, FAIL, "Can't retrieve MPI size")
/* Distribute evenly the number of blocks between processes. */
if(mpi_size == 0)
HGOTO_ERROR(H5E_DATASET, H5E_BADVALUE, FAIL, "Resulted in division by zero")
num_blocks = chunk_info->num_io / mpi_size; /* value should be the same on all procs */
/* after evenly distributing the blocks between processes, are
@ -5066,6 +5081,10 @@ H5D__chunk_prune_by_extent(H5D_t *dset, const hsize_t *old_dim)
HDmemset(min_mod_chunk_sc, 0, sizeof(min_mod_chunk_sc));
HDmemset(max_mod_chunk_sc, 0, sizeof(max_mod_chunk_sc));
for(op_dim = 0; op_dim < (unsigned)space_ndims; op_dim++) {
/* Validate this chunk dimension */
if(chunk_dim[op_dim] == 0)
HGOTO_ERROR(H5E_DATASET, H5E_BADVALUE, FAIL, "chunk size must be > 0, dim = %u ", op_dim)
/* Calculate the largest offset of chunks that might need to be
* modified in this dimension */
max_mod_chunk_sc[op_dim] = (old_dim[op_dim] - 1) / chunk_dim[op_dim];
@ -5721,9 +5740,12 @@ H5D__chunk_copy_cb(const H5D_chunk_rec_t *chunk_rec, void *_udata)
/* (background buffer has already been zeroed out, if not expanding) */
if(udata->cpy_info->expand_ref) {
size_t ref_count;
size_t dt_size;
/* Determine # of reference elements to copy */
ref_count = nbytes / H5T_get_size(udata->dt_src);
if((dt_size = H5T_get_size(udata->dt_src)) == 0)
HGOTO_ERROR(H5E_DATASET, H5E_BADVALUE, FAIL, "size must not be 0")
ref_count = nbytes / dt_size;
/* Copy the reference elements */
if(H5O_copy_expand_ref(udata->file_src, buf, udata->idx_info_dst->f, bkg, ref_count, H5T_get_ref_type(udata->dt_src), udata->cpy_info) < 0)

View File

@ -648,6 +648,8 @@ H5Lcreate_ud(hid_t link_loc_id, const char *link_name, H5L_type_t link_type,
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no link name specified")
if(link_type < H5L_TYPE_UD_MIN || link_type > H5L_TYPE_MAX)
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid link class")
if(!udata && udata_size)
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "udata cannot be NULL if udata_size is non-zero")
/* Check the group access property list */
if(H5P_DEFAULT == lcpl_id)

View File

@ -374,6 +374,7 @@ set (H5_CHECK_TESTS
atomic_reader
links_env
filenotclosed
del_many_dense_attrs
flushrefresh
)

View File

@ -520,6 +520,7 @@ set (test_CLEANFILES
flushrefresh_VERIFICATION_CHECKPOINT2
flushrefresh_VERIFICATION_DONE
filenotclosed.h5
del_many_dense_attrs.h5
atomic_data
accum_swmr_big.h5
ohdr_swmr.h5
@ -796,6 +797,7 @@ set_tests_properties (H5TEST-tcheck_version-release PROPERTIES
# atomic_reader
# links_env
# filenotclosed
# del_many_dense_attrs
# flushrefresh
##############################################################################
# autotools script tests
@ -803,7 +805,7 @@ set_tests_properties (H5TEST-tcheck_version-release PROPERTIES
# NOT CONVERTED accum_swmr_reader is used by accum.c.
# NOT CONVERTED atomic_writer and atomic_reader are standalone programs.
# links_env is used by testlinks_env.sh
# filenotclosed is used by test_filenotclosed.sh
# filenotclosed and del_many_dense_attrs are used by testabort_fail.sh
# NOT CONVERTED flushrefresh is used by testflushrefresh.sh.
# NOT CONVERTED use_append_chunk, use_append_mchunks and use_disable_mdc_flushes are used by test_usecases.sh
# NOT CONVERTED swmr_* files (besides swmr.c) are used by testswmr.sh.
@ -830,6 +832,23 @@ set_tests_properties (H5TEST-filenotclosed PROPERTIES
WORKING_DIRECTORY ${HDF5_TEST_BINARY_DIR}/H5TEST
)
#-- Adding test for del_many_dense_attrs
add_test (
NAME H5TEST-clear-del_many_dense_attrs-objects
COMMAND ${CMAKE_COMMAND}
-E remove
del_many_dense_attrs.h5
WORKING_DIRECTORY
${HDF5_TEST_BINARY_DIR}/H5TEST
)
set_tests_properties (H5TEST-clear-del_many_dense_attrs-objects PROPERTIES FIXTURES_SETUP del_many_dense_attrs_clear_objects)
add_test (NAME H5TEST-del_many_dense_attrs COMMAND $<TARGET_FILE:del_many_dense_attrs>)
set_tests_properties (H5TEST-del_many_dense_attrs PROPERTIES
FIXTURES_REQUIRED del_many_dense_attrs_clear_objects
ENVIRONMENT "srcdir=${HDF5_TEST_BINARY_DIR}/H5TEST"
WORKING_DIRECTORY ${HDF5_TEST_BINARY_DIR}/H5TEST
)
#-- Adding test for err_compat
if (HDF5_ENABLE_DEPRECATED_SYMBOLS)
add_test (NAME H5TEST-clear-err_compat-objects

View File

@ -29,12 +29,13 @@ AM_CPPFLAGS+=-I$(top_srcdir)/src -I$(top_builddir)/src
# testflushrefresh.sh: flushrefresh
# testswmr.sh: swmr*
# testvdsswmr.sh: vds_swmr*
# test_filenotclosed.sh: filenotclosed.c
# testabort_fail.sh: filenotclosed.c and del_many_dense_attrs.c
# test_filter_plugin.sh: filter_plugin.c
# test_usecases.sh: use_append_chunk, use_append_mchunks, use_disable_mdc_flushes
TEST_SCRIPT = testerror.sh testlibinfo.sh testcheck_version.sh testlinks_env.sh test_filenotclosed.sh\
testswmr.sh testvdsswmr.sh testflushrefresh.sh test_usecases.sh
SCRIPT_DEPEND = error_test$(EXEEXT) err_compat$(EXEEXT) links_env$(EXEEXT) filenotclosed$(EXEEXT) \
TEST_SCRIPT = testerror.sh testlibinfo.sh testcheck_version.sh testlinks_env.sh \
testswmr.sh testvdsswmr.sh testflushrefresh.sh test_usecases.sh testabort_fail.sh
SCRIPT_DEPEND = error_test$(EXEEXT) err_compat$(EXEEXT) links_env$(EXEEXT) \
filenotclosed$(EXEEXT) del_many_dense_attrs$(EXEEXT) \
flushrefresh$(EXEEXT) use_append_chunk$(EXEEXT) use_append_mchunks$(EXEEXT) use_disable_mdc_flushes$(EXEEXT) \
swmr_generator$(EXEEXT) swmr_reader$(EXEEXT) swmr_writer$(EXEEXT) \
swmr_remove_reader$(EXEEXT) swmr_remove_writer$(EXEEXT) swmr_addrem_writer$(EXEEXT) \
@ -68,7 +69,7 @@ TEST_PROG= testhdf5 \
# accum_swmr_reader is used by accum.c.
# atomic_writer and atomic_reader are standalone programs.
# links_env is used by testlinks_env.sh
# filenotclosed is used by test_filenotclosed.sh
# filenotclosed and del_many_dense_attrs are used by testabort_fail.sh
# flushrefresh is used by testflushrefresh.sh.
# use_append_chunk, use_append_mchunks and use_disable_mdc_flushes are used by test_usecases.sh
# swmr_* files (besides swmr.c) are used by testswmr.sh.
@ -78,7 +79,8 @@ TEST_PROG= testhdf5 \
# and this lets automake keep all its test programs in one place.
check_PROGRAMS=$(TEST_PROG) error_test err_compat tcheck_version \
testmeta accum_swmr_reader atomic_writer atomic_reader \
links_env filenotclosed flushrefresh use_append_chunk use_append_mchunks use_disable_mdc_flushes \
links_env filenotclosed del_many_dense_attrs flushrefresh \
use_append_chunk use_append_mchunks use_disable_mdc_flushes \
swmr_generator swmr_start_write swmr_reader swmr_writer swmr_remove_reader \
swmr_remove_writer swmr_addrem_writer swmr_sparse_reader swmr_sparse_writer \
swmr_check_compat_vfd vds_swmr_gen vds_swmr_reader vds_swmr_writer
@ -221,7 +223,7 @@ use_disable_mdc_flushes_SOURCES=use_disable_mdc_flushes.c
# Temporary files.
DISTCLEANFILES=testerror.sh testlibinfo.sh testcheck_version.sh testlinks_env.sh test_filter_plugin.sh \
testswmr.sh testvdsswmr.sh test_usecases.sh testflushrefresh.sh test_filenotclosed.sh \
testswmr.sh testvdsswmr.sh test_usecases.sh testflushrefresh.sh testabort_fail.sh \
test_vol_plugin.sh
include $(top_srcdir)/config/conclude.am

View File

@ -171,6 +171,7 @@ if (UNIX)
# atomic_writer
# atomic_reader
# filenotclosed
# del_many_dense_attrs
# flushrefresh
##############################################################################
# autotools script tests
@ -178,7 +179,7 @@ if (UNIX)
# NOT CONVERTED accum_swmr_reader is used by accum.c.
# NOT CONVERTED atomic_writer and atomic_reader are standalone programs.
# links_env is used by testlinks_env.sh
# filenotclosed is used by test_filenotclosed.sh
# filenotclosed and del_many_dense_attrs are used by testabort_fail.sh
# NOT CONVERTED flushrefresh is used by testflushrefresh.sh.
# NOT CONVERTED use_append_chunk, use_append_mchunks and use_disable_mdc_flushes are used by test_usecases.sh
# NOT CONVERTED swmr_* files (besides swmr.c) are used by testswmr.sh.

203
test/del_many_dense_attrs.c Normal file
View File

@ -0,0 +1,203 @@
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Copyright by The HDF Group. *
* Copyright by the Board of Trustees of the University of Illinois. *
* All rights reserved. *
* *
* This file is part of HDF5. The full HDF5 copyright notice, including *
* terms governing use, modification, and redistribution, is contained in *
* the COPYING file, which can be found at the root of the source code *
* distribution tree, or in https://support.hdfgroup.org/ftp/HDF5/releases. *
* If you do not have access to either file, you may request a copy from *
* help@hdfgroup.org. *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/*
* Purpose: Test to verify that the infinite loop closing library/abort failure
* is fixed when the application creates and removes dense attributes
* (See HDFFV-10659).
*/
#include "h5test.h"
/* The test file name */
const char *FILENAME[] = {
"del_many_dense_attrs",
NULL
};
#define ATTR_COUNT 64 /* The number of attributes */
/*-------------------------------------------------------------------------
* Function: catch_signal
*
* Purpose: The signal handler to catch the SIGABRT signal.
*
* Return: No return
*
* Programmer: Vailin Choi
*
*-------------------------------------------------------------------------
*/
static void catch_signal(int H5_ATTR_UNUSED signo)
{
HDexit(1);
} /* catch_signal() */
/*-------------------------------------------------------------------------
* Function: main
*
* Purpose: Test to verify that the infinite loop closing library/abort failure
* is fixed when the application creates and removes dense attributes
* (See HDFFV-10659).
*
* Return: Success: exit(EXIT_SUCCESS)
* Failure: exit(EXIT_FAILURE)
*
* Programmer: Vailin Choi; Dec 2018
*
*-------------------------------------------------------------------------
*/
int
main(void)
{
hid_t fid = -1; /* HDF5 File ID */
hid_t gid = -1; /* Group ID */
hid_t sid = -1; /* Dataspace ID */
hid_t aid = -1; /* Attribute ID */
hid_t tid = -1; /* Datatype ID */
hid_t fapl = -1; /* File access property lists */
hid_t gcpl = -1; /* Group creation property list */
char aname[50]; /* Name of attribute */
char *basename="attr"; /* Name prefix for attribute */
char filename[100]; /* File name */
int i; /* Local index variable */
/* Testing setup */
h5_reset();
/* To exit from the file for SIGABRT signal */
if(HDsignal(SIGABRT, catch_signal) == SIG_ERR)
TEST_ERROR
fapl = h5_fileaccess();
h5_fixname(FILENAME[0], fapl, filename, sizeof(filename));
/* Set to latest format */
if(H5Pset_libver_bounds(fapl, H5F_LIBVER_LATEST, H5F_LIBVER_LATEST) < 0)
TEST_ERROR
/* Create the file */
if((fid = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0)
TEST_ERROR
/* Close the file */
if(H5Fclose(fid) < 0)
TEST_ERROR
/* Re-open the file */
if((fid = H5Fopen(filename, H5F_ACC_RDWR, fapl)) < 0)
TEST_ERROR
/* Create the group creation property list */
if((gcpl = H5Pcreate(H5P_GROUP_CREATE)) < 0)
TEST_ERROR
/* Set to use dense storage for all attributes on the group */
if(H5Pset_attr_phase_change(gcpl, 0, 0) < 0)
TEST_ERROR
/* Create the group in the file */
if((gid = H5Gcreate2(fid, "group", H5P_DEFAULT, gcpl, H5P_DEFAULT)) < 0)
TEST_ERROR
/* Create dataspace */
if((sid = H5Screate(H5S_SCALAR)) < 0)
TEST_ERROR
/* Get a copy of the datatype */
if((tid = H5Tcopy(H5T_NATIVE_FLOAT)) < 0)
TEST_ERROR
/* Create attributes in the group */
for(i = ATTR_COUNT; i >= 0; i--) {
/* Set up the attribute name */
HDsprintf(aname, "%s%d", basename, i);
/* Create the attribute */
if((aid = H5Acreate2(gid, aname, tid, sid, H5P_DEFAULT, H5P_DEFAULT)) < 0)
TEST_ERROR
/* Write to the attribute */
if(H5Awrite(aid, tid, &i) < 0)
TEST_ERROR
/* Close the attribute */
if(H5Aclose(aid) < 0)
TEST_ERROR
}
/* Close the datatype */
if(H5Tclose(tid) < 0)
TEST_ERROR
/* Close the dataspace */
if(H5Sclose(sid) < 0)
TEST_ERROR
/* Close the group */
if(H5Gclose(gid) < 0)
TEST_ERROR
/* Close the group creation property list */
if(H5Pclose(gcpl) < 0)
TEST_ERROR
/* Close the file */
if(H5Fclose(fid) < 0)
TEST_ERROR
/* Re-open the file */
if((fid = H5Fopen(filename, H5F_ACC_RDWR, fapl)) < 0)
TEST_ERROR
/* Open the group */
if((gid = H5Gopen(fid, "group", H5P_DEFAULT)) < 0)
TEST_ERROR
/* Delete the attributes */
for (i = 0; i <= ATTR_COUNT; i++) {
/* Set up the attribute name */
HDsprintf(aname, "%s%d", basename, i);
/* Delete the attribute */
if(H5Adelete(gid, aname) < 0)
TEST_ERROR
} /* end for */
/* Close the group */
if(H5Gclose(gid) < 0)
TEST_ERROR
/* Close the file */
if(H5Fclose(fid) < 0)
TEST_ERROR
h5_cleanup(FILENAME, fapl);
return(EXIT_SUCCESS);
error:
H5E_BEGIN_TRY {
H5Gclose(gid);
H5Sclose(sid);
H5Tclose(tid);
H5Aclose(aid);
H5Fclose(fid);
H5Pclose(gcpl);
H5Pclose(fapl);
} H5E_END_TRY
return EXIT_FAILURE;
}

View File

@ -13072,15 +13072,13 @@ test_object_header_minimization_dcpl(void)
/*********/
if(NULL == h5_fixname(OHMIN_FILENAME_A, H5P_DEFAULT, filename, sizeof(filename)))
FAIL_PUTS_ERROR("unable to prepare filename")
TEST_ERROR
file_id = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
if (0 > file_id)
FAIL_PUTS_ERROR("unable to create test file\n");
if (0 > file_id) TEST_ERROR
dcpl_id = H5Pcreate(H5P_DATASET_CREATE);
if (0 > dcpl_id)
FAIL_PUTS_ERROR("unable to create DCPL\n");
if (0 > dcpl_id) TEST_ERROR
/*********/
/* TESTS */
@ -13088,28 +13086,23 @@ test_object_header_minimization_dcpl(void)
/* default value (not set explicitly)
*/
if (H5Pget_dset_no_attrs_hint(dcpl_id, &minimize) == FAIL)
FAIL_PUTS_ERROR("unable to get minimize value\n");
if (H5Pget_dset_no_attrs_hint(dcpl_id, &minimize) == FAIL) TEST_ERROR
if (FALSE != minimize)
FAIL_PUTS_ERROR("Expected FALSE default but was not!\n");
TEST_ERROR
/* FALSE-set value
*/
if (H5Pset_dset_no_attrs_hint(dcpl_id, FALSE) == FAIL)
FAIL_PUTS_ERROR("unable to set minimize value to FALSE\n");
if (H5Pget_dset_no_attrs_hint(dcpl_id, &minimize) == FAIL)
FAIL_PUTS_ERROR("unable to get minimize value\n");
if (H5Pset_dset_no_attrs_hint(dcpl_id, FALSE) == FAIL) TEST_ERROR
if (H5Pget_dset_no_attrs_hint(dcpl_id, &minimize) == FAIL) TEST_ERROR
if (FALSE != minimize)
FAIL_PUTS_ERROR("Expected FALSE default but was not!\n");
TEST_ERROR
/* TRUE-set value
*/
if (H5Pset_dset_no_attrs_hint(dcpl_id, TRUE) == FAIL)
FAIL_PUTS_ERROR("unable to set minimize value to TRUE\n");
if (H5Pget_dset_no_attrs_hint(dcpl_id, &minimize) == FAIL)
FAIL_PUTS_ERROR("unable to get minimize value\n");
if (H5Pset_dset_no_attrs_hint(dcpl_id, TRUE) == FAIL) TEST_ERROR
if (H5Pget_dset_no_attrs_hint(dcpl_id, &minimize) == FAIL) TEST_ERROR
if (TRUE != minimize)
FAIL_PUTS_ERROR("Expected TRUE default but was not!\n");
TEST_ERROR
/* error cases
*/
@ -13117,35 +13110,35 @@ test_object_header_minimization_dcpl(void)
ret = H5Pget_dset_no_attrs_hint(-1, &minimize);
} H5E_END_TRY;
if (ret == SUCCEED)
FAIL_PUTS_ERROR("Invalid DCPL ID should fail\n");
TEST_ERROR /* Invalid DCPL ID should fail */
H5E_BEGIN_TRY {
ret = H5Pset_dset_no_attrs_hint(-1, FALSE);
} H5E_END_TRY;
if (ret == SUCCEED)
FAIL_PUTS_ERROR("Invalid DCPL ID should fail\n");
TEST_ERROR /* Invalid DCPL ID should fail */
H5E_BEGIN_TRY {
ret = H5Pset_dset_no_attrs_hint(-1, TRUE);
} H5E_END_TRY;
if (ret == SUCCEED)
FAIL_PUTS_ERROR("Invalid DCPL ID should fail\n");
TEST_ERROR /* Invalid DCPL ID should fail */
H5E_BEGIN_TRY {
ret = H5Pget_dset_no_attrs_hint(dcpl_id, NULL);
} H5E_END_TRY;
if (ret == SUCCEED)
FAIL_PUTS_ERROR("NULL out pointer should fail\n");
TEST_ERROR /* NULL out pointer should fail */
/************/
/* TEARDOWN */
/************/
if (H5Fclose(file_id) == FAIL)
FAIL_PUTS_ERROR("can't close FILE");
TEST_ERROR
if (H5Pclose(dcpl_id) == FAIL)
FAIL_PUTS_ERROR("unable to close DCPL\n");
TEST_ERROR
PASSED();
return SUCCEED;

View File

@ -8823,6 +8823,12 @@ ud_link_errors(hid_t fapl, hbool_t new_format)
TEST_ERROR
} H5E_END_TRY
/* Try to create a link with H5Lcreate_ud that has a NULL udata pointer, but a non-zero udata_size value */
H5E_BEGIN_TRY {
if(H5Lcreate_ud(fid, "/ud_link", (H5L_type_t)UD_CBFAIL_TYPE, NULL, 1, H5P_DEFAULT, H5P_DEFAULT) >= 0)
TEST_ERROR
} H5E_END_TRY;
/* Create a user-defined link to the group. */
strcpy(group_name, "/group");
if(H5Lcreate_ud(fid, "/ud_link", (H5L_type_t)UD_CBFAIL_TYPE, &group_name, HDstrlen(group_name) + 1, H5P_DEFAULT, H5P_DEFAULT) < 0) FAIL_STACK_ERROR

View File

@ -753,7 +753,7 @@ put_attribute(hid_t loc_id, const char *attrname, const void *attrvalue, hid_t d
{
if((*attribute_id) < 0) {
hid_t id = -1;
id = H5Acreate(loc_id, attrname, datatype_id, dataspace_id, H5P_DEFAULT, H5P_DEFAULT);
id = H5Acreate2(loc_id, attrname, datatype_id, dataspace_id, H5P_DEFAULT, H5P_DEFAULT);
if(id < 0)
return FAIL;
*attribute_id = id;
@ -770,7 +770,7 @@ count_attributes(hid_t dset_id)
{
H5O_info_t info;
if(H5Oget_info(dset_id, &info, H5O_INFO_ALL) < 0)
if(H5Oget_info2(dset_id, &info, H5O_INFO_ALL) < 0)
return -1;
else
return (int)info.num_attrs; /* should never exceed int bounds */
@ -879,10 +879,10 @@ test_minimized_dset_ohdr_attribute_addition(hid_t fapl_id)
} H5E_END_TRY;
if(count != -1) TEST_ERROR
dset_id = H5Dcreate(file_id, "dataset", int_type_id, dspace_id, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
dset_id = H5Dcreate2(file_id, "dataset", int_type_id, dspace_id, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
if(dset_id < 0) TEST_ERROR
mindset_id = H5Dcreate(file_id, "mindataset", int_type_id, dspace_id, H5P_DEFAULT, dcpl_id, H5P_DEFAULT);
mindset_id = H5Dcreate2(file_id, "mindataset", int_type_id, dspace_id, H5P_DEFAULT, dcpl_id, H5P_DEFAULT);
if(mindset_id < 0) TEST_ERROR
/********************
@ -1121,13 +1121,13 @@ test_minimized_dset_ohdr_size_comparisons(hid_t fapl_id)
file_f_id = H5Fcreate(filename_a, H5F_ACC_TRUNC, H5P_DEFAULT, fapl_id);
if(file_f_id < 0) TEST_ERROR
dset_f_x_id = H5Dcreate(file_f_id, "default", int_type_id, dspace_id, H5P_DEFAULT, dcpl_default, H5P_DEFAULT);
dset_f_x_id = H5Dcreate2(file_f_id, "default", int_type_id, dspace_id, H5P_DEFAULT, dcpl_default, H5P_DEFAULT);
if(dset_f_x_id < 0) TEST_ERROR
dset_f_N_id = H5Dcreate(file_f_id, "dsetNOT", int_type_id, dspace_id, H5P_DEFAULT, dcpl_dontmin, H5P_DEFAULT);
dset_f_N_id = H5Dcreate2(file_f_id, "dsetNOT", int_type_id, dspace_id, H5P_DEFAULT, dcpl_dontmin, H5P_DEFAULT);
if(dset_f_N_id < 0) TEST_ERROR
dset_f_Y_id = H5Dcreate(file_f_id, "dsetMIN", int_type_id, dspace_id, H5P_DEFAULT, dcpl_minimize, H5P_DEFAULT);
dset_f_Y_id = H5Dcreate2(file_f_id, "dsetMIN", int_type_id, dspace_id, H5P_DEFAULT, dcpl_minimize, H5P_DEFAULT);
if(dset_f_x_id < 0) TEST_ERROR
file_F_id = H5Fcreate(filename_b, H5F_ACC_TRUNC, H5P_DEFAULT, fapl_id);
@ -1135,13 +1135,13 @@ test_minimized_dset_ohdr_size_comparisons(hid_t fapl_id)
ret = H5Fset_dset_no_attrs_hint(file_F_id, TRUE);
if(ret < 0) TEST_ERROR
dset_F_x_id = H5Dcreate(file_F_id, "default", int_type_id, dspace_id, H5P_DEFAULT, dcpl_default, H5P_DEFAULT);
dset_F_x_id = H5Dcreate2(file_F_id, "default", int_type_id, dspace_id, H5P_DEFAULT, dcpl_default, H5P_DEFAULT);
if(dset_F_x_id < 0) TEST_ERROR
dset_F_N_id = H5Dcreate(file_F_id, "dsetNOT", int_type_id, dspace_id, H5P_DEFAULT, dcpl_dontmin, H5P_DEFAULT);
dset_F_N_id = H5Dcreate2(file_F_id, "dsetNOT", int_type_id, dspace_id, H5P_DEFAULT, dcpl_dontmin, H5P_DEFAULT);
if(dset_F_N_id < 0) TEST_ERROR
dset_F_Y_id = H5Dcreate(file_F_id, "dsetMIN", int_type_id, dspace_id, H5P_DEFAULT, dcpl_minimize, H5P_DEFAULT);
dset_F_Y_id = H5Dcreate2(file_F_id, "dsetMIN", int_type_id, dspace_id, H5P_DEFAULT, dcpl_minimize, H5P_DEFAULT);
if(dset_F_Y_id < 0) TEST_ERROR
/*********
@ -1276,16 +1276,16 @@ test_minimized_dset_ohdr_with_filter(hid_t fapl_id)
file_id = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl_id);
if(file_id < 0) TEST_ERROR
dset_xx_id = H5Dcreate(file_id, "xx", dtype_id, dspace_id, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
dset_xx_id = H5Dcreate2(file_id, "xx", dtype_id, dspace_id, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
if(dset_xx_id < 0) TEST_ERROR
dset_mx_id = H5Dcreate(file_id, "Mx", dtype_id, dspace_id, H5P_DEFAULT, dcpl_mx_id, H5P_DEFAULT);
dset_mx_id = H5Dcreate2(file_id, "Mx", dtype_id, dspace_id, H5P_DEFAULT, dcpl_mx_id, H5P_DEFAULT);
if(dset_mx_id < 0) TEST_ERROR
dset_xZ_id = H5Dcreate(file_id, "xZ", dtype_id, dspace_id, H5P_DEFAULT, dcpl_xZ_id, H5P_DEFAULT);
dset_xZ_id = H5Dcreate2(file_id, "xZ", dtype_id, dspace_id, H5P_DEFAULT, dcpl_xZ_id, H5P_DEFAULT);
if(dset_xZ_id < 0) TEST_ERROR
dset_mZ_id = H5Dcreate(file_id, "MZ", dtype_id, dspace_id, H5P_DEFAULT, dcpl_mZ_id, H5P_DEFAULT);
dset_mZ_id = H5Dcreate2(file_id, "MZ", dtype_id, dspace_id, H5P_DEFAULT, dcpl_mZ_id, H5P_DEFAULT);
if(dset_mZ_id < 0) TEST_ERROR
/*********
@ -1435,18 +1435,18 @@ test_minimized_dset_ohdr_modification_times(hid_t _fapl_id)
file_id = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl_id);
if(file_id < 0) TEST_ERROR
dset_xx_id = H5Dcreate( file_id, "xx", dtype_id, dspace_id, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
dset_xx_id = H5Dcreate2( file_id, "xx", dtype_id, dspace_id, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
if(dset_xx_id < 0) TEST_ERROR
dset_mx_id = H5Dcreate(file_id, "mx", dtype_id, dspace_id, H5P_DEFAULT, dcpl_mx_id, H5P_DEFAULT);
dset_mx_id = H5Dcreate2(file_id, "mx", dtype_id, dspace_id, H5P_DEFAULT, dcpl_mx_id, H5P_DEFAULT);
if(dset_mx_id < 0) TEST_ERROR
dset_xT_id = H5Dcreate(file_id, "xT", dtype_id, dspace_id, H5P_DEFAULT, dcpl_xT_id, H5P_DEFAULT);
dset_xT_id = H5Dcreate2(file_id, "xT", dtype_id, dspace_id, H5P_DEFAULT, dcpl_xT_id, H5P_DEFAULT);
if(dset_xT_id < 0) TEST_ERROR
dset_mT_id = H5Dcreate(file_id, "mT", dtype_id, dspace_id, H5P_DEFAULT, dcpl_mT_id, H5P_DEFAULT);
dset_mT_id = H5Dcreate2(file_id, "mT", dtype_id, dspace_id, H5P_DEFAULT, dcpl_mT_id, H5P_DEFAULT);
if(dset_mT_id < 0) TEST_ERROR
dset_mN_id = H5Dcreate(file_id, "mN", dtype_id, dspace_id, H5P_DEFAULT, dcpl_mN_id, H5P_DEFAULT);
dset_mN_id = H5Dcreate2(file_id, "mN", dtype_id, dspace_id, H5P_DEFAULT, dcpl_mN_id, H5P_DEFAULT);
if(dset_mN_id < 0) TEST_ERROR
/* ----- *
@ -1561,7 +1561,7 @@ test_minimized_dset_ohdr_fillvalue_backwards_compatability(hid_t _fapl_id)
file_id = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl_id);
if(file_id < 0) TEST_ERROR
dset_0_id = H5Dcreate(file_id, "fullrange", dtype_id, dspace_id, H5P_DEFAULT, dcpl_id, H5P_DEFAULT);
dset_0_id = H5Dcreate2(file_id, "fullrange", dtype_id, dspace_id, H5P_DEFAULT, dcpl_id, H5P_DEFAULT);
if(dset_0_id < 0) TEST_ERROR
/* Close file and re-open with different libver bounds.
@ -1576,7 +1576,7 @@ test_minimized_dset_ohdr_fillvalue_backwards_compatability(hid_t _fapl_id)
file_id = H5Fopen(filename, H5F_ACC_RDWR, fapl_id);
if(file_id < 0) TEST_ERROR
dset_1_id = H5Dcreate(file_id, "upperrange", dtype_id, dspace_id, H5P_DEFAULT, dcpl_id, H5P_DEFAULT);
dset_1_id = H5Dcreate2(file_id, "upperrange", dtype_id, dspace_id, H5P_DEFAULT, dcpl_id, H5P_DEFAULT);
if(dset_1_id < 0) TEST_ERROR
/* re-open "fullrange" dataset

View File

@ -13,6 +13,9 @@
#
# Test to verify that the assertion/abort failure is fixed when the application
# does not close the file. (See HDFFV-10160)
#
# Test to verify that the infinite loop closing library/abort failure is fixed
# when the application creates and removes dense attributes (See HDFFV-10659)
srcdir=@srcdir@
@ -20,22 +23,44 @@ nerrors=0
##############################################################################
##############################################################################
### T H E T E S T ###
### T H E T E S T S ###
##############################################################################
##############################################################################
#
#
echo "Testing file not closed assertion/abort failure"
TEST_NAME=filenotclosed # The test name
TEST_BIN=`pwd`/$TEST_NAME # The path of the test binary
TEST_BIN=`pwd`/$TEST_NAME # The path of the test binary
#
# Run the test
#$RUNSERIAL $TEST_BIN >/dev/null 2>&1
$RUNSERIAL $TEST_BIN 2>&1
$RUNSERIAL $TEST_BIN >/dev/null 2>&1
exitcode=$?
if [ $exitcode -eq 0 ]; then
echo "Test PASSED"
else
echo "Test FAILED"
nerrors="`expr $nerrors + 1`"
echo "***Error encountered***"
fi
exit $nerrors
#
#
echo "Testing infinite loop closing library/abort failure"
TEST_NAME=del_many_dense_attrs # The test name
TEST_BIN=`pwd`/$TEST_NAME # The path of the test binary
# Run the test
$RUNSERIAL $TEST_BIN >/dev/null 2>&1
exitcode=$?
if [ $exitcode -eq 0 ]; then
echo "Test PASSED"
else
echo "Test FAILED"
nerrors="`expr $nerrors + 1`"
fi
#
#
if test $nerrors -eq 0 ; then
echo "All tests for abort failure passed."
exit 0
else
echo "Tests for abort failure failed with $nerrors errors."
exit 1
fi

View File

@ -22,9 +22,9 @@ foreach (testp ${H5P_TESTS})
add_test (NAME TEST_PAR_${testp} COMMAND ${MPIEXEC_EXECUTABLE} ${MPIEXEC_NUMPROC_FLAG} ${MPIEXEC_MAX_NUMPROCS} ${MPIEXEC_PREFLAGS} $<TARGET_FILE:${testp}> ${MPIEXEC_POSTFLAGS})
endforeach ()
# The following will only be correct on windows shared
#set_tests_properties (TEST_PAR_t_pflush1 PROPERTIES WILL_FAIL "true")
set_property (TEST TEST_PAR_t_pflush1 PROPERTY PASS_REGULAR_EXPRESSION "PASSED")
# The t_pflush1 test is hard-coded to fail.
set_tests_properties (TEST_PAR_t_pflush1 PROPERTIES WILL_FAIL "true")
#set_property (TEST TEST_PAR_t_pflush1 PROPERTY PASS_REGULAR_EXPRESSION "PASSED")
set_tests_properties (TEST_PAR_t_pflush2 PROPERTIES DEPENDS TEST_PAR_t_pflush1)
##############################################################################

View File

@ -15,11 +15,11 @@
* Programmer: Leon Arber <larber@uiuc.edu>
* Sept. 28, 2006.
*
* Purpose: This is the first half of a two-part test that makes sure
* that a file can be read after a parallel application crashes as long
* as the file was flushed first. We simulate a crash by
* calling _exit(0) since this doesn't flush HDF5 caches but
* still exits with success.
* Purpose: This is the first half of a two-part test that makes sure
* that a file can be read after a parallel application crashes
* as long as the file was flushed first. We simulate a crash by
* calling _exit() since this doesn't flush HDF5 caches but
* still exits with success.
*/
#include "h5test.h"
@ -29,171 +29,190 @@ const char *FILENAME[] = {
NULL
};
static double the_data[100][100];
static int data_g[100][100];
#define N_GROUPS 100
/*-------------------------------------------------------------------------
* Function: create_file
* Function: create_test_file
*
* Purpose: Creates file used in part 1 of the test
* Purpose: Creates the file used in part 1 of the test
*
* Return: Success: 0
* Return: Success: A valid file ID
* Failure: H5I_INVALID_HID
*
* Failure: 1
*
* Programmer: Leon Arber
* Programmer: Leon Arber
* Sept. 26, 2006
*
* Modifications:
*
*-------------------------------------------------------------------------
*/
static hid_t
create_file(char* name, hid_t fapl)
create_test_file(char *name, hid_t fapl_id)
{
hid_t file, dcpl, space, dset, groups, grp, plist;
hsize_t ds_size[2] = {100, 100};
hsize_t ch_size[2] = {5, 5};
hsize_t i, j;
hid_t fid = H5I_INVALID_HID;
hid_t dcpl_id = H5I_INVALID_HID;
hid_t sid = H5I_INVALID_HID;
hid_t did = H5I_INVALID_HID;
hid_t top_level_gid = H5I_INVALID_HID;
hid_t gid = H5I_INVALID_HID;
hid_t dxpl_id = H5I_INVALID_HID;
hsize_t dims[2] = {100, 100};
hsize_t chunk_dims[2] = {5, 5};
hsize_t i, j;
if((file=H5Fcreate(name, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0) goto error;
if((fid = H5Fcreate(name, H5F_ACC_TRUNC, H5P_DEFAULT, fapl_id)) < 0)
goto error;
/* Create a chunked dataset */
if((dcpl = H5Pcreate(H5P_DATASET_CREATE)) < 0) goto error;
if(H5Pset_chunk(dcpl, 2, ch_size) < 0) goto error;
if((space = H5Screate_simple(2, ds_size, NULL)) < 0) goto error;
if((dset = H5Dcreate2(file, "dset", H5T_NATIVE_FLOAT, space, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0)
goto error;
plist = H5Pcreate(H5P_DATASET_XFER);
H5Pset_dxpl_mpio(plist, H5FD_MPIO_COLLECTIVE);
if((dcpl_id = H5Pcreate(H5P_DATASET_CREATE)) < 0)
goto error;
if(H5Pset_chunk(dcpl_id, 2, chunk_dims) < 0)
goto error;
if((sid = H5Screate_simple(2, dims, NULL)) < 0)
goto error;
if((did = H5Dcreate2(fid, "dset", H5T_NATIVE_INT, sid, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0)
goto error;
if((dxpl_id = H5Pcreate(H5P_DATASET_XFER)) < 0)
goto error;
if(H5Pset_dxpl_mpio(dxpl_id, H5FD_MPIO_COLLECTIVE) < 0)
goto error;
/* Write some data */
for(i = 0; i < ds_size[0]; i++) {
/*
* The extra cast in the following statement is a bug workaround
* for the Win32 version 5.0 compiler.
* 1998-11-06 ptl
*/
for(j = 0; j < ds_size[1]; j++)
the_data[i][j] = (double)(hssize_t)i/(hssize_t)(j+1);
}
if(H5Dwrite(dset, H5T_NATIVE_DOUBLE, space, space, plist, the_data) < 0) goto error;
for(i = 0; i < dims[0]; i++)
for(j = 0; j < dims[1]; j++)
data_g[i][j] = (int)(i + (i * j) + j);
if(H5Dwrite(did, H5T_NATIVE_INT, sid, sid, dxpl_id, data_g) < 0)
goto error;
/* Create some groups */
if((groups = H5Gcreate2(file, "some_groups", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) goto error;
for(i = 0; i < 100; i++) {
sprintf(name, "grp%02u", (unsigned)i);
if((grp = H5Gcreate2(groups, name, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) goto error;
if(H5Gclose(grp) < 0) goto error;
if((top_level_gid = H5Gcreate2(fid, "some_groups", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0)
goto error;
for(i = 0; i < N_GROUPS; i++) {
HDsprintf(name, "grp%02u", (unsigned)i);
if((gid = H5Gcreate2(top_level_gid, name, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0)
goto error;
if(H5Gclose(gid) < 0)
goto error;
}
return file;
return fid;
error:
HD_exit(1);
}
return H5I_INVALID_HID;
} /* end create_test_file() */
/*-------------------------------------------------------------------------
* Function: main
*
* Purpose: Part 1 of a two-part H5Fflush() test.
* Purpose: Part 1 of a two-part parallel H5Fflush() test.
*
* Return: Success: 0
* Return: EXIT_FAILURE (always)
*
* Failure: 1
*
* Programmer: Robb Matzke
* Programmer: Robb Matzke
* Friday, October 23, 1998
*
* Modifications:
* Leon Arber
* Sept. 26, 2006, expand test to check for failure if H5Fflush is not called.
*
*
*-------------------------------------------------------------------------
*/
int
main(int argc, char* argv[])
{
hid_t file1, file2, fapl;
MPI_File *mpifh_p = NULL;
char name[1024];
const char *envval = NULL;
int mpi_size, mpi_rank;
MPI_Comm comm = MPI_COMM_WORLD;
MPI_Info info = MPI_INFO_NULL;
hid_t fid1 = H5I_INVALID_HID;
hid_t fid2 = H5I_INVALID_HID;
hid_t fapl_id = H5I_INVALID_HID;
MPI_File *mpifh_p = NULL;
char name[1024];
const char *envval = NULL;
int mpi_size;
int mpi_rank;
MPI_Comm comm = MPI_COMM_WORLD;
MPI_Info info = MPI_INFO_NULL;
MPI_Init(&argc, &argv);
MPI_Comm_size(comm, &mpi_size);
MPI_Comm_rank(comm, &mpi_rank);
fapl = H5Pcreate(H5P_FILE_ACCESS);
H5Pset_fapl_mpio(fapl, comm, info);
if(mpi_rank == 0)
TESTING("H5Fflush (part1)");
TESTING("H5Fflush (part1)");
/* Don't run using the split VFD */
envval = HDgetenv("HDF5_DRIVER");
if(envval == NULL)
envval = "nomatch";
if(HDstrcmp(envval, "split")) {
if(!HDstrcmp(envval, "split")) {
if(mpi_rank == 0) {
SKIPPED();
HDputs(" Test not compatible with current Virtual File Driver");
}
MPI_Finalize();
HDexit(EXIT_FAILURE);
}
if((fapl_id = H5Pcreate(H5P_FILE_ACCESS)) < 0)
goto error;
if(H5Pset_fapl_mpio(fapl_id, comm, info) < 0)
goto error;
/* Create the file */
h5_fixname(FILENAME[0], fapl, name, sizeof name);
file1 = create_file(name, fapl);
h5_fixname(FILENAME[0], fapl_id, name, sizeof(name));
if((fid1 = create_test_file(name, fapl_id)) < 0)
goto error;
/* Flush and exit without closing the library */
if(H5Fflush(file1, H5F_SCOPE_GLOBAL) < 0) goto error;
if(H5Fflush(fid1, H5F_SCOPE_GLOBAL) < 0)
goto error;
/* Create the other file which will not be flushed */
h5_fixname(FILENAME[1], fapl, name, sizeof name);
file2 = create_file(name, fapl);
h5_fixname(FILENAME[1], fapl_id, name, sizeof(name));
if((fid2 = create_test_file(name, fapl_id)) < 0)
goto error;
if(mpi_rank == 0)
PASSED();
fflush(stdout);
fflush(stderr);
} /* end if */
else {
SKIPPED();
puts(" Test not compatible with current Virtual File Driver");
} /* end else */
/*
* Some systems like AIX do not like files not closed when MPI_Finalize
HDfflush(stdout);
HDfflush(stderr);
/* Some systems like AIX do not like files not being closed when MPI_Finalize
* is called. So, we need to get the MPI file handles, close them by hand.
* Then the _exit is still needed to stop at_exit from happening in some systems.
* Note that MPIO VFD returns the address of the file-handle in the VFD struct
* because MPI_File_close wants to modify the file-handle variable.
*/
/* close file1 */
if(H5Fget_vfd_handle(file1, fapl, (void **)&mpifh_p) < 0) {
printf("H5Fget_vfd_handle for file1 failed\n");
goto error;
} /* end if */
if(MPI_File_close(mpifh_p) != MPI_SUCCESS) {
printf("MPI_File_close for file1 failed\n");
goto error;
} /* end if */
/* close file2 */
if(H5Fget_vfd_handle(file2, fapl, (void **)&mpifh_p) < 0) {
printf("H5Fget_vfd_handle for file2 failed\n");
goto error;
} /* end if */
if(MPI_File_close(mpifh_p) != MPI_SUCCESS) {
printf("MPI_File_close for file2 failed\n");
goto error;
} /* end if */
/* Close file 1 */
if(H5Fget_vfd_handle(fid1, fapl_id, (void **)&mpifh_p) < 0)
goto error;
if(MPI_File_close(mpifh_p) != MPI_SUCCESS)
goto error;
fflush(stdout);
fflush(stderr);
HD_exit(0);
/* Close file 2 */
if(H5Fget_vfd_handle(fid2, fapl_id, (void **)&mpifh_p) < 0)
goto error;
if(MPI_File_close(mpifh_p) != MPI_SUCCESS)
goto error;
HDfflush(stdout);
HDfflush(stderr);
/* Always exit with a failure code!
*
* In accordance with the standard, not having all processes
* call MPI_Finalize() can be considered an error, so mpiexec
* et al. may indicate failure on return. It's much easier to
* always ignore the failure condition than to handle some
* platforms returning success and others failure.
*/
HD_exit(EXIT_FAILURE);
error:
fflush(stdout);
fflush(stderr);
HD_exit(1);
}
HDfflush(stdout);
HDfflush(stderr);
HDprintf("*** ERROR ***\n");
HDprintf("THERE WAS A REAL ERROR IN t_pflush1.\n");
HD_exit(EXIT_FAILURE);
} /* end main() */

View File

@ -30,116 +30,124 @@ const char *FILENAME[] = {
NULL
};
static double the_data[100][100];
static int data_g[100][100];
#define N_GROUPS 100
/*-------------------------------------------------------------------------
* Function: check_file
* Function: check_test_file
*
* Purpose: Part 2 of a two-part H5Fflush() test.
* Purpose: Part 2 of a two-part H5Fflush() test.
*
* Return: Success: 0
* Return: SUCCEED/FAIL
*
* Failure: 1
*
* Programmer: Leon Arber
* Programmer: Leon Arber
* Sept. 26, 2006.
*
*-------------------------------------------------------------------------
*/
static int
check_file(char* name, hid_t fapl)
static herr_t
check_test_file(char* name, hid_t fapl_id)
{
hid_t file, space, dset, groups, grp, plist;
hsize_t ds_size[2];
double error;
hsize_t i, j;
hid_t fid = H5I_INVALID_HID;
hid_t sid = H5I_INVALID_HID;
hid_t did = H5I_INVALID_HID;
hid_t top_level_gid = H5I_INVALID_HID;
hid_t gid = H5I_INVALID_HID;
hid_t dxpl_id = H5I_INVALID_HID;
hsize_t dims[2];
int val;
hsize_t i, j;
plist = H5Pcreate(H5P_DATASET_XFER);
H5Pset_dxpl_mpio(plist, H5FD_MPIO_COLLECTIVE);
if((file = H5Fopen(name, H5F_ACC_RDONLY, fapl)) < 0) goto error;
if((dxpl_id = H5Pcreate(H5P_DATASET_XFER)) < 0)
goto error;
if(H5Pset_dxpl_mpio(dxpl_id, H5FD_MPIO_COLLECTIVE) < 0)
goto error;
if((fid = H5Fopen(name, H5F_ACC_RDONLY, fapl_id)) < 0)
goto error;
/* Open the dataset */
if((dset = H5Dopen2(file, "dset", H5P_DEFAULT)) < 0) goto error;
if((space = H5Dget_space(dset)) < 0) goto error;
if(H5Sget_simple_extent_dims(space, ds_size, NULL) < 0) goto error;
assert(100==ds_size[0] && 100==ds_size[1]);
if((did = H5Dopen2(fid, "dset", H5P_DEFAULT)) < 0)
goto error;
if((sid = H5Dget_space(did)) < 0)
goto error;
if(H5Sget_simple_extent_dims(sid, dims, NULL) < 0)
goto error;
HDassert(100 == dims[0] && 100 == dims[1]);
/* Read some data */
if (H5Dread(dset, H5T_NATIVE_DOUBLE, space, space, plist,
the_data) < 0) goto error;
for (i=0; i<ds_size[0]; i++) {
for (j=0; j<ds_size[1]; j++) {
/*
* The extra cast in the following statement is a bug workaround
* for the Win32 version 5.0 compiler.
* 1998-11-06 ptl
*/
error = fabs(the_data[i][j]-(double)(hssize_t)i/((hssize_t)j+1));
if (error>0.0001) {
H5_FAILED();
printf(" dset[%lu][%lu] = %g\n",
(unsigned long)i, (unsigned long)j, the_data[i][j]);
printf(" should be %g\n",
(double)(hssize_t)i/(hssize_t)(j+1));
goto error;
}
}
if(H5Dread(did, H5T_NATIVE_INT, sid, sid, dxpl_id, data_g) < 0)
goto error;
for(i = 0; i < dims[0]; i++) {
for(j = 0; j < dims[1]; j++) {
val = (int)(i + (i * j) + j);
if(data_g[i][j] != val) {
H5_FAILED();
HDprintf(" data_g[%lu][%lu] = %d\n", (unsigned long)i, (unsigned long)j, data_g[i][j]);
HDprintf(" should be %d\n", val);
}
}
}
/* Open some groups */
if((groups = H5Gopen2(file, "some_groups", H5P_DEFAULT)) < 0) goto error;
for(i = 0; i < 100; i++) {
sprintf(name, "grp%02u", (unsigned)i);
if((grp = H5Gopen2(groups, name, H5P_DEFAULT)) < 0) goto error;
if(H5Gclose(grp) < 0) goto error;
if((top_level_gid = H5Gopen2(fid, "some_groups", H5P_DEFAULT)) < 0)
goto error;
for(i = 0; i < N_GROUPS; i++) {
HDsprintf(name, "grp%02u", (unsigned)i);
if((gid = H5Gopen2(top_level_gid, name, H5P_DEFAULT)) < 0)
goto error;
if(H5Gclose(gid) < 0)
goto error;
}
if(H5Gclose(groups) < 0) goto error;
if(H5Dclose(dset) < 0) goto error;
if(H5Fclose(file) < 0) goto error;
if(H5Pclose(plist) < 0) goto error;
if(H5Sclose(space) < 0) goto error;
if(H5Gclose(top_level_gid) < 0)
goto error;
if(H5Dclose(did) < 0)
goto error;
if(H5Fclose(fid) < 0)
goto error;
if(H5Pclose(dxpl_id) < 0)
goto error;
if(H5Sclose(sid) < 0)
goto error;
return 0;
return SUCCEED;
error:
H5E_BEGIN_TRY {
H5Pclose(plist);
H5Gclose(groups);
H5Dclose(dset);
H5Fclose(file);
H5Sclose(space);
H5Pclose(dxpl_id);
H5Gclose(top_level_gid);
H5Dclose(did);
H5Fclose(fid);
H5Sclose(sid);
H5Gclose(gid);
} H5E_END_TRY;
return 1;
}
return FAIL;
} /* end check_test_file() */
/*-------------------------------------------------------------------------
* Function: main
* Function: main
*
* Purpose: Part 2 of a two-part H5Fflush() test.
* Purpose: Part 2 of a two-part H5Fflush() test.
*
* Return: Success: 0
* Return: EXIT_SUCCESS/EXIT_FAIL
*
* Failure: 1
*
* Programmer: Robb Matzke
* Programmer: Robb Matzke
* Friday, October 23, 1998
*
* Modifications:
* Leon Arber
* Sept. 26, 2006, expand to check for case where the was file not flushed.
*
*-------------------------------------------------------------------------
*/
int
main(int argc, char* argv[])
main(int argc, char *argv[])
{
hid_t fapl_id1 = H5I_INVALID_HID;
hid_t fapl_id2 = H5I_INVALID_HID;
H5E_auto2_t func;
char name[1024];
char name[1024];
const char *envval = NULL;
int mpi_size, mpi_rank;
int mpi_size;
int mpi_rank;
MPI_Comm comm = MPI_COMM_WORLD;
MPI_Info info = MPI_INFO_NULL;
@ -148,69 +156,70 @@ main(int argc, char* argv[])
MPI_Comm_rank(comm, &mpi_rank);
if(mpi_rank == 0)
TESTING("H5Fflush (part2 with flush)");
TESTING("H5Fflush (part2 with flush)");
/* Don't run this test using the core or split file drivers */
/* Don't run using the split VFD */
envval = HDgetenv("HDF5_DRIVER");
if (envval == NULL)
if(envval == NULL)
envval = "nomatch";
if (HDstrcmp(envval, "core") && HDstrcmp(envval, "split")) {
hid_t fapl1, fapl2;
fapl1 = H5Pcreate(H5P_FILE_ACCESS);
H5Pset_fapl_mpio(fapl1, comm, info);
fapl2 = H5Pcreate(H5P_FILE_ACCESS);
H5Pset_fapl_mpio(fapl2, comm, info);
/* Check the case where the file was flushed */
h5_fixname(FILENAME[0], fapl1, name, sizeof name);
if(check_file(name, fapl1))
{
H5_FAILED()
goto error;
}
else if(mpi_rank == 0)
{
PASSED()
}
/* Check the case where the file was not flushed. This should give an error
* so we turn off the error stack temporarily */
if(mpi_rank == 0)
TESTING("H5Fflush (part2 without flush)");
H5Eget_auto2(H5E_DEFAULT,&func,NULL);
H5Eset_auto2(H5E_DEFAULT, NULL, NULL);
h5_fixname(FILENAME[1], fapl2, name, sizeof name);
if(check_file(name, fapl2))
{
if(mpi_rank == 0)
{
PASSED()
}
}
else
{
H5_FAILED()
goto error;
}
H5Eset_auto2(H5E_DEFAULT, func, NULL);
h5_clean_files(&FILENAME[0], fapl1);
h5_clean_files(&FILENAME[1], fapl2);
if(!HDstrcmp(envval, "split")) {
if(mpi_rank == 0) {
SKIPPED();
HDputs(" Test not compatible with current Virtual File Driver");
}
MPI_Finalize();
HDexit(EXIT_FAILURE);
}
else
{
SKIPPED();
puts(" Test not compatible with current Virtual File Driver");
if((fapl_id1 = H5Pcreate(H5P_FILE_ACCESS)) < 0)
goto error;
if(H5Pset_fapl_mpio(fapl_id1, comm, info) < 0)
goto error;
if((fapl_id2 = H5Pcreate(H5P_FILE_ACCESS)) < 0)
goto error;
if(H5Pset_fapl_mpio(fapl_id2, comm, info) < 0)
goto error;
/* Check the case where the file was flushed */
h5_fixname(FILENAME[0], fapl_id1, name, sizeof(name));
if(check_test_file(name, fapl_id1)) {
H5_FAILED()
goto error;
}
else if(mpi_rank == 0) {
PASSED()
}
/* Check the case where the file was not flushed. This should give an error
* so we turn off the error stack temporarily.
*/
if(mpi_rank == 0)
TESTING("H5Fflush (part2 without flush)");
H5Eget_auto2(H5E_DEFAULT,&func, NULL);
H5Eset_auto2(H5E_DEFAULT, NULL, NULL);
h5_fixname(FILENAME[1], fapl_id2, name, sizeof(name));
if(check_test_file(name, fapl_id2)) {
if(mpi_rank == 0)
PASSED()
}
else {
H5_FAILED()
goto error;
}
H5Eset_auto2(H5E_DEFAULT, func, NULL);
h5_clean_files(&FILENAME[0], fapl_id1);
h5_clean_files(&FILENAME[1], fapl_id2);
MPI_Finalize();
return 0;
error:
return 1;
}
HDexit(EXIT_SUCCESS);
error:
HDexit(EXIT_FAILURE);
} /* end main() */