mirror of
https://github.com/HDFGroup/hdf5.git
synced 2025-04-12 17:31:09 +08:00
Merge branch 'develop' into hdf5_1_10.sync
This commit is contained in:
commit
b69bd0771e
@ -23,16 +23,6 @@ if (WIN32)
|
||||
find_program (WIX_EXECUTABLE candle PATHS "${CPACK_WIX_ROOT}/bin")
|
||||
endif ()
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# Add file(s) to CMake Install
|
||||
#-----------------------------------------------------------------------------
|
||||
if (NOT HDF5_INSTALL_NO_DEVELOPMENT)
|
||||
install (
|
||||
FILES ${PROJECT_BINARY_DIR}/H5pubconf.h
|
||||
DESTINATION ${HDF5_INSTALL_INCLUDE_DIR}
|
||||
COMPONENT headers
|
||||
)
|
||||
endif ()
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# Add Target(s) to CMake Install for import into other projects
|
||||
|
@ -1,5 +1,5 @@
|
||||
cmake_minimum_required (VERSION 3.10)
|
||||
PROJECT (HDF5 C CXX)
|
||||
project (HDF5 C)
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# Instructions for use : Normal Build
|
||||
@ -554,11 +554,6 @@ endif ()
|
||||
|
||||
include (${HDF_RESOURCES_DIR}/HDFCompilerFlags.cmake)
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# All libs/tests/examples need the main include directories
|
||||
#-----------------------------------------------------------------------------
|
||||
INCLUDE_DIRECTORIES (${HDF5_BINARY_DIR} ${HDF5_SRC_DIR} ${CMAKE_RUNTIME_OUTPUT_DIRECTORY})
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# Option to Enable MPI Parallel
|
||||
#-----------------------------------------------------------------------------
|
||||
|
3
MANIFEST
3
MANIFEST
@ -520,6 +520,9 @@
|
||||
./src/H5Ctest.c
|
||||
./src/H5CS.c
|
||||
./src/H5CSprivate.h
|
||||
./src/H5CX.c
|
||||
./src/H5CXprivate.h
|
||||
./src/H5CXmodule.h
|
||||
./src/H5D.c
|
||||
./src/H5Dbtree.c
|
||||
./src/H5Dbtree2.c
|
||||
|
@ -1,31 +1,5 @@
|
||||
cmake_minimum_required (VERSION 3.10)
|
||||
PROJECT (HDF5_CPP)
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# Apply Definitions to compiler in this directory and below
|
||||
#-----------------------------------------------------------------------------
|
||||
add_definitions (${HDF_EXTRA_C_FLAGS})
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# Generate configure file
|
||||
#-----------------------------------------------------------------------------
|
||||
configure_file (${HDF_RESOURCES_DIR}/H5cxx_config.h.in
|
||||
${HDF5_BINARY_DIR}/H5cxx_pubconf.h
|
||||
)
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# Setup Include directories
|
||||
#-----------------------------------------------------------------------------
|
||||
INCLUDE_DIRECTORIES (${HDF5_CPP_SOURCE_DIR}/src)
|
||||
INCLUDE_DIRECTORIES (${HDF5_BINARY_DIR})
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# Parallel/MPI, prevent spurious cpp/cxx warnings
|
||||
#-----------------------------------------------------------------------------
|
||||
if (H5_HAVE_PARALLEL)
|
||||
add_definitions ("-DMPICH_SKIP_MPICXX")
|
||||
add_definitions ("-DMPICH_IGNORE_CXX_SEEK")
|
||||
endif ()
|
||||
project (HDF5_CPP CXX)
|
||||
|
||||
add_subdirectory (src)
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
cmake_minimum_required (VERSION 3.10)
|
||||
PROJECT (HDF5_CPP_EXAMPLES)
|
||||
project (HDF5_CPP_EXAMPLES CXX)
|
||||
|
||||
# --------------------------------------------------------------------
|
||||
# Notes: When creating examples they should be prefixed
|
||||
@ -34,6 +34,7 @@ set (tutr_examples
|
||||
|
||||
foreach (example ${examples})
|
||||
add_executable (cpp_ex_${example} ${HDF5_CPP_EXAMPLES_SOURCE_DIR}/${example}.cpp)
|
||||
set_property(TARGET cpp_ex_${example} APPEND PROPERTY INCLUDE_DIRECTORIES "${HDF5_SRC_DIR};${HDF5_BINARY_DIR}")
|
||||
TARGET_C_PROPERTIES (cpp_ex_${example} STATIC " " " ")
|
||||
target_link_libraries (cpp_ex_${example} ${HDF5_CPP_LIB_TARGET} ${HDF5_LIB_TARGET})
|
||||
set_target_properties (cpp_ex_${example} PROPERTIES FOLDER examples/cpp)
|
||||
@ -41,6 +42,7 @@ endforeach ()
|
||||
|
||||
foreach (example ${tutr_examples})
|
||||
add_executable (cpp_ex_${example} ${HDF5_CPP_EXAMPLES_SOURCE_DIR}/${example}.cpp)
|
||||
set_property(TARGET cpp_ex_${example} APPEND PROPERTY INCLUDE_DIRECTORIES "${HDF5_SRC_DIR};${HDF5_BINARY_DIR}")
|
||||
TARGET_C_PROPERTIES (cpp_ex_${example} STATIC " " " ")
|
||||
target_link_libraries (cpp_ex_${example} ${HDF5_CPP_LIB_TARGET} ${HDF5_LIB_TARGET})
|
||||
set_target_properties (cpp_ex_${example} PROPERTIES FOLDER examples/cpp)
|
||||
|
@ -1,5 +1,18 @@
|
||||
cmake_minimum_required (VERSION 3.10)
|
||||
PROJECT (HDF5_CPP_SRC)
|
||||
project (HDF5_CPP_SRC CXX)
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# Parallel/MPI, prevent spurious cpp/cxx warnings
|
||||
#-----------------------------------------------------------------------------
|
||||
if (H5_HAVE_PARALLEL)
|
||||
add_definitions ("-DMPICH_SKIP_MPICXX")
|
||||
add_definitions ("-DMPICH_IGNORE_CXX_SEEK")
|
||||
endif ()
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# Apply Definitions to compiler in this directory and below
|
||||
#-----------------------------------------------------------------------------
|
||||
add_definitions (${HDF_EXTRA_C_FLAGS})
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# Generate configure file
|
||||
@ -83,6 +96,7 @@ set (CPP_HDRS
|
||||
)
|
||||
|
||||
add_library (${HDF5_CPP_LIB_TARGET} STATIC ${CPP_SOURCES} ${CPP_HDRS})
|
||||
set_property(TARGET ${HDF5_CPP_LIB_TARGET} APPEND PROPERTY INCLUDE_DIRECTORIES "${HDF5_SRC_DIR};${HDF5_BINARY_DIR}")
|
||||
TARGET_C_PROPERTIES (${HDF5_CPP_LIB_TARGET} STATIC " " " ")
|
||||
target_link_libraries (${HDF5_CPP_LIB_TARGET} PUBLIC ${HDF5_LIB_TARGET})
|
||||
set_global_variable (HDF5_LIBRARIES_TO_EXPORT "${HDF5_LIBRARIES_TO_EXPORT};${HDF5_CPP_LIB_TARGET}")
|
||||
@ -95,6 +109,7 @@ set (install_targets ${HDF5_CPP_LIB_TARGET})
|
||||
|
||||
if (BUILD_SHARED_LIBS)
|
||||
add_library (${HDF5_CPP_LIBSH_TARGET} SHARED ${CPP_SOURCES} ${CPP_HDRS})
|
||||
set_property(TARGET ${HDF5_CPP_LIBSH_TARGET} APPEND PROPERTY INCLUDE_DIRECTORIES "${HDF5_SRC_DIR};${HDF5_BINARY_DIR}")
|
||||
TARGET_C_PROPERTIES (${HDF5_CPP_LIBSH_TARGET} SHARED " " " ")
|
||||
target_link_libraries (${HDF5_CPP_LIBSH_TARGET} PUBLIC ${HDF5_LIBSH_TARGET})
|
||||
set_global_variable (HDF5_LIBRARIES_TO_EXPORT "${HDF5_LIBRARIES_TO_EXPORT};${HDF5_CPP_LIBSH_TARGET}")
|
||||
|
@ -1,5 +1,19 @@
|
||||
cmake_minimum_required (VERSION 3.10)
|
||||
PROJECT (HDF5_CPP_TEST)
|
||||
project (HDF5_CPP_TEST CXX)
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# Parallel/MPI, prevent spurious cpp/cxx warnings
|
||||
#-----------------------------------------------------------------------------
|
||||
if (H5_HAVE_PARALLEL)
|
||||
add_definitions ("-DMPICH_SKIP_MPICXX")
|
||||
add_definitions ("-DMPICH_IGNORE_CXX_SEEK")
|
||||
endif ()
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# Apply Definitions to compiler in this directory and below
|
||||
#-----------------------------------------------------------------------------
|
||||
add_definitions (${HDF_EXTRA_C_FLAGS})
|
||||
|
||||
# --------------------------------------------------------------------
|
||||
# Notes: When creating unit test executables they should be prefixed
|
||||
# with "cpp_". This allows for easier filtering of the test suite when
|
||||
@ -37,6 +51,7 @@ set (srcdir ${CMAKE_CURRENT_SOURCE_DIR})
|
||||
configure_file (${HDF5_CPP_TEST_SOURCE_DIR}/H5srcdir_str.h.in H5srcdir_str.h @ONLY)
|
||||
|
||||
add_executable (cpp_testhdf5 ${CPP_TEST_SOURCES} )
|
||||
set_property(TARGET cpp_testhdf5 APPEND PROPERTY INCLUDE_DIRECTORIES "${HDF5_SRC_DIR};${HDF5_BINARY_DIR};${HDF5_TEST_BINARY_DIR}")
|
||||
TARGET_C_PROPERTIES (cpp_testhdf5 STATIC " " " ")
|
||||
target_link_libraries (cpp_testhdf5
|
||||
${HDF5_CPP_LIB_TARGET}
|
||||
|
@ -254,18 +254,3 @@ H5ConversionTests (H5_LLONG_TO_LDOUBLE_CORRECT "Checking IF correctly converting
|
||||
# Check if pointer alignments are enforced
|
||||
#
|
||||
H5ConversionTests (H5_NO_ALIGNMENT_RESTRICTIONS "Checking IF alignment restrictions are strictly enforced")
|
||||
|
||||
# -----------------------------------------------------------------------
|
||||
# wrapper script variables
|
||||
#
|
||||
set (prefix ${CMAKE_INSTALL_PREFIX})
|
||||
set (exec_prefix "\${prefix}")
|
||||
set (libdir "${exec_prefix}/lib")
|
||||
set (includedir "\${prefix}/include")
|
||||
set (host_os ${CMAKE_HOST_SYSTEM_NAME})
|
||||
set (CC ${CMAKE_C_COMPILER})
|
||||
set (CXX ${CMAKE_CXX_COMPILER})
|
||||
set (FC ${CMAKE_Fortran_COMPILER})
|
||||
foreach (LINK_LIB ${LINK_LIBS})
|
||||
set (LIBS "${LIBS} -l${LINK_LIB}")
|
||||
endforeach ()
|
||||
|
@ -50,8 +50,10 @@ if (HDF5_DISABLE_COMPILER_WARNINGS)
|
||||
set (HDF5_WARNINGS_BLOCKED 1)
|
||||
string (REGEX REPLACE "(^| )([/-])W[0-9]( |$)" " " CMAKE_C_FLAGS "${CMAKE_C_FLAGS}")
|
||||
set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /W0")
|
||||
string (REGEX REPLACE "(^| )([/-])W[0-9]( |$)" " " CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
|
||||
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W0")
|
||||
if (CMAKE_COMPILER_IS_GNUCXX AND CMAKE_CXX_COMPILER_LOADED)
|
||||
string (REGEX REPLACE "(^| )([/-])W[0-9]( |$)" " " CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
|
||||
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W0")
|
||||
endif ()
|
||||
endif ()
|
||||
if (WIN32)
|
||||
add_definitions (-D_CRT_SECURE_NO_WARNINGS)
|
||||
@ -65,7 +67,9 @@ if (HDF5_DISABLE_COMPILER_WARNINGS)
|
||||
# Most compilers use -w to suppress warnings.
|
||||
if (NOT HDF5_WARNINGS_BLOCKED)
|
||||
set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -w")
|
||||
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -w")
|
||||
if (CMAKE_COMPILER_IS_GNUCXX AND CMAKE_CXX_COMPILER_LOADED)
|
||||
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -w")
|
||||
endif ()
|
||||
endif ()
|
||||
endif ()
|
||||
|
||||
@ -212,13 +216,17 @@ if (HDF5_ENABLE_ALL_WARNINGS)
|
||||
if (HDF5_ENABLE_DEV_WARNINGS)
|
||||
string (REGEX REPLACE "(^| )([/-])W[0-9]( |$)" " " CMAKE_C_FLAGS "${CMAKE_C_FLAGS}")
|
||||
set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /Wall /wd4668")
|
||||
string (REGEX REPLACE "(^| )([/-])W[0-9]( |$)" " " CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
|
||||
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Wall /wd4668")
|
||||
if (CMAKE_COMPILER_IS_GNUCXX AND CMAKE_CXX_COMPILER_LOADED)
|
||||
string (REGEX REPLACE "(^| )([/-])W[0-9]( |$)" " " CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
|
||||
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Wall /wd4668")
|
||||
endif ()
|
||||
else ()
|
||||
string (REGEX REPLACE "(^| )([/-])W[0-9]( |$)" " " CMAKE_C_FLAGS "${CMAKE_C_FLAGS}")
|
||||
set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /W3")
|
||||
string (REGEX REPLACE "(^| )([/-])W[0-9]( |$)" " " CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
|
||||
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W3")
|
||||
if (CMAKE_COMPILER_IS_GNUCXX AND CMAKE_CXX_COMPILER_LOADED)
|
||||
string (REGEX REPLACE "(^| )([/-])W[0-9]( |$)" " " CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
|
||||
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W3")
|
||||
endif ()
|
||||
endif ()
|
||||
else ()
|
||||
if (CMAKE_COMPILER_IS_GNUCC)
|
||||
@ -235,8 +243,10 @@ if (HDF5_ENABLE_GROUPZERO_WARNINGS)
|
||||
if (MSVC)
|
||||
string (REGEX REPLACE "(^| )([/-])W[0-9]( |$)" " " CMAKE_C_FLAGS "${CMAKE_C_FLAGS}")
|
||||
set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /W1")
|
||||
string (REGEX REPLACE "(^| )([/-])W[0-9]( |$)" " " CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
|
||||
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W1")
|
||||
if (CMAKE_COMPILER_IS_GNUCXX AND CMAKE_CXX_COMPILER_LOADED)
|
||||
string (REGEX REPLACE "(^| )([/-])W[0-9]( |$)" " " CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
|
||||
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W1")
|
||||
endif ()
|
||||
else ()
|
||||
if (CMAKE_COMPILER_IS_GNUCC)
|
||||
set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -pedantic")
|
||||
@ -252,8 +262,10 @@ if (HDF5_ENABLE_GROUPONE_WARNINGS)
|
||||
if (MSVC)
|
||||
string (REGEX REPLACE "(^| )([/-])W[0-9]( |$)" " " CMAKE_C_FLAGS "${CMAKE_C_FLAGS}")
|
||||
set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /W2")
|
||||
string (REGEX REPLACE "(^| )([/-])W[0-9]( |$)" " " CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
|
||||
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W2")
|
||||
if (CMAKE_COMPILER_IS_GNUCXX AND CMAKE_CXX_COMPILER_LOADED)
|
||||
string (REGEX REPLACE "(^| )([/-])W[0-9]( |$)" " " CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
|
||||
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W2")
|
||||
endif ()
|
||||
else ()
|
||||
set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${H5_CFLAGS1}")
|
||||
endif ()
|
||||
@ -267,8 +279,10 @@ if (HDF5_ENABLE_GROUPTWO_WARNINGS)
|
||||
if (MSVC)
|
||||
string (REGEX REPLACE "(^| )([/-])W[0-9]( |$)" " " CMAKE_C_FLAGS "${CMAKE_C_FLAGS}")
|
||||
set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /W3")
|
||||
string (REGEX REPLACE "(^| )([/-])W[0-9]( |$)" " " CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
|
||||
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W3")
|
||||
if (CMAKE_COMPILER_IS_GNUCXX AND CMAKE_CXX_COMPILER_LOADED)
|
||||
string (REGEX REPLACE "(^| )([/-])W[0-9]( |$)" " " CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
|
||||
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W3")
|
||||
endif ()
|
||||
else ()
|
||||
set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${H5_CFLAGS2}")
|
||||
endif ()
|
||||
@ -282,8 +296,10 @@ if (HDF5_ENABLE_GROUPTHREE_WARNINGS)
|
||||
if (MSVC)
|
||||
string (REGEX REPLACE "(^| )([/-])W[0-9]( |$)" " " CMAKE_C_FLAGS "${CMAKE_C_FLAGS}")
|
||||
set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /W4")
|
||||
string (REGEX REPLACE "(^| )([/-])W[0-9]( |$)" " " CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
|
||||
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W4")
|
||||
if (CMAKE_COMPILER_IS_GNUCXX AND CMAKE_CXX_COMPILER_LOADED)
|
||||
string (REGEX REPLACE "(^| )([/-])W[0-9]( |$)" " " CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
|
||||
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W4")
|
||||
endif ()
|
||||
else ()
|
||||
set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${H5_CFLAGS3}")
|
||||
endif ()
|
||||
|
@ -14,7 +14,6 @@
|
||||
#-----------------------------------------------------------------------------
|
||||
include (CheckFunctionExists)
|
||||
include (CheckIncludeFile)
|
||||
include (CheckIncludeFileCXX)
|
||||
include (CheckIncludeFiles)
|
||||
include (CheckLibraryExists)
|
||||
include (CheckSymbolExists)
|
||||
@ -23,6 +22,7 @@ include (CheckVariableExists)
|
||||
include (CheckFortranFunctionExists)
|
||||
include (TestBigEndian)
|
||||
if (CMAKE_CXX_COMPILER AND CMAKE_CXX_COMPILER_LOADED)
|
||||
include (CheckIncludeFileCXX)
|
||||
include (TestForSTDNamespace)
|
||||
endif ()
|
||||
|
||||
|
@ -2243,7 +2243,7 @@ AC_SUBST([INTERNAL_DEBUG_OUTPUT])
|
||||
## are not listed in the "all" packages list.
|
||||
##
|
||||
## all_packages="AC,B,B2,D,F,FA,FL,FS,HL,I,O,S,ST,T,Z"
|
||||
all_packages="AC,B2,D,F,HL,I,O,S,ST,T,Z"
|
||||
all_packages="AC,B2,CX,D,F,HL,I,O,S,ST,T,Z"
|
||||
|
||||
case "X-$INTERNAL_DEBUG_OUTPUT" in
|
||||
X-yes|X-all)
|
||||
|
@ -1,5 +1,5 @@
|
||||
cmake_minimum_required (VERSION 3.10)
|
||||
PROJECT (HDF5_EXAMPLES)
|
||||
project (HDF5_EXAMPLES C)
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# Apply Definitions to compiler in this directory and below
|
||||
@ -46,11 +46,13 @@ set (examples
|
||||
|
||||
foreach (example ${examples})
|
||||
add_executable (${example} ${HDF5_EXAMPLES_SOURCE_DIR}/${example}.c)
|
||||
set_property(TARGET ${example} APPEND PROPERTY INCLUDE_DIRECTORIES "${HDF5_SRC_DIR};${HDF5_BINARY_DIR}")
|
||||
TARGET_C_PROPERTIES (${example} STATIC " " " ")
|
||||
target_link_libraries (${example} ${HDF5_LIB_TARGET})
|
||||
set_target_properties (${example} PROPERTIES FOLDER examples)
|
||||
if (BUILD_SHARED_LIBS)
|
||||
add_executable (${example}-shared ${HDF5_EXAMPLES_SOURCE_DIR}/${example}.c)
|
||||
set_property(TARGET ${example}-shared APPEND PROPERTY INCLUDE_DIRECTORIES "${HDF5_SRC_DIR};${HDF5_BINARY_DIR}")
|
||||
TARGET_C_PROPERTIES (${example}-shared SHARED " " " ")
|
||||
target_link_libraries (${example}-shared ${HDF5_LIBSH_TARGET})
|
||||
set_target_properties (${example}-shared PROPERTIES FOLDER examples)
|
||||
@ -59,11 +61,13 @@ endforeach ()
|
||||
|
||||
if (H5_HAVE_PARALLEL)
|
||||
add_executable (ph5example ${HDF5_EXAMPLES_SOURCE_DIR}/ph5example.c)
|
||||
set_property(TARGET ph5example APPEND PROPERTY INCLUDE_DIRECTORIES "${HDF5_SRC_DIR};${HDF5_BINARY_DIR}")
|
||||
TARGET_C_PROPERTIES (ph5example STATIC " " " ")
|
||||
target_link_libraries (ph5example ${HDF5_LIB_TARGET} ${MPI_C_LIBRARIES})
|
||||
set_target_properties (ph5example PROPERTIES FOLDER examples)
|
||||
if (BUILD_SHARED_LIBS)
|
||||
add_executable (ph5example-shared ${HDF5_EXAMPLES_SOURCE_DIR}/ph5example.c)
|
||||
set_property(TARGET ph5example-shared APPEND PROPERTY INCLUDE_DIRECTORIES "${HDF5_SRC_DIR};${HDF5_BINARY_DIR}")
|
||||
TARGET_C_PROPERTIES (ph5example-shared SHARED " " " ")
|
||||
target_link_libraries (ph5example-shared ${HDF5_LIBSH_TARGET} ${MPI_C_LIBRARIES})
|
||||
set_target_properties (ph5example-shared PROPERTIES FOLDER examples)
|
||||
|
@ -38,7 +38,7 @@
|
||||
* understand Unix paths.
|
||||
*/
|
||||
static hid_t elink_unix2win_trav(const char *link_name, hid_t cur_group,
|
||||
const void *udata, size_t udata_size, hid_t lapl_id)
|
||||
const void *udata, size_t udata_size, hid_t lapl_id, hid_t dxpl_id)
|
||||
{
|
||||
hid_t fid;
|
||||
const char *file_name;
|
||||
|
@ -310,7 +310,7 @@ static herr_t UD_hard_create(const char *link_name, hid_t loc_group,
|
||||
static herr_t UD_hard_delete(const char *link_name, hid_t loc_group,
|
||||
const void *udata, size_t udata_size);
|
||||
static hid_t UD_hard_traverse(const char *link_name, hid_t cur_group,
|
||||
const void *udata, size_t udata_size, hid_t lapl_id);
|
||||
const void *udata, size_t udata_size, hid_t lapl_id, hid_t dxpl_id);
|
||||
|
||||
static void hard_link_example(void)
|
||||
{
|
||||
@ -490,7 +490,7 @@ done:
|
||||
* return its ID.
|
||||
*/
|
||||
static hid_t UD_hard_traverse(const char *link_name, hid_t cur_group,
|
||||
const void *udata, size_t udata_size, hid_t lapl_id)
|
||||
const void *udata, size_t udata_size, hid_t lapl_id, hid_t dxpl_id)
|
||||
{
|
||||
haddr_t addr;
|
||||
hid_t ret_value = -1;
|
||||
@ -527,7 +527,7 @@ static hid_t UD_hard_traverse(const char *link_name, hid_t cur_group,
|
||||
* These links have no udata, so they don't need a query function.
|
||||
*/
|
||||
static hid_t UD_plist_traverse(const char *link_name, hid_t cur_group,
|
||||
const void *udata, size_t udata_size, hid_t lapl_id);
|
||||
const void *udata, size_t udata_size, hid_t lapl_id, hid_t dxpl_id);
|
||||
|
||||
static void plist_link_example(void)
|
||||
{
|
||||
@ -618,7 +618,7 @@ static void plist_link_example(void)
|
||||
* Open a path passed in through the property list.
|
||||
*/
|
||||
static hid_t UD_plist_traverse(const char *link_name, hid_t cur_group,
|
||||
const void *udata, size_t udata_size, hid_t lapl_id)
|
||||
const void *udata, size_t udata_size, hid_t lapl_id, hid_t dxpl_id)
|
||||
{
|
||||
char * path;
|
||||
hid_t ret_value = -1;
|
||||
|
@ -1,5 +1,5 @@
|
||||
cmake_minimum_required (VERSION 3.10)
|
||||
PROJECT (HDF5_F90 C CXX Fortran)
|
||||
project (HDF5_F90 C Fortran)
|
||||
|
||||
if (H5_HAVE_PARALLEL)
|
||||
if (MPI_Fortran_LINK_FLAGS)
|
||||
|
@ -1,15 +1,10 @@
|
||||
cmake_minimum_required (VERSION 3.10)
|
||||
PROJECT (HDF5_F90_EXAMPLES C CXX Fortran)
|
||||
project (HDF5_F90_EXAMPLES C Fortran)
|
||||
# --------------------------------------------------------------------
|
||||
# Notes: When creating examples they should be prefixed
|
||||
# with "f90_ex_". This allows for easier filtering of the examples.
|
||||
# --------------------------------------------------------------------
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# Setup include Directories
|
||||
#-----------------------------------------------------------------------------
|
||||
INCLUDE_DIRECTORIES (${HDF5_F90_BINARY_DIR} ${HDF5_F90_SRC_DIR}/src)
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# Define Sources
|
||||
#-----------------------------------------------------------------------------
|
||||
@ -46,6 +41,7 @@ foreach (example ${examples})
|
||||
${HDF5_LIB_TARGET}
|
||||
)
|
||||
target_include_directories (f90_ex_${example} PRIVATE ${CMAKE_Fortran_MODULE_DIRECTORY}/static)
|
||||
set_property(TARGET f90_ex_${example} APPEND PROPERTY INCLUDE_DIRECTORIES "${HDF5_SRC_DIR};${HDF5_BINARY_DIR};${HDF5_F90_BINARY_DIR};${HDF5_F90_BINARY_DIR}/static")
|
||||
set_target_properties (f90_ex_${example} PROPERTIES
|
||||
LINKER_LANGUAGE Fortran
|
||||
FOLDER examples/fortran
|
||||
@ -59,6 +55,7 @@ foreach (example ${examples})
|
||||
${HDF5_LIBSH_TARGET}
|
||||
)
|
||||
target_include_directories (f90_ex_${example}-shared PRIVATE ${CMAKE_Fortran_MODULE_DIRECTORY}/shared)
|
||||
set_property(TARGET f90_ex_${example}-shared APPEND PROPERTY INCLUDE_DIRECTORIES "${HDF5_SRC_DIR};${HDF5_BINARY_DIR};${HDF5_F90_BINARY_DIR};${HDF5_F90_BINARY_DIR}/shared")
|
||||
set_target_properties (f90_ex_${example}-shared PROPERTIES
|
||||
LINKER_LANGUAGE Fortran
|
||||
FOLDER examples/fortran
|
||||
@ -75,6 +72,7 @@ foreach (example ${F2003_examples})
|
||||
${HDF5_LIB_TARGET}
|
||||
)
|
||||
target_include_directories (f03_ex_${example} PRIVATE ${CMAKE_Fortran_MODULE_DIRECTORY}/static)
|
||||
set_property(TARGET f03_ex_${example} APPEND PROPERTY INCLUDE_DIRECTORIES "${HDF5_SRC_DIR};${HDF5_BINARY_DIR};${HDF5_F90_BINARY_DIR};${HDF5_F90_BINARY_DIR}/static")
|
||||
set_target_properties (f03_ex_${example} PROPERTIES
|
||||
LINKER_LANGUAGE Fortran
|
||||
FOLDER examples/fortran03
|
||||
@ -88,6 +86,7 @@ foreach (example ${F2003_examples})
|
||||
${HDF5_LIBSH_TARGET}
|
||||
)
|
||||
target_include_directories (f03_ex_${example}-shared PRIVATE ${CMAKE_Fortran_MODULE_DIRECTORY}/shared)
|
||||
set_property(TARGET f03_ex_${example}-shared APPEND PROPERTY INCLUDE_DIRECTORIES "${HDF5_SRC_DIR};${HDF5_BINARY_DIR};${HDF5_F90_BINARY_DIR};${HDF5_F90_BINARY_DIR}/shared")
|
||||
set_target_properties (f03_ex_${example}-shared PROPERTIES
|
||||
LINKER_LANGUAGE Fortran
|
||||
FOLDER examples/fortran03
|
||||
@ -104,6 +103,7 @@ if (H5_HAVE_PARALLEL AND MPI_Fortran_FOUND)
|
||||
${HDF5_LIB_TARGET}
|
||||
)
|
||||
target_include_directories (f90_ex_ph5example PRIVATE ${CMAKE_Fortran_MODULE_DIRECTORY}/static)
|
||||
set_property(TARGET f90_ex_ph5example APPEND PROPERTY INCLUDE_DIRECTORIES "${HDF5_SRC_DIR};${HDF5_BINARY_DIR};${HDF5_F90_BINARY_DIR};${HDF5_F90_BINARY_DIR}/static")
|
||||
set_target_properties (f90_ex_ph5example PROPERTIES
|
||||
LINKER_LANGUAGE Fortran
|
||||
FOLDER examples/fortran
|
||||
@ -117,6 +117,7 @@ if (H5_HAVE_PARALLEL AND MPI_Fortran_FOUND)
|
||||
${HDF5_LIBSH_TARGET}
|
||||
)
|
||||
target_include_directories (f90_ex_ph5example-shared PRIVATE ${CMAKE_Fortran_MODULE_DIRECTORY}/shared)
|
||||
set_property(TARGET f90_ex_ph5example-shared APPEND PROPERTY INCLUDE_DIRECTORIES "${HDF5_SRC_DIR};${HDF5_BINARY_DIR};${HDF5_F90_BINARY_DIR};${HDF5_F90_BINARY_DIR}/shared")
|
||||
set_target_properties (f90_ex_ph5example-shared PROPERTIES
|
||||
LINKER_LANGUAGE Fortran
|
||||
FOLDER examples/fortran
|
||||
|
@ -1,5 +1,5 @@
|
||||
cmake_minimum_required (VERSION 3.10)
|
||||
project (HDF5_F90_SRC C CXX Fortran)
|
||||
project (HDF5_F90_SRC C Fortran)
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# configure def file for shared libs on windows
|
||||
@ -32,7 +32,7 @@ if (HAVE_FLOAT128)
|
||||
set (CMAKE_H5_HAVE_FLOAT128 1)
|
||||
endif ()
|
||||
|
||||
configure_file (${HDF5_F90_SRC_SOURCE_DIR}/H5config_f.inc.cmake ${CMAKE_BINARY_DIR}/H5config_f.inc @ONLY)
|
||||
configure_file (${HDF5_F90_SRC_SOURCE_DIR}/H5config_f.inc.cmake ${HDF5_F90_BINARY_DIR}/H5config_f.inc @ONLY)
|
||||
configure_file (${HDF5_F90_SRC_SOURCE_DIR}/H5fort_type_defines.h.in ${HDF5_F90_BINARY_DIR}/H5fort_type_defines.h @ONLY)
|
||||
|
||||
set (Fortran_COMPILER_ID CMAKE_Fortran_COMPILER_ID)
|
||||
@ -46,7 +46,7 @@ set (Fortran_COMPILER_ID CMAKE_Fortran_COMPILER_ID)
|
||||
add_executable (H5_buildiface
|
||||
${HDF5_F90_SRC_SOURCE_DIR}/H5_buildiface.F90
|
||||
)
|
||||
|
||||
target_include_directories(H5_buildiface PRIVATE "${HDF5_BINARY_DIR};${HDF5_F90_BINARY_DIR}")
|
||||
if (WIN32 AND MSVC)
|
||||
if (BUILD_SHARED_LIBS)
|
||||
set_target_properties (H5_buildiface
|
||||
@ -71,13 +71,12 @@ endif ()
|
||||
file (MAKE_DIRECTORY "${HDF5_F90_BINARY_DIR}/static")
|
||||
set (MOD_BUILD_DIR ${CMAKE_Fortran_MODULE_DIRECTORY}/static/${HDF_CFG_BUILD_TYPE})
|
||||
|
||||
INCLUDE_DIRECTORIES (${HDF5_F90_SOURCE_DIR} ${HDF5_F90_BINARY_DIR} ${CMAKE_Fortran_MODULE_DIRECTORY})
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
add_executable (H5match_types
|
||||
${HDF5_F90_BINARY_DIR}/H5fort_type_defines.h
|
||||
${HDF5_F90_SRC_SOURCE_DIR}/H5match_types.c
|
||||
)
|
||||
target_include_directories(H5match_types PRIVATE "${HDF5_BINARY_DIR};${HDF5_SRC_DIR};${HDF5_F90_BINARY_DIR}")
|
||||
add_custom_command (
|
||||
OUTPUT ${HDF5_F90_BINARY_DIR}/static/H5f90i_gen.h
|
||||
${HDF5_F90_BINARY_DIR}/static/H5fortran_types.F90
|
||||
@ -132,7 +131,7 @@ set (f90CStub_C_SHHDRS
|
||||
)
|
||||
|
||||
add_library (${HDF5_F90_C_LIB_TARGET} STATIC ${f90CStub_C_SOURCES} ${f90CStub_C_HDRS})
|
||||
target_include_directories(${HDF5_F90_C_LIB_TARGET} PUBLIC ${HDF5_F90_BINARY_DIR}/static)
|
||||
set_property(TARGET ${HDF5_F90_C_LIB_TARGET} APPEND PROPERTY INCLUDE_DIRECTORIES "${HDF5_SRC_DIR};${HDF5_BINARY_DIR};${HDF5_F90_BINARY_DIR};${HDF5_F90_BINARY_DIR}/static")
|
||||
TARGET_C_PROPERTIES (${HDF5_F90_C_LIB_TARGET} STATIC " " " ")
|
||||
target_link_libraries (${HDF5_F90_C_LIB_TARGET} PUBLIC ${HDF5_LIB_TARGET})
|
||||
set_global_variable (HDF5_LIBRARIES_TO_EXPORT "${HDF5_LIBRARIES_TO_EXPORT};${HDF5_F90_C_LIB_TARGET}")
|
||||
@ -146,7 +145,7 @@ set (install_targets ${HDF5_F90_C_LIB_TARGET})
|
||||
|
||||
if (BUILD_SHARED_LIBS)
|
||||
add_library (${HDF5_F90_C_LIBSH_TARGET} SHARED ${f90CStub_C_SOURCES} ${f90CStub_C_SHHDRS})
|
||||
target_include_directories(${HDF5_F90_C_LIBSH_TARGET} PUBLIC ${HDF5_F90_BINARY_DIR}/shared)
|
||||
set_property(TARGET ${HDF5_F90_C_LIBSH_TARGET} APPEND PROPERTY INCLUDE_DIRECTORIES "${HDF5_SRC_DIR};${HDF5_BINARY_DIR};${HDF5_F90_BINARY_DIR};${HDF5_F90_BINARY_DIR}/shared")
|
||||
TARGET_C_PROPERTIES (${HDF5_F90_C_LIBSH_TARGET} SHARED " " " ")
|
||||
target_link_libraries (${HDF5_F90_C_LIBSH_TARGET} PUBLIC ${HDF5_LIBSH_TARGET})
|
||||
set_global_variable (HDF5_LIBRARIES_TO_EXPORT "${HDF5_LIBRARIES_TO_EXPORT};${HDF5_F90_C_LIBSH_TARGET}")
|
||||
@ -250,7 +249,7 @@ set (SHARED_LINK_FLAGS " ")
|
||||
TARGET_FORTRAN_PROPERTIES (${HDF5_F90_LIB_TARGET} STATIC " " " ")
|
||||
target_link_libraries (${HDF5_F90_LIB_TARGET} PUBLIC ${HDF5_F90_C_LIB_TARGET})
|
||||
target_link_libraries (${HDF5_F90_LIB_TARGET} PRIVATE ${LINK_Fortran_LIBS})
|
||||
target_include_directories (${HDF5_F90_LIB_TARGET} PUBLIC ${CMAKE_Fortran_MODULE_DIRECTORY}/static)
|
||||
target_include_directories (${HDF5_F90_LIB_TARGET} PUBLIC "${HDF5_F90_SRC_SOURCE_DIR};${CMAKE_Fortran_MODULE_DIRECTORY}/static;${HDF5_F90_BINARY_DIR}")
|
||||
if (H5_HAVE_PARALLEL AND MPI_Fortran_FOUND)
|
||||
target_include_directories (${HDF5_F90_LIB_TARGET} PUBLIC ${MPI_Fortran_INCLUDE_DIRS})
|
||||
endif ()
|
||||
@ -279,7 +278,7 @@ if (BUILD_SHARED_LIBS)
|
||||
TARGET_FORTRAN_PROPERTIES (${HDF5_F90_LIBSH_TARGET} SHARED " " ${SHARED_LINK_FLAGS})
|
||||
target_link_libraries (${HDF5_F90_LIBSH_TARGET} PUBLIC ${HDF5_F90_C_LIBSH_TARGET})
|
||||
target_link_libraries (${HDF5_F90_LIBSH_TARGET} PRIVATE ${LINK_Fortran_LIBS})
|
||||
target_include_directories (${HDF5_F90_LIBSH_TARGET} PUBLIC ${CMAKE_Fortran_MODULE_DIRECTORY}/shared)
|
||||
target_include_directories (${HDF5_F90_LIBSH_TARGET} PUBLIC "${HDF5_F90_SRC_SOURCE_DIR};${CMAKE_Fortran_MODULE_DIRECTORY}/shared;${HDF5_F90_BINARY_DIR}")
|
||||
if (H5_HAVE_PARALLEL AND MPI_Fortran_FOUND)
|
||||
target_include_directories (${HDF5_F90_LIBSH_TARGET} PUBLIC ${MPI_Fortran_INCLUDE_DIRS})
|
||||
endif ()
|
||||
|
@ -1068,6 +1068,3 @@ h5literate_by_name_c(hid_t_f *loc_id, _fcd name, size_t_f *namelen, int_f *index
|
||||
return ret_value;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -7769,8 +7769,8 @@ SUBROUTINE h5pset_attr_phase_change_f(ocpl_id, max_compact, min_dense, hdferr)
|
||||
INTEGER, INTENT(OUT) :: hdferr
|
||||
!*****
|
||||
INTERFACE
|
||||
INTEGER(HID_T) FUNCTION h5pget_virtual_count(dcpl_id, count) BIND(C,NAME='H5Pget_virtual_count')
|
||||
IMPORT :: HID_T, SIZE_T
|
||||
INTEGER(C_INT) FUNCTION h5pget_virtual_count(dcpl_id, count) BIND(C,NAME='H5Pget_virtual_count')
|
||||
IMPORT :: HID_T, SIZE_T, C_INT
|
||||
IMPLICIT NONE
|
||||
INTEGER(HID_T) , INTENT(IN), VALUE :: dcpl_id
|
||||
INTEGER(SIZE_T), INTENT(OUT) :: count
|
||||
|
@ -1,10 +1,5 @@
|
||||
cmake_minimum_required (VERSION 3.10)
|
||||
PROJECT (HDF5_FORTRAN_TESTS C CXX Fortran)
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# Setup include Directories
|
||||
#-----------------------------------------------------------------------------
|
||||
INCLUDE_DIRECTORIES (${CMAKE_Fortran_MODULE_DIRECTORY} ${HDF5_FORTRAN_TESTS_SOURCE_DIR} ${HDF5_F90_BINARY_DIR} ${HDF5_F90_SRC_DIR}/src)
|
||||
project (HDF5_FORTRAN_TESTS C Fortran)
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# Setup the Fortran auto-detection utilities
|
||||
@ -14,7 +9,7 @@ INCLUDE_DIRECTORIES (${CMAKE_Fortran_MODULE_DIRECTORY} ${HDF5_FORTRAN_TESTS_SOUR
|
||||
add_executable (H5_test_buildiface
|
||||
${HDF5_F90_SRC_DIR}/test/H5_test_buildiface.F90
|
||||
)
|
||||
|
||||
target_include_directories(H5_test_buildiface PRIVATE ${HDF5_BINARY_DIR} ${HDF5_F90_BINARY_DIR})
|
||||
if (WIN32 AND MSVC)
|
||||
if (BUILD_SHARED_LIBS)
|
||||
set_target_properties (H5_test_buildiface
|
||||
@ -44,7 +39,7 @@ set (MOD_BUILD_DIR ${CMAKE_Fortran_MODULE_DIRECTORY}/static/${HDF_CFG_BUILD_TYPE
|
||||
#-----------------------------------------------------------------------------
|
||||
add_library (${HDF5_F90_C_TEST_LIB_TARGET} STATIC t.c)
|
||||
set_source_files_properties (t.c PROPERTIES LANGUAGE C)
|
||||
target_include_directories(${HDF5_F90_C_TEST_LIB_TARGET} PUBLIC ${HDF5_F90_BINARY_DIR}/static)
|
||||
set_property(TARGET ${HDF5_F90_C_TEST_LIB_TARGET} APPEND PROPERTY INCLUDE_DIRECTORIES "${HDF5_SRC_DIR};${HDF5_BINARY_DIR};${HDF5_F90_BINARY_DIR};${HDF5_F90_BINARY_DIR}/static")
|
||||
TARGET_C_PROPERTIES (${HDF5_F90_C_TEST_LIB_TARGET} STATIC " " " ")
|
||||
target_link_libraries (${HDF5_F90_C_TEST_LIB_TARGET}
|
||||
${HDF5_F90_C_LIB_TARGET}
|
||||
@ -58,7 +53,7 @@ set_target_properties (${HDF5_F90_C_TEST_LIB_TARGET} PROPERTIES
|
||||
)
|
||||
if (BUILD_SHARED_LIBS)
|
||||
add_library (${HDF5_F90_C_TEST_LIBSH_TARGET} SHARED t.c)
|
||||
target_include_directories(${HDF5_F90_C_TEST_LIBSH_TARGET} PUBLIC ${HDF5_F90_BINARY_DIR}/shared)
|
||||
set_property(TARGET ${HDF5_F90_C_TEST_LIBSH_TARGET} APPEND PROPERTY INCLUDE_DIRECTORIES "${HDF5_SRC_DIR};${HDF5_BINARY_DIR};${HDF5_F90_BINARY_DIR};${HDF5_F90_BINARY_DIR}/shared")
|
||||
TARGET_C_PROPERTIES (${HDF5_F90_C_TEST_LIBSH_TARGET} SHARED " " " ")
|
||||
target_link_libraries (${HDF5_F90_C_TEST_LIBSH_TARGET}
|
||||
${HDF5_F90_C_LIBSH_TARGET}
|
||||
@ -128,6 +123,7 @@ target_link_libraries (${HDF5_F90_TEST_LIB_TARGET}
|
||||
)
|
||||
H5_SET_LIB_OPTIONS (${HDF5_F90_TEST_LIB_TARGET} ${HDF5_F90_TEST_LIB_NAME} STATIC 0)
|
||||
target_include_directories (${HDF5_F90_TEST_LIB_TARGET} PRIVATE ${CMAKE_Fortran_MODULE_DIRECTORY}/static)
|
||||
set_property(TARGET ${HDF5_F90_TEST_LIB_TARGET} APPEND PROPERTY INCLUDE_DIRECTORIES "${HDF5_F90_BINARY_DIR};${HDF5_F90_BINARY_DIR}/shared")
|
||||
set_target_properties (${HDF5_F90_TEST_LIB_TARGET} PROPERTIES
|
||||
FOLDER libraries/test/fortran
|
||||
LINKER_LANGUAGE Fortran
|
||||
@ -155,6 +151,7 @@ if (BUILD_SHARED_LIBS)
|
||||
)
|
||||
H5_SET_LIB_OPTIONS (${HDF5_F90_TEST_LIBSH_TARGET} ${HDF5_F90_TEST_LIB_NAME} SHARED "F")
|
||||
target_include_directories (${HDF5_F90_TEST_LIBSH_TARGET} PRIVATE ${CMAKE_Fortran_MODULE_DIRECTORY}/shared)
|
||||
set_property(TARGET ${HDF5_F90_TEST_LIBSH_TARGET} APPEND PROPERTY INCLUDE_DIRECTORIES "${HDF5_F90_BINARY_DIR};${HDF5_F90_BINARY_DIR}/shared")
|
||||
set_target_properties (${HDF5_F90_TEST_LIBSH_TARGET} PROPERTIES
|
||||
FOLDER libraries/test/fortran
|
||||
LINKER_LANGUAGE Fortran
|
||||
@ -203,6 +200,7 @@ if (WIN32 AND MSVC)
|
||||
target_link_libraries (testhdf5_fortran "ws2_32.lib")
|
||||
endif ()
|
||||
target_include_directories (testhdf5_fortran PRIVATE ${CMAKE_Fortran_MODULE_DIRECTORY}/static)
|
||||
set_property(TARGET testhdf5_fortran APPEND PROPERTY INCLUDE_DIRECTORIES "${HDF5_F90_BINARY_DIR};${HDF5_F90_BINARY_DIR}/static")
|
||||
set_target_properties (testhdf5_fortran PROPERTIES
|
||||
LINKER_LANGUAGE Fortran
|
||||
FOLDER test/fortran
|
||||
@ -238,6 +236,7 @@ if (BUILD_SHARED_LIBS)
|
||||
target_link_libraries (testhdf5_fortran-shared "ws2_32.lib")
|
||||
endif ()
|
||||
target_include_directories (testhdf5_fortran-shared PRIVATE ${CMAKE_Fortran_MODULE_DIRECTORY}/shared)
|
||||
set_property(TARGET testhdf5_fortran-shared APPEND PROPERTY INCLUDE_DIRECTORIES "${HDF5_F90_BINARY_DIR};${HDF5_F90_BINARY_DIR}/shared")
|
||||
set_target_properties (testhdf5_fortran-shared PROPERTIES
|
||||
LINKER_LANGUAGE Fortran
|
||||
FOLDER test/fortran
|
||||
@ -265,6 +264,7 @@ if (WIN32 AND MSVC)
|
||||
target_link_libraries (testhdf5_fortran_1_8 "ws2_32.lib")
|
||||
endif ()
|
||||
target_include_directories (testhdf5_fortran_1_8 PRIVATE ${CMAKE_Fortran_MODULE_DIRECTORY}/static)
|
||||
set_property(TARGET testhdf5_fortran_1_8 APPEND PROPERTY INCLUDE_DIRECTORIES "${HDF5_F90_BINARY_DIR};${HDF5_F90_BINARY_DIR}/static")
|
||||
set_target_properties (testhdf5_fortran_1_8 PROPERTIES
|
||||
LINKER_LANGUAGE Fortran
|
||||
FOLDER test/fortran
|
||||
@ -291,6 +291,7 @@ if (BUILD_SHARED_LIBS)
|
||||
target_link_libraries (testhdf5_fortran_1_8-shared "ws2_32.lib")
|
||||
endif ()
|
||||
target_include_directories (testhdf5_fortran_1_8-shared PRIVATE ${CMAKE_Fortran_MODULE_DIRECTORY}/shared)
|
||||
set_property(TARGET testhdf5_fortran_1_8-shared APPEND PROPERTY INCLUDE_DIRECTORIES "${HDF5_F90_BINARY_DIR};${HDF5_F90_BINARY_DIR}/shared")
|
||||
set_target_properties (testhdf5_fortran_1_8-shared PROPERTIES
|
||||
LINKER_LANGUAGE Fortran
|
||||
FOLDER test/fortran
|
||||
@ -320,6 +321,7 @@ if (WIN32 AND MSVC)
|
||||
target_link_libraries (fortranlib_test_F03 "ws2_32.lib")
|
||||
endif ()
|
||||
target_include_directories (fortranlib_test_F03 PRIVATE ${CMAKE_Fortran_MODULE_DIRECTORY}/static)
|
||||
set_property(TARGET fortranlib_test_F03 APPEND PROPERTY INCLUDE_DIRECTORIES "${HDF5_F90_BINARY_DIR};${HDF5_F90_BINARY_DIR}/static")
|
||||
set_target_properties (fortranlib_test_F03 PROPERTIES
|
||||
LINKER_LANGUAGE Fortran
|
||||
FOLDER test/fortran
|
||||
@ -349,6 +351,7 @@ if (BUILD_SHARED_LIBS)
|
||||
endif ()
|
||||
|
||||
target_include_directories (fortranlib_test_F03-shared PRIVATE ${CMAKE_Fortran_MODULE_DIRECTORY}/shared)
|
||||
set_property(TARGET fortranlib_test_F03-shared APPEND PROPERTY INCLUDE_DIRECTORIES "${HDF5_F90_BINARY_DIR};${HDF5_F90_BINARY_DIR}/shared")
|
||||
set_target_properties (fortranlib_test_F03-shared PROPERTIES
|
||||
LINKER_LANGUAGE Fortran
|
||||
FOLDER test/fortran
|
||||
|
@ -1,5 +1,5 @@
|
||||
cmake_minimum_required (VERSION 3.10)
|
||||
PROJECT (HDF5_FORTRAN_TESTPAR C CXX Fortran)
|
||||
project (HDF5_FORTRAN_TESTPAR C Fortran)
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# Setup include Directories
|
||||
|
@ -1,16 +1,9 @@
|
||||
cmake_minimum_required (VERSION 3.10)
|
||||
PROJECT (HDF5_HL C CXX)
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# Apply Definitions to compiler in this directory and below
|
||||
#-----------------------------------------------------------------------------
|
||||
add_definitions (${HDF_EXTRA_C_FLAGS})
|
||||
|
||||
project (HDF5_HL C)
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# List Source files
|
||||
#-----------------------------------------------------------------------------
|
||||
INCLUDE_DIRECTORIES (${HDF5_HL_SOURCE_DIR}/src )
|
||||
|
||||
add_subdirectory (src)
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
cmake_minimum_required (VERSION 3.10)
|
||||
PROJECT (HDF5_HL_CPP)
|
||||
project (HDF5_HL_CPP CXX)
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# Main HL lib is in /src
|
||||
|
@ -1,16 +1,11 @@
|
||||
cmake_minimum_required (VERSION 3.10)
|
||||
PROJECT (HDF5_HL_CPP_EXAMPLES)
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# Setup include Directories
|
||||
#-----------------------------------------------------------------------------
|
||||
INCLUDE_DIRECTORIES (${HDF5_HL_SRC_DIR}/src)
|
||||
INCLUDE_DIRECTORIES (${HDF5_HL_CPP_SRC_DIR}/src)
|
||||
project (HDF5_HL_CPP_EXAMPLES CXX)
|
||||
|
||||
# --------------------------------------------------------------------
|
||||
# Add in the examples for the Packet Table codes
|
||||
# --------------------------------------------------------------------
|
||||
add_executable (ptExampleFL ${HDF5_HL_CPP_EXAMPLES_SOURCE_DIR}/ptExampleFL.cpp)
|
||||
set_property(TARGET ptExampleFL APPEND PROPERTY INCLUDE_DIRECTORIES "${HDF5_SRC_DIR};${HDF5_BINARY_DIR}")
|
||||
TARGET_C_PROPERTIES (ptExampleFL STATIC " " " ")
|
||||
target_link_libraries (
|
||||
ptExampleFL
|
||||
|
@ -1,16 +1,15 @@
|
||||
cmake_minimum_required (VERSION 3.10)
|
||||
PROJECT (HDF5_HL_CPP_SRC)
|
||||
project (HDF5_HL_CPP_SRC CXX)
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# Define Sources
|
||||
#-----------------------------------------------------------------------------
|
||||
INCLUDE_DIRECTORIES (${HDF5_HL_SRC_DIR}/src)
|
||||
INCLUDE_DIRECTORIES (${HDF5_HL_CPP_SRC_SOURCE_DIR})
|
||||
|
||||
set (HDF5_HL_CPP_SOURCES ${HDF5_HL_CPP_SRC_SOURCE_DIR}/H5PacketTable.cpp)
|
||||
set (HDF5_HL_CPP_HDRS ${HDF5_HL_CPP_SRC_SOURCE_DIR}/H5PacketTable.h)
|
||||
|
||||
add_library (${HDF5_HL_CPP_LIB_TARGET} STATIC ${HDF5_HL_CPP_SOURCES})
|
||||
set_property(TARGET ${HDF5_HL_CPP_LIB_TARGET} APPEND PROPERTY INCLUDE_DIRECTORIES "${HDF5_SRC_DIR};${HDF5_BINARY_DIR}")
|
||||
TARGET_C_PROPERTIES (${HDF5_HL_CPP_LIB_TARGET} STATIC " " " ")
|
||||
target_link_libraries (${HDF5_HL_CPP_LIB_TARGET} PUBLIC ${HDF5_HL_LIB_TARGET} ${HDF5_LIB_TARGET})
|
||||
set_global_variable (HDF5_LIBRARIES_TO_EXPORT "${HDF5_LIBRARIES_TO_EXPORT};${HDF5_HL_CPP_LIB_TARGET}")
|
||||
@ -23,6 +22,7 @@ set (install_targets ${HDF5_HL_CPP_LIB_TARGET})
|
||||
|
||||
if (BUILD_SHARED_LIBS)
|
||||
add_library (${HDF5_HL_CPP_LIBSH_TARGET} SHARED ${HDF5_HL_CPP_SOURCES})
|
||||
set_property(TARGET ${HDF5_HL_CPP_LIBSH_TARGET} APPEND PROPERTY INCLUDE_DIRECTORIES "${HDF5_SRC_DIR};${HDF5_BINARY_DIR}")
|
||||
TARGET_C_PROPERTIES (${HDF5_HL_CPP_LIBSH_TARGET} SHARED " " " ")
|
||||
target_link_libraries (${HDF5_HL_CPP_LIBSH_TARGET} PUBLIC ${HDF5_HL_LIBSH_TARGET} ${HDF5_LIBSH_TARGET})
|
||||
set_global_variable (HDF5_LIBRARIES_TO_EXPORT "${HDF5_LIBRARIES_TO_EXPORT};${HDF5_HL_CPP_LIBSH_TARGET}")
|
||||
|
@ -1,21 +1,8 @@
|
||||
cmake_minimum_required (VERSION 3.10)
|
||||
PROJECT (HDF5_HL_CPP_TEST)
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# Setup include Directories
|
||||
#-----------------------------------------------------------------------------
|
||||
INCLUDE_DIRECTORIES (${HDF5_HL_SRC_DIR}/src)
|
||||
INCLUDE_DIRECTORIES (${HDF5_HL_SRC_DIR}/c++/src)
|
||||
|
||||
# --------------------------------------------------------------------
|
||||
# Add in the unit tests for the packet table c++ wrapper
|
||||
# --------------------------------------------------------------------
|
||||
|
||||
INCLUDE_DIRECTORIES (${HDF5_TEST_SRC_DIR})
|
||||
INCLUDE_DIRECTORIES (${HDF5_HL_SRC_DIR}/test)
|
||||
INCLUDE_DIRECTORIES (${HDF5_CPP_SRC_DIR}/src)
|
||||
project (HDF5_HL_CPP_TEST CXX)
|
||||
|
||||
add_executable (hl_ptableTest ${HDF5_HL_CPP_TEST_SOURCE_DIR}/ptableTest.cpp)
|
||||
set_property(TARGET hl_ptableTest APPEND PROPERTY INCLUDE_DIRECTORIES "${HDF5_HL_SRC_DIR}/test;${HDF5_SRC_DIR};${HDF5_BINARY_DIR}")
|
||||
TARGET_C_PROPERTIES (hl_ptableTest STATIC " " " ")
|
||||
target_link_libraries (
|
||||
hl_ptableTest
|
||||
|
@ -1,5 +1,5 @@
|
||||
cmake_minimum_required (VERSION 3.10)
|
||||
PROJECT (HDF5_HL_EXAMPLES )
|
||||
project (HDF5_HL_EXAMPLES C)
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# Define Sources
|
||||
@ -28,6 +28,7 @@ set (examples
|
||||
|
||||
foreach (example ${examples})
|
||||
add_executable (hl_ex_${example} ${HDF5_HL_EXAMPLES_SOURCE_DIR}/${example}.c)
|
||||
set_property(TARGET hl_ex_${example} APPEND PROPERTY INCLUDE_DIRECTORIES "${HDF5_SRC_DIR};${HDF5_BINARY_DIR}")
|
||||
TARGET_C_PROPERTIES (hl_ex_${example} STATIC " " " ")
|
||||
target_link_libraries (hl_ex_${example} ${HDF5_HL_LIB_TARGET} ${HDF5_LIB_TARGET})
|
||||
set_target_properties (hl_ex_${example} PROPERTIES FOLDER examples/hl)
|
||||
|
@ -1,5 +1,5 @@
|
||||
cmake_minimum_required (VERSION 3.10)
|
||||
PROJECT (HDF5_HL_F90 C CXX Fortran)
|
||||
project (HDF5_HL_F90 C Fortran)
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# List Source files
|
||||
|
@ -1,13 +1,5 @@
|
||||
cmake_minimum_required (VERSION 3.10)
|
||||
PROJECT (HDF5_HL_F90_EXAMPLES C CXX Fortran)
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# Setup include Directories
|
||||
#-----------------------------------------------------------------------------
|
||||
INCLUDE_DIRECTORIES (
|
||||
${HDF5_F90_BINARY_DIR}
|
||||
${HDF5_F90_SRC_DIR}/src
|
||||
)
|
||||
project (HDF5_HL_F90_EXAMPLES C Fortran)
|
||||
|
||||
set (examples
|
||||
exlite
|
||||
@ -23,6 +15,7 @@ foreach (example ${examples})
|
||||
${HDF5_LIB_TARGET}
|
||||
)
|
||||
target_include_directories (hl_f90_ex_${example} PRIVATE ${CMAKE_Fortran_MODULE_DIRECTORY}/static)
|
||||
set_property(TARGET hl_f90_ex_${example} APPEND PROPERTY INCLUDE_DIRECTORIES "${HDF5_F90_BINARY_DIR};${HDF5_F90_SRC_DIR}/src")
|
||||
set_target_properties (hl_f90_ex_${example} PROPERTIES LINKER_LANGUAGE Fortran)
|
||||
set_target_properties (hl_f90_ex_${example} PROPERTIES FOLDER examples/hl/fortran)
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
cmake_minimum_required (VERSION 3.10)
|
||||
project (HDF5_HL_F90_SRC C CXX Fortran)
|
||||
project (HDF5_HL_F90_SRC C Fortran)
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# configure def file for shared libs on windows
|
||||
@ -18,7 +18,7 @@ endif ()
|
||||
add_executable (H5HL_buildiface
|
||||
${HDF5_HL_F90_SRC_SOURCE_DIR}/H5HL_buildiface.F90
|
||||
)
|
||||
|
||||
target_include_directories(H5HL_buildiface PRIVATE "${HDF5_BINARY_DIR};${HDF5_F90_BINARY_DIR}")
|
||||
if (WIN32 AND MSVC)
|
||||
if (BUILD_SHARED_LIBS)
|
||||
set_target_properties (H5HL_buildiface
|
||||
@ -43,18 +43,6 @@ endif ()
|
||||
file (MAKE_DIRECTORY "${HDF5_HL_F90_BINARY_DIR}/static")
|
||||
set (MOD_BUILD_DIR ${CMAKE_Fortran_MODULE_DIRECTORY}/static/${HDF_CFG_BUILD_TYPE})
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# Setup include Directories
|
||||
#-----------------------------------------------------------------------------
|
||||
INCLUDE_DIRECTORIES (
|
||||
${HDF5_HL_SRC_DIR}/src
|
||||
${HDF5_F90_SRC_DIR}/src
|
||||
${HDF5_HL_F90_SRC_SOURCE_DIR}
|
||||
${HDF5_F90_BINARY_DIR}
|
||||
${CMAKE_Fortran_MODULE_DIRECTORY}
|
||||
${MOD_BUILD_DIR}
|
||||
)
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# hl_f90CStub lib
|
||||
#-----------------------------------------------------------------------------
|
||||
@ -70,7 +58,8 @@ set_source_files_properties (${HDF5_HL_F90_C_SOURCES} PROPERTIES LANGUAGE C)
|
||||
set (HDF5_HL_F90_HEADERS ${HDF5_HL_F90_SRC_SOURCE_DIR}/H5LTf90proto.h)
|
||||
|
||||
add_library (${HDF5_HL_F90_C_LIB_TARGET} STATIC ${HDF5_HL_F90_C_SOURCES} ${HDF5_HL_F90_HEADERS})
|
||||
target_include_directories(${HDF5_HL_F90_C_LIB_TARGET} PUBLIC ${HDF5_F90_BINARY_DIR}/static)
|
||||
target_include_directories(${HDF5_HL_F90_C_LIB_TARGET} PUBLIC "${HDF5_F90_BINARY_DIR}/static")
|
||||
set_property(TARGET ${HDF5_HL_F90_C_LIB_TARGET} APPEND PROPERTY INCLUDE_DIRECTORIES "${HDF5_SRC_DIR};${HDF5_BINARY_DIR}")
|
||||
TARGET_C_PROPERTIES (${HDF5_HL_F90_C_LIB_TARGET} STATIC " " " ")
|
||||
target_link_libraries (${HDF5_HL_F90_C_LIB_TARGET} PUBLIC ${HDF5_F90_C_LIB_TARGET} ${HDF5_HL_LIB_TARGET})
|
||||
set_global_variable (HDF5_LIBRARIES_TO_EXPORT "${HDF5_LIBRARIES_TO_EXPORT};${HDF5_HL_F90_C_LIB_TARGET}")
|
||||
@ -84,7 +73,8 @@ set (install_targets ${HDF5_HL_F90_C_LIB_TARGET})
|
||||
|
||||
if (BUILD_SHARED_LIBS)
|
||||
add_library (${HDF5_HL_F90_C_LIBSH_TARGET} SHARED ${HDF5_HL_F90_C_SOURCES} ${HDF5_HL_F90_HEADERS})
|
||||
target_include_directories(${HDF5_HL_F90_C_LIBSH_TARGET} PUBLIC ${HDF5_F90_BINARY_DIR}/shared)
|
||||
target_include_directories(${HDF5_HL_F90_C_LIBSH_TARGET} PUBLIC "${HDF5_F90_BINARY_DIR}/shared")
|
||||
set_property(TARGET ${HDF5_HL_F90_C_LIBSH_TARGET} APPEND PROPERTY INCLUDE_DIRECTORIES "${HDF5_SRC_DIR};${HDF5_BINARY_DIR}")
|
||||
TARGET_C_PROPERTIES (${HDF5_HL_F90_C_LIBSH_TARGET} SHARED " " " ")
|
||||
target_link_libraries (${HDF5_HL_F90_C_LIBSH_TARGET} PUBLIC ${HDF5_F90_C_LIBSH_TARGET} ${HDF5_HL_LIBSH_TARGET})
|
||||
set_global_variable (HDF5_LIBRARIES_TO_EXPORT "${HDF5_LIBRARIES_TO_EXPORT};${HDF5_HL_F90_C_LIBSH_TARGET}")
|
||||
@ -165,10 +155,11 @@ endif ()
|
||||
add_library (${HDF5_HL_F90_LIB_TARGET} STATIC ${HDF5_HL_F90_F_SOURCES})
|
||||
TARGET_FORTRAN_PROPERTIES (${HDF5_HL_F90_LIB_TARGET} STATIC " " " ")
|
||||
target_link_libraries (${HDF5_HL_F90_LIB_TARGET} PUBLIC ${HDF5_HL_F90_C_LIB_TARGET} ${HDF5_F90_LIB_TARGET})
|
||||
target_include_directories (${HDF5_HL_F90_LIB_TARGET} PUBLIC ${CMAKE_Fortran_MODULE_DIRECTORY}/static)
|
||||
target_include_directories (${HDF5_HL_F90_LIB_TARGET} PUBLIC "${CMAKE_Fortran_MODULE_DIRECTORY}/static")
|
||||
if (H5_HAVE_PARALLEL AND MPI_Fortran_FOUND)
|
||||
target_include_directories (${HDF5_HL_F90_LIB_TARGET} PUBLIC ${MPI_Fortran_INCLUDE_DIRS})
|
||||
endif ()
|
||||
set_property(TARGET ${HDF5_HL_F90_LIB_TARGET} APPEND PROPERTY INCLUDE_DIRECTORIES "${HDF5_F90_BINARY_DIR}")
|
||||
set_global_variable (HDF5_LIBRARIES_TO_EXPORT "${HDF5_LIBRARIES_TO_EXPORT};${HDF5_HL_F90_LIB_TARGET}")
|
||||
H5_SET_LIB_OPTIONS (${HDF5_HL_F90_LIB_TARGET} ${HDF5_HL_F90_LIB_NAME} STATIC 0)
|
||||
set_target_properties (${HDF5_HL_F90_LIB_TARGET} PROPERTIES
|
||||
@ -194,7 +185,8 @@ if (BUILD_SHARED_LIBS)
|
||||
TARGET_FORTRAN_PROPERTIES (${HDF5_HL_F90_LIBSH_TARGET} SHARED " " ${SHARED_LINK_FLAGS})
|
||||
target_link_libraries (${HDF5_HL_F90_LIBSH_TARGET} PUBLIC ${HDF5_HL_F90_C_LIBSH_TARGET} ${HDF5_F90_LIBSH_TARGET})
|
||||
target_link_libraries (${HDF5_HL_F90_LIBSH_TARGET} PRIVATE ${LINK_Fortran_LIBS})
|
||||
target_include_directories (${HDF5_HL_F90_LIBSH_TARGET} PUBLIC ${CMAKE_Fortran_MODULE_DIRECTORY}/shared)
|
||||
target_include_directories (${HDF5_HL_F90_LIBSH_TARGET} PUBLIC "${CMAKE_Fortran_MODULE_DIRECTORY}/shared")
|
||||
set_property(TARGET ${HDF5_HL_F90_LIBSH_TARGET} APPEND PROPERTY INCLUDE_DIRECTORIES "${HDF5_F90_BINARY_DIR}")
|
||||
if (H5_HAVE_PARALLEL AND MPI_Fortran_FOUND)
|
||||
target_include_directories (${HDF5_HL_F90_LIBSH_TARGET} PUBLIC ${MPI_Fortran_INCLUDE_DIRS})
|
||||
endif ()
|
||||
|
@ -1,16 +1,16 @@
|
||||
cmake_minimum_required (VERSION 3.10)
|
||||
PROJECT (HDF5_HL_FORTRAN_TESTS C CXX Fortran)
|
||||
project (HDF5_HL_FORTRAN_TESTS C Fortran)
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# Add Tests
|
||||
#-----------------------------------------------------------------------------
|
||||
INCLUDE_DIRECTORIES (${CMAKE_Fortran_MODULE_DIRECTORY} ${HDF5_F90_BINARY_DIR} ${HDF5_F90_SRC_DIR}/src)
|
||||
|
||||
#-- Adding test for hl_f90_tstds
|
||||
add_executable (hl_f90_tstds tstds.F90)
|
||||
TARGET_FORTRAN_PROPERTIES (hl_f90_tstds STATIC " " " ")
|
||||
target_link_libraries (hl_f90_tstds ${HDF5_HL_F90_LIB_TARGET} ${HDF5_F90_LIB_TARGET})
|
||||
target_include_directories (hl_f90_tstds PRIVATE ${CMAKE_Fortran_MODULE_DIRECTORY}/static)
|
||||
set_property(TARGET hl_f90_tstds APPEND PROPERTY INCLUDE_DIRECTORIES "${HDF5_F90_BINARY_DIR};${HDF5_F90_SRC_DIR}/src")
|
||||
set_target_properties (hl_f90_tstds PROPERTIES LINKER_LANGUAGE Fortran)
|
||||
set_target_properties (hl_f90_tstds PROPERTIES FOLDER test/hl/fortran)
|
||||
if (BUILD_SHARED_LIBS)
|
||||
@ -18,6 +18,7 @@ if (BUILD_SHARED_LIBS)
|
||||
TARGET_FORTRAN_PROPERTIES (hl_f90_tstds-shared SHARED " " " ")
|
||||
target_link_libraries (hl_f90_tstds-shared ${HDF5_HL_F90_LIBSH_TARGET} ${HDF5_F90_LIBSH_TARGET})
|
||||
target_include_directories (hl_f90_tstds-shared PRIVATE ${CMAKE_Fortran_MODULE_DIRECTORY}/shared)
|
||||
set_property(TARGET hl_f90_tstds-shared APPEND PROPERTY INCLUDE_DIRECTORIES "${HDF5_F90_BINARY_DIR};${HDF5_F90_SRC_DIR}/src")
|
||||
set_target_properties (hl_f90_tstds-shared PROPERTIES
|
||||
LINKER_LANGUAGE Fortran
|
||||
FOLDER test/hl/fortran
|
||||
@ -30,6 +31,7 @@ add_executable (hl_f90_tstlite tstlite.F90)
|
||||
TARGET_FORTRAN_PROPERTIES (hl_f90_tstlite STATIC " " " ")
|
||||
target_link_libraries (hl_f90_tstlite ${HDF5_HL_F90_LIB_TARGET} ${HDF5_F90_LIB_TARGET} ${HDF5_F90_TEST_LIB_TARGET})
|
||||
target_include_directories (hl_f90_tstlite PRIVATE ${CMAKE_Fortran_MODULE_DIRECTORY}/static)
|
||||
set_property(TARGET hl_f90_tstlite APPEND PROPERTY INCLUDE_DIRECTORIES "${HDF5_F90_BINARY_DIR};${HDF5_F90_SRC_DIR}/src")
|
||||
set_target_properties (hl_f90_tstlite PROPERTIES LINKER_LANGUAGE Fortran)
|
||||
set_target_properties (hl_f90_tstlite PROPERTIES FOLDER test/hl/fortran)
|
||||
if (BUILD_SHARED_LIBS)
|
||||
@ -37,6 +39,7 @@ if (BUILD_SHARED_LIBS)
|
||||
TARGET_FORTRAN_PROPERTIES (hl_f90_tstlite-shared SHARED " " " ")
|
||||
target_link_libraries (hl_f90_tstlite-shared ${HDF5_HL_F90_LIBSH_TARGET} ${HDF5_F90_LIBSH_TARGET} ${HDF5_F90_TEST_LIBSH_TARGET})
|
||||
target_include_directories (hl_f90_tstlite-shared PRIVATE ${CMAKE_Fortran_MODULE_DIRECTORY}/shared)
|
||||
set_property(TARGET hl_f90_tstlite-shared APPEND PROPERTY INCLUDE_DIRECTORIES "${HDF5_F90_BINARY_DIR};${HDF5_F90_SRC_DIR}/src")
|
||||
set_target_properties (hl_f90_tstlite-shared PROPERTIES
|
||||
LINKER_LANGUAGE Fortran
|
||||
FOLDER test/hl/fortran
|
||||
@ -49,6 +52,7 @@ add_executable (hl_f90_tstimage tstimage.F90)
|
||||
TARGET_FORTRAN_PROPERTIES (hl_f90_tstimage STATIC " " " ")
|
||||
target_link_libraries (hl_f90_tstimage ${HDF5_HL_F90_LIB_TARGET} ${HDF5_F90_LIB_TARGET})
|
||||
target_include_directories (hl_f90_tstimage PRIVATE ${CMAKE_Fortran_MODULE_DIRECTORY}/static)
|
||||
set_property(TARGET hl_f90_tstimage APPEND PROPERTY INCLUDE_DIRECTORIES "${HDF5_F90_BINARY_DIR};${HDF5_F90_SRC_DIR}/src")
|
||||
set_target_properties (hl_f90_tstimage PROPERTIES LINKER_LANGUAGE Fortran)
|
||||
set_target_properties (hl_f90_tstimage PROPERTIES FOLDER test/hl/fortran)
|
||||
if (BUILD_SHARED_LIBS)
|
||||
@ -56,6 +60,7 @@ if (BUILD_SHARED_LIBS)
|
||||
TARGET_FORTRAN_PROPERTIES (hl_f90_tstimage-shared SHARED " " " ")
|
||||
target_link_libraries (hl_f90_tstimage-shared ${HDF5_HL_F90_LIBSH_TARGET} ${HDF5_F90_LIBSH_TARGET})
|
||||
target_include_directories (hl_f90_tstimage-shared PRIVATE ${CMAKE_Fortran_MODULE_DIRECTORY}/shared)
|
||||
set_property(TARGET hl_f90_tstimage-shared APPEND PROPERTY INCLUDE_DIRECTORIES "${HDF5_F90_BINARY_DIR};${HDF5_F90_SRC_DIR}/src")
|
||||
set_target_properties (hl_f90_tstimage-shared PROPERTIES
|
||||
LINKER_LANGUAGE Fortran
|
||||
FOLDER test/hl/fortran
|
||||
@ -68,6 +73,7 @@ add_executable (hl_f90_tsttable tsttable.F90)
|
||||
TARGET_FORTRAN_PROPERTIES (hl_f90_tsttable STATIC " " " ")
|
||||
target_link_libraries (hl_f90_tsttable ${HDF5_HL_F90_LIB_TARGET} ${HDF5_F90_LIB_TARGET} ${HDF5_F90_TEST_LIB_TARGET})
|
||||
target_include_directories (hl_f90_tsttable PRIVATE ${CMAKE_Fortran_MODULE_DIRECTORY}/static)
|
||||
set_property(TARGET hl_f90_tsttable APPEND PROPERTY INCLUDE_DIRECTORIES "${HDF5_F90_BINARY_DIR};${HDF5_F90_SRC_DIR}/src")
|
||||
set_target_properties (hl_f90_tsttable PROPERTIES LINKER_LANGUAGE Fortran)
|
||||
set_target_properties (hl_f90_tsttable PROPERTIES FOLDER test/hl/fortran)
|
||||
if (BUILD_SHARED_LIBS)
|
||||
@ -75,6 +81,7 @@ if (BUILD_SHARED_LIBS)
|
||||
TARGET_FORTRAN_PROPERTIES (hl_f90_tsttable-shared SHARED " " " ")
|
||||
target_link_libraries (hl_f90_tsttable-shared ${HDF5_HL_F90_LIBSH_TARGET} ${HDF5_F90_LIBSH_TARGET} ${HDF5_F90_TEST_LIBSH_TARGET})
|
||||
target_include_directories (hl_f90_tsttable-shared PRIVATE ${CMAKE_Fortran_MODULE_DIRECTORY}/shared)
|
||||
set_property(TARGET hl_f90_tsttable-shared APPEND PROPERTY INCLUDE_DIRECTORIES "${HDF5_F90_BINARY_DIR};${HDF5_F90_SRC_DIR}/src")
|
||||
set_target_properties (hl_f90_tsttable-shared PROPERTIES
|
||||
LINKER_LANGUAGE Fortran
|
||||
FOLDER test/hl/fortran
|
||||
|
@ -1,5 +1,5 @@
|
||||
cmake_minimum_required (VERSION 3.10)
|
||||
PROJECT (HDF5_HL_SRC)
|
||||
project (HDF5_HL_SRC C)
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# List Source files
|
||||
@ -30,6 +30,7 @@ set (HL_HEADERS
|
||||
)
|
||||
|
||||
add_library (${HDF5_HL_LIB_TARGET} STATIC ${HL_SOURCES} ${HL_HEADERS})
|
||||
set_property(TARGET ${HDF5_HL_LIB_TARGET} APPEND PROPERTY INCLUDE_DIRECTORIES "${HDF5_SRC_DIR};${HDF5_BINARY_DIR}")
|
||||
TARGET_C_PROPERTIES (${HDF5_HL_LIB_TARGET} STATIC " " " ")
|
||||
target_link_libraries (${HDF5_HL_LIB_TARGET} PUBLIC ${HDF5_LIB_TARGET})
|
||||
H5_SET_LIB_OPTIONS (${HDF5_HL_LIB_TARGET} ${HDF5_HL_LIB_NAME} STATIC 0)
|
||||
@ -42,6 +43,7 @@ set (install_targets ${HDF5_HL_LIB_TARGET})
|
||||
|
||||
if (BUILD_SHARED_LIBS)
|
||||
add_library (${HDF5_HL_LIBSH_TARGET} SHARED ${HL_SOURCES} ${HL_HEADERS})
|
||||
set_property(TARGET ${HDF5_HL_LIBSH_TARGET} APPEND PROPERTY INCLUDE_DIRECTORIES "${HDF5_SRC_DIR};${HDF5_BINARY_DIR}")
|
||||
TARGET_C_PROPERTIES (${HDF5_HL_LIBSH_TARGET} SHARED " " " ")
|
||||
target_link_libraries (${HDF5_HL_LIBSH_TARGET} PUBLIC ${HDF5_LIBSH_TARGET})
|
||||
H5_SET_LIB_OPTIONS (${HDF5_HL_LIBSH_TARGET} ${HDF5_HL_LIB_NAME} SHARED "HL")
|
||||
|
@ -1,5 +1,5 @@
|
||||
cmake_minimum_required (VERSION 3.10)
|
||||
PROJECT (HDF5_HL_TEST)
|
||||
project (HDF5_HL_TEST C)
|
||||
# --------------------------------------------------------------------
|
||||
# Notes: When creating unit test executables they should be prefixed
|
||||
# with "hl_". This allows for easier filtering of the test suite when
|
||||
@ -14,14 +14,12 @@ PROJECT (HDF5_HL_TEST)
|
||||
set (srcdir ${CMAKE_CURRENT_SOURCE_DIR})
|
||||
configure_file (${HDF5_HL_TEST_SOURCE_DIR}/H5srcdir_str.h.in H5srcdir_str.h @ONLY)
|
||||
|
||||
include_directories (${CMAKE_CURRENT_BINARY_DIR})
|
||||
include_directories (${HDF5_TEST_SRC_DIR})
|
||||
|
||||
# --------------------------------------------------------------------
|
||||
# Macro used to add a unit test
|
||||
# --------------------------------------------------------------------
|
||||
MACRO (HL_ADD_EXE hl_name)
|
||||
add_executable (hl_${hl_name} ${hl_name}.c)
|
||||
set_property(TARGET hl_${hl_name} APPEND PROPERTY INCLUDE_DIRECTORIES "${HDF5_TEST_SRC_DIR};${HDF5_SRC_DIR};${HDF5_BINARY_DIR}")
|
||||
TARGET_C_PROPERTIES (hl_${hl_name} STATIC " " " ")
|
||||
target_link_libraries (hl_${hl_name}
|
||||
${HDF5_HL_LIB_TARGET}
|
||||
@ -33,6 +31,7 @@ ENDMACRO ()
|
||||
|
||||
MACRO (HL_ADD_SHEXE hl_name)
|
||||
add_executable (hl_${hl_name} ${hl_name}.c)
|
||||
set_property(TARGET hl_${hl_name} APPEND PROPERTY INCLUDE_DIRECTORIES "${HDF5_TEST_SRC_DIR};${HDF5_SRC_DIR};${HDF5_BINARY_DIR}")
|
||||
TARGET_C_PROPERTIES (hl_${hl_name} SHARED " " " ")
|
||||
target_link_libraries (hl_${hl_name}
|
||||
${HDF5_HL_LIBSH_TARGET}
|
||||
@ -53,6 +52,7 @@ HL_ADD_EXE (test_dset_append)
|
||||
|
||||
# test_packet has two source files
|
||||
add_executable (hl_test_packet test_packet.c test_packet_vlen.c)
|
||||
set_property(TARGET hl_test_packet APPEND PROPERTY INCLUDE_DIRECTORIES "${HDF5_TEST_SRC_DIR};${HDF5_SRC_DIR};${HDF5_BINARY_DIR}")
|
||||
TARGET_C_PROPERTIES (hl_test_packet STATIC " " " ")
|
||||
target_link_libraries (hl_test_packet
|
||||
${HDF5_HL_LIB_TARGET}
|
||||
@ -67,6 +67,7 @@ set_target_properties (hl_test_packet PROPERTIES FOLDER test/hl)
|
||||
# --------------------------------------------------------------------
|
||||
if (HDF5_BUILD_GENERATORS)
|
||||
add_executable (hl_gen_test_ds gen_test_ds.c)
|
||||
set_property(TARGET hl_gen_test_ds APPEND PROPERTY INCLUDE_DIRECTORIES "${HDF5_SRC_DIR};${HDF5_BINARY_DIR}")
|
||||
TARGET_C_PROPERTIES (hl_gen_test_ds STATIC " " " ")
|
||||
target_link_libraries (hl_gen_test_ds
|
||||
${HDF5_HL_LIB_TARGET}
|
||||
@ -76,6 +77,7 @@ if (HDF5_BUILD_GENERATORS)
|
||||
set_target_properties (hl_gen_test_ds PROPERTIES FOLDER test/hl/gen)
|
||||
|
||||
add_executable (hl_gen_test_ld gen_test_ld.c)
|
||||
set_property(TARGET hl_gen_test_ld APPEND PROPERTY INCLUDE_DIRECTORIES "${HDF5_SRC_DIR};${HDF5_BINARY_DIR}")
|
||||
TARGET_C_PROPERTIES (hl_gen_test_ld STATIC " " " ")
|
||||
target_link_libraries (hl_gen_test_ld
|
||||
${HDF5_HL_LIB_TARGET}
|
||||
|
@ -1,5 +1,5 @@
|
||||
cmake_minimum_required (VERSION 3.10)
|
||||
PROJECT (HDF5_HL_TOOLS C CXX)
|
||||
project (HDF5_HL_TOOLS C)
|
||||
|
||||
add_subdirectory (gif2h5)
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
cmake_minimum_required (VERSION 3.10)
|
||||
PROJECT (HDF5_HL_TOOLS_GIF2H5)
|
||||
project (HDF5_HL_TOOLS_GIF2H5 C)
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# Define Sources
|
||||
@ -14,10 +14,8 @@ set (GIF2H5_SOURCES
|
||||
)
|
||||
|
||||
#-- Add gif2hdf5 program
|
||||
INCLUDE_DIRECTORIES (${HDF5_TOOLS_DIR}/lib)
|
||||
INCLUDE_DIRECTORIES (${HDF5_HL_TOOLS_GIF2H5_SOURCE_DIR})
|
||||
|
||||
add_executable (gif2h5 ${GIF2H5_SOURCES})
|
||||
set_property(TARGET gif2h5 APPEND PROPERTY INCLUDE_DIRECTORIES "${HDF5_SRC_DIR};${HDF5_BINARY_DIR}")
|
||||
TARGET_C_PROPERTIES (gif2h5 STATIC " " " ")
|
||||
target_link_libraries (gif2h5 ${HDF5_HL_LIB_TARGET} ${HDF5_LIB_TARGET} ${HDF5_TOOLS_LIB_TARGET})
|
||||
set_target_properties (gif2h5 PROPERTIES FOLDER tools/hl)
|
||||
@ -29,6 +27,7 @@ set (hdf2gif_SOURCES
|
||||
${HDF5_HL_TOOLS_GIF2H5_SOURCE_DIR}/hdfgifwr.c
|
||||
)
|
||||
add_executable (h52gif ${hdf2gif_SOURCES})
|
||||
set_property(TARGET h52gif APPEND PROPERTY INCLUDE_DIRECTORIES "${HDF5_SRC_DIR};${HDF5_BINARY_DIR}")
|
||||
TARGET_C_PROPERTIES (h52gif STATIC " " " ")
|
||||
target_link_libraries (h52gif ${HDF5_HL_LIB_TARGET} ${HDF5_LIB_TARGET} ${HDF5_TOOLS_LIB_TARGET})
|
||||
set_target_properties (h52gif PROPERTIES FOLDER tools/hl)
|
||||
@ -42,6 +41,7 @@ if (BUILD_TESTING)
|
||||
# --------------------------------------------------------------------
|
||||
if (HDF5_BUILD_GENERATORS)
|
||||
add_executable (hl_h52gifgentest ${HDF5_HL_TOOLS_GIF2H5_SOURCE_DIR}/h52gifgentst.c)
|
||||
set_property(TARGET hl_h52gifgentest APPEND PROPERTY INCLUDE_DIRECTORIES "${HDF5_SRC_DIR};${HDF5_BINARY_DIR}")
|
||||
TARGET_C_PROPERTIES (hl_h52gifgentest STATIC " " " ")
|
||||
target_link_libraries (hl_h52gifgentest ${HDF5_HL_LIB_TARGET} ${HDF5_LIB_TARGET})
|
||||
set_target_properties (hl_h52gifgentest PROPERTIES FOLDER generator/tools/hl)
|
||||
|
@ -1,5 +1,5 @@
|
||||
cmake_minimum_required (VERSION 3.10)
|
||||
PROJECT (HDF5_HL_TOOLS_H5WATCH)
|
||||
project (HDF5_HL_TOOLS_H5WATCH C)
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# Define Sources
|
||||
@ -9,25 +9,21 @@ set (H5WATCH_SOURCES
|
||||
)
|
||||
|
||||
#-- Add h5watch program
|
||||
include_directories (${HDF5_TOOLS_DIR}/lib)
|
||||
include_directories (${HDF5_HL_TOOLS_DIR}/src)
|
||||
include_directories (${HDF5_HL_TOOLS_H5WATCH_SOURCE_DIR})
|
||||
|
||||
add_executable (h5watch ${H5WATCH_SOURCES})
|
||||
set_property(TARGET h5watch APPEND PROPERTY INCLUDE_DIRECTORIES "${HDF5_TOOLS_DIR}/lib;${HDF5_SRC_DIR};${HDF5_BINARY_DIR}")
|
||||
TARGET_C_PROPERTIES (h5watch STATIC " " " ")
|
||||
target_link_libraries (h5watch ${HDF5_HL_LIB_TARGET} ${HDF5_LIB_TARGET} ${HDF5_TOOLS_LIB_TARGET})
|
||||
set_target_properties (h5watch PROPERTIES FOLDER tools/hl)
|
||||
|
||||
if (BUILD_TESTING)
|
||||
include_directories (${HDF5_TEST_SRC_DIR})
|
||||
include_directories(${HDF5_HL_SRC_DIR}/test)
|
||||
#-- Add swmr_check_compat_vfd program
|
||||
set (hl_swmr_check_compat_vfd_SOURCES
|
||||
${HDF5_HL_TOOLS_H5WATCH_SOURCE_DIR}/swmr_check_compat_vfd.c
|
||||
)
|
||||
add_executable (hl_swmr_check_compat_vfd ${hl_swmr_check_compat_vfd_SOURCES})
|
||||
set_property(TARGET hl_swmr_check_compat_vfd APPEND PROPERTY INCLUDE_DIRECTORIES "${HDF5_SRC_DIR};${HDF5_BINARY_DIR}")
|
||||
TARGET_C_PROPERTIES (hl_swmr_check_compat_vfd STATIC " " " ")
|
||||
target_link_libraries (hl_swmr_check_compat_vfd ${HDF5_HL_LIB_TARGET} ${HDF5_LIB_TARGET} ${HDF5_TOOLS_LIB_TARGET})
|
||||
target_link_libraries (hl_swmr_check_compat_vfd ${HDF5_LIB_TARGET})
|
||||
set_target_properties (hl_swmr_check_compat_vfd PROPERTIES FOLDER tools/hl)
|
||||
|
||||
#-- Add extend_dset program
|
||||
@ -35,11 +31,13 @@ if (BUILD_TESTING)
|
||||
${HDF5_HL_TOOLS_H5WATCH_SOURCE_DIR}/extend_dset.c
|
||||
)
|
||||
add_executable (extend_dset ${extend_dset_SOURCES})
|
||||
set_property(TARGET extend_dset APPEND PROPERTY INCLUDE_DIRECTORIES "${HDF5_HL_SRC_DIR}/test;${HDF5_HL_SRC_DIR}/src;${HDF5_SRC_DIR};${HDF5_BINARY_DIR}")
|
||||
TARGET_C_PROPERTIES (extend_dset STATIC " " " ")
|
||||
target_link_libraries (extend_dset ${HDF5_HL_LIB_TARGET} ${HDF5_TEST_LIB_TARGET} ${HDF5_LIB_TARGET} ${HDF5_TOOLS_LIB_TARGET})
|
||||
set_target_properties (extend_dset PROPERTIES FOLDER tools/hl)
|
||||
|
||||
add_executable (h5watchgentest ${HDF5_HL_TOOLS_H5WATCH_SOURCE_DIR}/h5watchgentest.c)
|
||||
set_property(TARGET h5watchgentest APPEND PROPERTY INCLUDE_DIRECTORIES "${HDF5_HL_SRC_DIR}/src;${HDF5_SRC_DIR};${HDF5_BINARY_DIR}")
|
||||
TARGET_C_PROPERTIES (h5watchgentest STATIC " " " ")
|
||||
target_link_libraries (h5watchgentest ${HDF5_HL_LIB_TARGET} ${HDF5_LIB_TARGET})
|
||||
set_target_properties (h5watchgentest PROPERTIES FOLDER generator/tools/hl)
|
||||
|
@ -1,8 +1,9 @@
|
||||
cmake_minimum_required (VERSION 3.10)
|
||||
PROJECT ( HDF5_JAVA C Java )
|
||||
project (HDF5_JAVA C Java)
|
||||
|
||||
set (CMAKE_MODULE_PATH "${HDF_RESOURCES_DIR};${HDF_RESOURCES_EXT_DIR}")
|
||||
find_package (Java)
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# Include some macros for reusable code
|
||||
#-----------------------------------------------------------------------------
|
||||
@ -13,7 +14,6 @@ find_package (JNI)
|
||||
message ("JNI_LIBRARIES=${JNI_LIBRARIES}")
|
||||
message ("JNI_INCLUDE_DIRS=${JNI_INCLUDE_DIRS}")
|
||||
|
||||
INCLUDE_DIRECTORIES ( ${JNI_INCLUDE_DIRS} )
|
||||
|
||||
if (WIN32)
|
||||
set (HDF_JRE_DIRECTORY "C:/Program Files/Java/jre8")
|
||||
@ -25,13 +25,14 @@ endif ()
|
||||
# Include the main src and config directories
|
||||
#-----------------------------------------------------------------------------
|
||||
set (HDF5_JAVA_INCLUDE_DIRECTORIES
|
||||
${JNI_INCLUDE_DIRS}
|
||||
${HDF5_JAVA_JNI_SRC_DIR}
|
||||
${JAVA_INCLUDE_PATH}
|
||||
${JAVA_INCLUDE_PATH2}
|
||||
)
|
||||
INCLUDE_DIRECTORIES (${HDF5_JAVA_INCLUDE_DIRECTORIES})
|
||||
set (CMAKE_JAVA_INCLUDE_PATH "")
|
||||
set_directory_properties(PROPERTIES INCLUDE_DIRECTORIES "${HDF5_JAVA_INCLUDE_DIRECTORIES}")
|
||||
|
||||
set (CMAKE_JAVA_INCLUDE_PATH "")
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# Traverse source subdirectory
|
||||
|
@ -1,5 +1,5 @@
|
||||
cmake_minimum_required (VERSION 3.10)
|
||||
PROJECT (HDFJAVA_EXAMPLES)
|
||||
project (HDFJAVA_EXAMPLES Java)
|
||||
|
||||
add_subdirectory (datasets)
|
||||
add_subdirectory (datatypes)
|
||||
|
@ -1,13 +1,8 @@
|
||||
cmake_minimum_required (VERSION 3.10)
|
||||
PROJECT (HDFJAVA_EXAMPLES_DATASETS Java)
|
||||
project (HDFJAVA_EXAMPLES_DATASETS Java)
|
||||
|
||||
set (CMAKE_VERBOSE_MAKEFILE 1)
|
||||
|
||||
INCLUDE_DIRECTORIES (
|
||||
${HDF5_JAVA_JNI_BINARY_DIR}
|
||||
${HDF5_JAVA_HDF5_LIB_DIR}
|
||||
)
|
||||
|
||||
set (HDF_JAVA_EXAMPLES
|
||||
H5Ex_D_Alloc
|
||||
H5Ex_D_Checksum
|
||||
|
@ -1,13 +1,8 @@
|
||||
cmake_minimum_required (VERSION 3.10)
|
||||
PROJECT (HDFJAVA_EXAMPLES_DATATYPES Java)
|
||||
project (HDFJAVA_EXAMPLES_DATATYPES Java)
|
||||
|
||||
set (CMAKE_VERBOSE_MAKEFILE 1)
|
||||
|
||||
INCLUDE_DIRECTORIES (
|
||||
${HDF5_JAVA_JNI_BINARY_DIR}
|
||||
${HDF5_JAVA_HDF5_LIB_DIR}
|
||||
)
|
||||
|
||||
set (HDF_JAVA_EXAMPLES
|
||||
H5Ex_T_Array
|
||||
H5Ex_T_ArrayAttribute
|
||||
|
@ -1,13 +1,8 @@
|
||||
cmake_minimum_required (VERSION 3.10)
|
||||
PROJECT (HDFJAVA_EXAMPLES_GROUPS Java)
|
||||
project (HDFJAVA_EXAMPLES_GROUPS Java)
|
||||
|
||||
set (CMAKE_VERBOSE_MAKEFILE 1)
|
||||
|
||||
INCLUDE_DIRECTORIES (
|
||||
${HDF5_JAVA_JNI_BINARY_DIR}
|
||||
${HDF5_JAVA_HDF5_LIB_DIR}
|
||||
)
|
||||
|
||||
set (HDF_JAVA_EXAMPLES
|
||||
H5Ex_G_Create
|
||||
H5Ex_G_Iterate
|
||||
|
@ -1,13 +1,8 @@
|
||||
cmake_minimum_required (VERSION 3.10)
|
||||
PROJECT (HDFJAVA_EXAMPLES_INTRO Java)
|
||||
project (HDFJAVA_EXAMPLES_INTRO Java)
|
||||
|
||||
set (CMAKE_VERBOSE_MAKEFILE 1)
|
||||
|
||||
INCLUDE_DIRECTORIES (
|
||||
${HDF5_JAVA_JNI_BINARY_DIR}
|
||||
${HDF5_JAVA_HDF5_LIB_DIR}
|
||||
)
|
||||
|
||||
set (HDF_JAVA_EXAMPLES
|
||||
H5_CreateAttribute
|
||||
H5_CreateDataset
|
||||
|
@ -1,5 +1,5 @@
|
||||
cmake_minimum_required (VERSION 3.10)
|
||||
PROJECT ( HDF5_JAVA_SRC C Java )
|
||||
project (HDF5_JAVA_SRC C)
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# Traverse source subdirectory
|
||||
|
@ -1,4 +1,4 @@
|
||||
cmake_minimum_required (VERSION 3.10)
|
||||
PROJECT (HDF5_JAVA_HDF)
|
||||
project (HDF5_JAVA_HDF C)
|
||||
|
||||
add_subdirectory (hdf5lib)
|
||||
|
@ -1,14 +1,9 @@
|
||||
cmake_minimum_required (VERSION 3.10)
|
||||
PROJECT (HDF5_JAVA_HDF_HDF5 Java)
|
||||
project (HDF5_JAVA_HDF_HDF5 Java)
|
||||
|
||||
set (CMAKE_VERBOSE_MAKEFILE 1)
|
||||
|
||||
INCLUDE_DIRECTORIES (
|
||||
${HDF5_JAVA_HDF_HDF5_SOURCE_DIR}
|
||||
${HDF5_JAVA_HDF_HDF5_BINARY_DIR}
|
||||
${HDF5_JAVA_LIB_DIR}
|
||||
${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${HDF5_JAVA_HDF5_LIB_CORENAME}.dir/hdf/hdf5lib
|
||||
)
|
||||
set_directory_properties(PROPERTIES INCLUDE_DIRECTORIES "${HDF5_JAVA_HDF_HDF5_SOURCE_DIR};${HDF5_JAVA_HDF_HDF5_BINARY_DIR};${HDF5_JAVA_LIB_DIR};${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${HDF5_JAVA_HDF5_LIB_CORENAME}.dir/hdf/hdf5lib")
|
||||
|
||||
SET_GLOBAL_VARIABLE (HDF5_JAVA_SOURCE_PACKAGES
|
||||
"${HDF5_JAVA_SOURCE_PACKAGES};hdf.hdf5lib.callbacks;hdf.hdf5lib.exceptions;hdf.hdf5lib.structs;hdf.hdf5lib"
|
||||
|
@ -1274,6 +1274,38 @@ public class H5 implements java.io.Serializable {
|
||||
public synchronized static native int H5Aiterate_by_name(long loc_id, String obj_name, int idx_type,
|
||||
int order, long idx, H5A_iterate_cb op, H5A_iterate_t op_data, long lapl_id) throws HDF5LibraryException, NullPointerException;
|
||||
|
||||
// ////////////////////////////////////////////////////////////
|
||||
// //
|
||||
// H5AC: Cache Interface Functions //
|
||||
// //
|
||||
// ////////////////////////////////////////////////////////////
|
||||
|
||||
// No public Functions
|
||||
|
||||
// ////////////////////////////////////////////////////////////
|
||||
// //
|
||||
// H5B: B-link-tree Interface Functions //
|
||||
// //
|
||||
// ////////////////////////////////////////////////////////////
|
||||
|
||||
// No public Functions
|
||||
|
||||
// ////////////////////////////////////////////////////////////
|
||||
// //
|
||||
// H5B2: v2 B-tree Interface Functions //
|
||||
// //
|
||||
// ////////////////////////////////////////////////////////////
|
||||
|
||||
// No public Functions
|
||||
|
||||
// ////////////////////////////////////////////////////////////
|
||||
// //
|
||||
// H5C: Cache Interface Functions //
|
||||
// //
|
||||
// ////////////////////////////////////////////////////////////
|
||||
|
||||
// No public Functions
|
||||
|
||||
// ////////////////////////////////////////////////////////////
|
||||
// //
|
||||
// H5D: Datasets Interface Functions //
|
||||
@ -2109,6 +2141,10 @@ public class H5 implements java.io.Serializable {
|
||||
|
||||
// /////// unimplemented ////////
|
||||
// H5_DLL herr_t H5Ddebug(hid_t dset_id);
|
||||
// H5_DLL herr_t H5Dget_chunk_storage_size(hid_t dset_id, const hsize_t *offset, hsize_t *chunk_bytes);
|
||||
// H5_DLL herr_t H5Dformat_convert(hid_t dset_id);
|
||||
// H5_DLL herr_t H5Dget_chunk_index_type(hid_t did, H5D_chunk_index_t *idx_type);
|
||||
|
||||
// herr_t H5Dgather(hid_t src_space_id, const void *src_buf, hid_t type_id,
|
||||
// size_t dst_buf_size, void *dst_buf, H5D_gather_func_t op, void *op_data);
|
||||
// herr_t H5Dscatter(H5D_scatter_func_t op, void *op_data, hid_t type_id, hid_t dst_space_id, void *dst_buf);
|
||||
@ -2912,12 +2948,22 @@ 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;
|
||||
|
||||
|
||||
|
||||
// /////// unimplemented ////////
|
||||
// H5_DLL herr_t H5Fget_eoa(hid_t file_id, haddr_t *eoa);
|
||||
// H5_DLL 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*/);
|
||||
// H5_DLL herr_t H5Fset_libver_bounds(hid_t file_id, H5F_libver_t low, H5F_libver_t high);
|
||||
// H5_DLL herr_t H5Fformat_convert(hid_t fid);
|
||||
// H5_DLL herr_t H5Freset_page_buffering_stats(hid_t file_id);
|
||||
// H5_DLL herr_t H5Fget_page_buffering_stats(hid_t file_id, unsigned accesses[2],
|
||||
// unsigned hits[2], unsigned misses[2], unsigned evictions[2], unsigned bypasses[2]);
|
||||
// H5_DLL herr_t H5Fget_mdc_image_info(hid_t file_id, haddr_t *image_addr, hsize_t *image_size);
|
||||
// #ifdef H5_HAVE_PARALLEL
|
||||
// H5_DLL herr_t H5Fset_mpi_atomicity(hid_t file_id, hbool_t flag);
|
||||
// H5_DLL herr_t H5Fget_mpi_atomicity(hid_t file_id, hbool_t *flag);
|
||||
// #endif /* H5_HAVE_PARALLEL */
|
||||
|
||||
// /**
|
||||
// * H5Fget_vfd_handle returns a pointer to the file handle from the
|
||||
@ -2969,6 +3015,41 @@ public class H5 implements java.io.Serializable {
|
||||
// public synchronized static native int H5Fset_mdc_config(int file_id, H5AC_cache_config_t config_ptr)
|
||||
// throws HDF5LibraryException, NullPointerException;
|
||||
|
||||
// ////////////////////////////////////////////////////////////
|
||||
// //
|
||||
// H5FD: File Driver Interface Functions //
|
||||
// //
|
||||
// ////////////////////////////////////////////////////////////
|
||||
|
||||
// /////// unimplemented ////////
|
||||
// H5_DLL hid_t H5FDregister(const H5FD_class_t *cls);
|
||||
// H5_DLL herr_t H5FDunregister(hid_t driver_id);
|
||||
// H5_DLL H5FD_t *H5FDopen(const char *name, unsigned flags, hid_t fapl_id, haddr_t maxaddr);
|
||||
// H5_DLL herr_t H5FDclose(H5FD_t *file);
|
||||
// H5_DLL int H5FDcmp(const H5FD_t *f1, const H5FD_t *f2);
|
||||
// H5_DLL int H5FDquery(const H5FD_t *f, unsigned long *flags);
|
||||
// H5_DLL haddr_t H5FDalloc(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id, hsize_t size);
|
||||
// H5_DLL herr_t H5FDfree(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id, haddr_t addr, hsize_t size);
|
||||
// H5_DLL haddr_t H5FDget_eoa(H5FD_t *file, H5FD_mem_t type);
|
||||
// H5_DLL herr_t H5FDset_eoa(H5FD_t *file, H5FD_mem_t type, haddr_t eoa);
|
||||
// H5_DLL haddr_t H5FDget_eof(H5FD_t *file, H5FD_mem_t type);
|
||||
// H5_DLL herr_t H5FDget_vfd_handle(H5FD_t *file, hid_t fapl, void**file_handle);
|
||||
// H5_DLL herr_t H5FDread(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id, haddr_t addr, size_t size, void *buf/*out*/);
|
||||
// H5_DLL herr_t H5FDwrite(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id, haddr_t addr, size_t size, const void *buf);
|
||||
// H5_DLL herr_t H5FDflush(H5FD_t *file, hid_t dxpl_id, hbool_t closing);
|
||||
// H5_DLL herr_t H5FDtruncate(H5FD_t *file, hid_t dxpl_id, hbool_t closing);
|
||||
// H5_DLL herr_t H5FDlock(H5FD_t *file, hbool_t rw);
|
||||
// H5_DLL herr_t H5FDunlock(H5FD_t *file);
|
||||
// H5_DLL herr_t H5FDdriver_query(hid_t driver_id, unsigned long *flags/*out*/);
|
||||
|
||||
// ////////////////////////////////////////////////////////////
|
||||
// //
|
||||
// H5FS: File Free Space Interface Functions //
|
||||
// //
|
||||
// ////////////////////////////////////////////////////////////
|
||||
|
||||
// No public Functions
|
||||
|
||||
// ////////////////////////////////////////////////////////////
|
||||
// //
|
||||
// H5G: Group Interface Functions //
|
||||
@ -3406,6 +3487,30 @@ public class H5 implements java.io.Serializable {
|
||||
**/
|
||||
public synchronized static native void H5Grefresh(long group_id) throws HDF5LibraryException;
|
||||
|
||||
// ////////////////////////////////////////////////////////////
|
||||
// //
|
||||
// H5HF: Fractal Heap Interface Functions //
|
||||
// //
|
||||
// ////////////////////////////////////////////////////////////
|
||||
|
||||
// No public Functions
|
||||
|
||||
// ////////////////////////////////////////////////////////////
|
||||
// //
|
||||
// H5HG: Global Heap Interface Functions //
|
||||
// //
|
||||
// ////////////////////////////////////////////////////////////
|
||||
|
||||
// No public Functions
|
||||
|
||||
// ////////////////////////////////////////////////////////////
|
||||
// //
|
||||
// H5HL: Local Heap Interface Functions //
|
||||
// //
|
||||
// ////////////////////////////////////////////////////////////
|
||||
|
||||
// No public Functions
|
||||
|
||||
// ////////////////////////////////////////////////////////////
|
||||
// //
|
||||
// H5I: HDF5 1.8 Identifier Interface API Functions //
|
||||
@ -4033,6 +4138,15 @@ public class H5 implements java.io.Serializable {
|
||||
// H5_index_t idx_type, H5_iter_order_t order, hsize_t n,
|
||||
// void *buf/*out*/, size_t size, hid_t lapl_id);
|
||||
|
||||
// ////////////////////////////////////////////////////////////
|
||||
// //
|
||||
// H5MM: Memory Management Interface API Functions //
|
||||
// //
|
||||
// ////////////////////////////////////////////////////////////
|
||||
|
||||
// /////// unimplemented ////////
|
||||
// typedef void *(*H5MM_allocate_t)(size_t size, void *alloc_info);
|
||||
// typedef void (*H5MM_free_t)(void *mem, void *free_info);
|
||||
|
||||
// ////////////////////////////////////////////////////////////
|
||||
// //
|
||||
@ -4450,6 +4564,9 @@ public class H5 implements java.io.Serializable {
|
||||
public synchronized static native void H5Orefresh(long object_id) throws HDF5LibraryException;
|
||||
|
||||
// /////// unimplemented ////////
|
||||
// H5_DLL herr_t H5Odisable_mdc_flushes(hid_t object_id);
|
||||
// H5_DLL herr_t H5Oenable_mdc_flushes(hid_t object_id);
|
||||
// H5_DLL herr_t H5Oare_mdc_flushes_disabled(hid_t object_id, hbool_t *are_disabled);
|
||||
|
||||
// ////////////////////////////////////////////////////////////
|
||||
// //
|
||||
@ -7273,9 +7390,15 @@ public class H5 implements java.io.Serializable {
|
||||
// herr_t H5Pset_file_image_callbacks(hid_t fapl_id, H5FD_file_image_callbacks_t *callbacks_ptr);
|
||||
// herr_t H5Pset_core_write_tracking(hid_t fapl_id, hbool_t is_enabled, size_t page_size);
|
||||
// herr_t H5Pget_core_write_tracking(hid_t fapl_id, hbool_t *is_enabled, size_t *page_size);
|
||||
// #ifdef H5_HAVE_PARALLEL
|
||||
// herr_t H5Pset_all_coll_metadata_ops(hid_t accpl_id, hbool_t is_collective);
|
||||
// H5_DLL herr_t H5Pget_all_coll_metadata_ops(hid_t plist_id, hbool_t *is_collective);
|
||||
// herr_t H5Pset_coll_metadata_write(hid_t fapl_id, hbool_t is_collective);
|
||||
// herr_t H5Pget_coll_metadata_write(hid_t fapl_id, hbool_t *is_collective);
|
||||
// #endif /* H5_HAVE_PARALLEL */
|
||||
// H5_DLL herr_t H5Pset_mdc_image_config(hid_t plist_id, H5AC_cache_image_config_t *config_ptr);
|
||||
// H5_DLL herr_t H5Pget_mdc_image_config(hid_t plist_id, H5AC_cache_image_config_t *config_ptr /*out*/);
|
||||
// H5_DLL herr_t H5Pset_page_buffer_size(hid_t plist_id, size_t buf_size, unsigned min_meta_per, unsigned min_raw_per);
|
||||
// herr_t H5Pget_page_buffer_size(hid_t fapl_id, size_t *buf_size, unsigned *min_meta_perc, unsigned *min_raw_perc);
|
||||
// herr_t H5Pset_object_flush_cb (hid_t fapl_id, H5F_flush_cb_t func, void *user_data);
|
||||
// herr_t H5Pget_object_flush_cb (hid_t fapl_id, H5F_flush_cb_t *func, void **user_data);
|
||||
@ -7297,6 +7420,11 @@ public class H5 implements java.io.Serializable {
|
||||
// *free_info )
|
||||
// herr_t H5Pget_type_conv_cb(hid_t plist, H5T_conv_except_func_t *func, void **op_data)
|
||||
// herr_t H5Pset_type_conv_cb( hid_t plist, H5T_conv_except_func_t func, void *op_data)
|
||||
// #ifdef H5_HAVE_PARALLEL
|
||||
// H5_DLL herr_t H5Pget_mpio_actual_chunk_opt_mode(hid_t plist_id, H5D_mpio_actual_chunk_opt_mode_t *actual_chunk_opt_mode);
|
||||
// H5_DLL herr_t H5Pget_mpio_actual_io_mode(hid_t plist_id, H5D_mpio_actual_io_mode_t *actual_io_mode);
|
||||
// H5_DLL herr_t H5Pget_mpio_no_collective_cause(hid_t plist_id, uint32_t *local_no_collective_cause, uint32_t *global_no_collective_cause);
|
||||
// #endif /* H5_HAVE_PARALLEL */
|
||||
|
||||
// Link creation property list (LCPL) routines //
|
||||
|
||||
@ -7314,21 +7442,6 @@ public class H5 implements java.io.Serializable {
|
||||
// herr_t H5Pget_mcdt_search_cb(hid_t plist_id, H5O_mcdt_search_cb_t *func, void **op_data);
|
||||
// herr_t H5Pset_mcdt_search_cb(hid_t plist_id, H5O_mcdt_search_cb_t func, void *op_data);
|
||||
|
||||
|
||||
// Other/Older property list routines //
|
||||
// herr_t H5Pget_fapl_mpio( int fapl_id, MPI_Comm *comm, MPI_Info *info )
|
||||
// herr_t H5Pset_fapl_mpio( int fapl_id, MPI_Comm comm, MPI_Info info )
|
||||
|
||||
// herr_t H5Pget_fapl_mpiposix( int fapl_id, MPI_Comm *comm, hbool_t *use_gpfs_hints )
|
||||
// herr_t H5Pset_fapl_mpiposix( int fapl_id, MPI_Comm comm, hbool_t use_gpfs_hints )
|
||||
|
||||
// herr_t H5Pget_dxpl_mpio( hid_t dxpl_id, H5FD_mpio_xfer_t *xfer_mode )
|
||||
// herr_t H5Pset_dxpl_mpio( hid_t dxpl_id, H5FD_mpio_xfer_t xfer_mode )
|
||||
// herr_t H5Pset_dxpl_mpio_chunk_opt (hid_t dxpl_id, H5FD_mpio_chunk_opt_t opt_mode)
|
||||
// herr_t H5Pset_dxpl_mpio_chunk_opt_num (hid_t dxpl_id, unsigned num_chunk_per_proc)
|
||||
// herr_t H5Pset_dxpl_mpio_chunk_opt_ratio (hid_t dxpl_id, unsigned percent_proc_per_chunk)
|
||||
// herr_t H5Pset_dxpl_mpio_collective_opt (hid_t dxpl_id, H5FD_mpio_collective_opt_t opt_mode)
|
||||
|
||||
// ////////////////////////////////////////////////////////////
|
||||
// //
|
||||
// H5PL: HDF5 1.8 Plugin API Functions //
|
||||
@ -8252,6 +8365,17 @@ public class H5 implements java.io.Serializable {
|
||||
public synchronized static native boolean H5Sis_regular_hyperslab(long space_id) throws HDF5LibraryException;
|
||||
|
||||
// /////// unimplemented ////////
|
||||
// #ifdef NEW_HYPERSLAB_API
|
||||
// H5_DLL hid_t H5Scombine_hyperslab(hid_t space_id, H5S_seloper_t op,
|
||||
// const hsize_t start[],
|
||||
// const hsize_t _stride[],
|
||||
// const hsize_t count[],
|
||||
// const hsize_t _block[]);
|
||||
// H5_DLL herr_t H5Sselect_select(hid_t space1_id, H5S_seloper_t op,
|
||||
// hid_t space2_id);
|
||||
// H5_DLL hid_t H5Scombine_select(hid_t space1_id, H5S_seloper_t op,
|
||||
// hid_t space2_id);
|
||||
// #endif /* NEW_HYPERSLAB_API */
|
||||
|
||||
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
cmake_minimum_required (VERSION 3.10)
|
||||
PROJECT (HDF5_JAVA_JNI C CXX)
|
||||
project (HDF5_JAVA_JNI C)
|
||||
|
||||
set (HDF5_JAVA_JNI_CSRCS
|
||||
${HDF5_JAVA_JNI_SOURCE_DIR}/exceptionImp.c
|
||||
@ -44,12 +44,11 @@ set (HDF5_JAVA_JNI_CHDRS
|
||||
${HDF5_JAVA_JNI_SOURCE_DIR}/nativeData.h
|
||||
)
|
||||
|
||||
INCLUDE_DIRECTORIES( ${HDF5_JAVA_JNI_SOURCE_DIR} )
|
||||
|
||||
set (CMAKE_INCLUDE_CURRENT_DIR_IN_INTERFACE ON)
|
||||
|
||||
########### JNI libraries always must be built shared ###############
|
||||
add_library (${HDF5_JAVA_JNI_LIB_TARGET} SHARED ${HDF5_JAVA_JNI_CSRCS} ${HDF5_JAVA_JNI_CHDRS})
|
||||
target_include_directories(${HDF5_JAVA_JNI_LIB_TARGET} PRIVATE ${HDF5_BINARY_DIR} ${HDF5_JAVA_JNI_SOURCE_DIR})
|
||||
TARGET_C_PROPERTIES (${HDF5_JAVA_JNI_LIB_TARGET} SHARED " " " ")
|
||||
target_link_libraries (${HDF5_JAVA_JNI_LIB_TARGET} PUBLIC ${HDF5_LIB_TARGET})
|
||||
set_target_properties (${HDF5_JAVA_JNI_LIB_TARGET} PROPERTIES FOLDER libraries/jni)
|
||||
|
@ -1,12 +1,9 @@
|
||||
cmake_minimum_required (VERSION 3.10)
|
||||
PROJECT (HDF5_JAVA_TEST Java)
|
||||
project (HDF5_JAVA_TEST Java)
|
||||
|
||||
set (CMAKE_VERBOSE_MAKEFILE 1)
|
||||
|
||||
INCLUDE_DIRECTORIES (
|
||||
${HDF5_JAVA_JNI_BINARY_DIR}
|
||||
${HDF5_JAVA_HDF5_LIB_DIR}
|
||||
)
|
||||
set_directory_properties(PROPERTIES INCLUDE_DIRECTORIES "${HDF5_JAVA_JNI_BINARY_DIR};${HDF5_JAVA_HDF5_LIB_DIR}")
|
||||
|
||||
set (HDF5_JAVA_TEST_SOURCES
|
||||
TestH5.java
|
||||
|
@ -650,22 +650,28 @@ Time: XXXX
|
||||
OK (645 tests)
|
||||
|
||||
HDF5-DIAG: Error detected in HDF5 (version (number)) thread (IDs):
|
||||
#000: (file name) line (number) in H5Fopen(): can't set access and transfer property lists
|
||||
#000: (file name) line (number) in H5Fopen(): unable to open file
|
||||
major: File accessibilty
|
||||
minor: Can't set value
|
||||
#001: (file name) line (number) in H5P_verify_apl_and_dxpl(): not the required access property list
|
||||
major: Property lists
|
||||
minor: Inappropriate type
|
||||
#002: (file name) line (number) in H5P_isa_class(): not a property list
|
||||
major: Invalid arguments to routine
|
||||
minor: Inappropriate type
|
||||
minor: Unable to open file
|
||||
#001: (file name) line (number) in H5F__open(): unable to open file
|
||||
major: File accessibilty
|
||||
minor: Unable to open file
|
||||
#002: (file name) line (number) in H5F_open(): unable to retrieve VFL class
|
||||
major: File accessibilty
|
||||
minor: Can't get value
|
||||
#003: (file name) line (number) in H5FD_get_class(): can't find object for ID
|
||||
major: Object atom
|
||||
minor: Unable to find atom information (already closed?)
|
||||
HDF5-DIAG: Error detected in HDF5 (version (number)) thread (IDs):
|
||||
#000: (file name) line (number) in H5Fopen(): can't set access and transfer property lists
|
||||
#000: (file name) line (number) in H5Fopen(): unable to open file
|
||||
major: File accessibilty
|
||||
minor: Can't set value
|
||||
#001: (file name) line (number) in H5P_verify_apl_and_dxpl(): not the required access property list
|
||||
major: Property lists
|
||||
minor: Inappropriate type
|
||||
#002: (file name) line (number) in H5P_isa_class(): not a property list
|
||||
major: Invalid arguments to routine
|
||||
minor: Inappropriate type
|
||||
minor: Unable to open file
|
||||
#001: (file name) line (number) in H5F__open(): unable to open file
|
||||
major: File accessibilty
|
||||
minor: Unable to open file
|
||||
#002: (file name) line (number) in H5F_open(): unable to retrieve VFL class
|
||||
major: File accessibilty
|
||||
minor: Can't get value
|
||||
#003: (file name) line (number) in H5FD_get_class(): can't find object for ID
|
||||
major: Object atom
|
||||
minor: Unable to find atom information (already closed?)
|
||||
|
@ -88,7 +88,7 @@ public class TestH5E {
|
||||
fail("H5.H5Eget_msg: " + err);
|
||||
}
|
||||
assertNotNull("H5.H5Eget_msg: " + msg, msg);
|
||||
assertEquals("H5.H5Eget_msg: ", "Invalid arguments to routine", msg);
|
||||
assertEquals("H5.H5Eget_msg: ", "Object atom", msg);
|
||||
assertEquals("H5.H5Eget_msg: ", HDF5Constants.H5E_MAJOR, error_msg_type[0]);
|
||||
}
|
||||
catch (Throwable err) {
|
||||
@ -113,7 +113,7 @@ public class TestH5E {
|
||||
fail("H5.H5Eget_msg: " + err);
|
||||
}
|
||||
assertNotNull("H5.H5Eget_msg: " + msg, msg);
|
||||
assertEquals("H5.H5Eget_msg: ", "Inappropriate type", msg);
|
||||
assertEquals("H5.H5Eget_msg: ", "Unable to find atom information (already closed?)", msg);
|
||||
assertEquals("H5.H5Eget_msg: ", HDF5Constants.H5E_MINOR, error_msg_type[0]);
|
||||
}
|
||||
catch (Throwable err) {
|
||||
@ -166,7 +166,7 @@ public class TestH5E {
|
||||
fail("H5.H5Epop: " + err);
|
||||
}
|
||||
|
||||
assertTrue("H5.H5Epop #:" + num_msg, num_msg == 3);
|
||||
assertTrue("H5.H5Epop #:" + num_msg, num_msg == 4);
|
||||
|
||||
try {
|
||||
H5.H5Epop(current_stackid, 1);
|
||||
@ -184,7 +184,7 @@ public class TestH5E {
|
||||
fail("H5.H5Epop: " + err);
|
||||
}
|
||||
|
||||
assertTrue("H5.H5Epop", num_msg == 2);
|
||||
assertTrue("H5.H5Epop", num_msg == 3);
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -312,7 +312,7 @@ public class TestH5E {
|
||||
err.printStackTrace();
|
||||
fail("testH5Ewalk:H5Eget_num " + err);
|
||||
}
|
||||
assertTrue("testH5Ewalk #:" + num_msg, num_msg == 3);
|
||||
assertTrue("testH5Ewalk #:" + num_msg, num_msg == 4);
|
||||
|
||||
try {
|
||||
H5.H5Ewalk2(current_stackid, HDF5Constants.H5E_WALK_UPWARD, walk_cb, walk_data);
|
||||
@ -322,12 +322,7 @@ public class TestH5E {
|
||||
fail("testH5Ewalk:H5Ewalk2 " + err);
|
||||
}
|
||||
assertFalse("testH5Ewalk:H5Ewalk2 ",((H5E_walk_data)walk_data).walkdata.isEmpty());
|
||||
assertTrue("testH5Ewalk:H5Ewalk2 "+((H5E_walk_data)walk_data).walkdata.size(),((H5E_walk_data)walk_data).walkdata.size()==3);
|
||||
assertTrue("testH5Ewalk:H5Ewalk2 "+((wdata)((H5E_walk_data)walk_data).walkdata.get(0)).line,((wdata)((H5E_walk_data)walk_data).walkdata.get(0)).line==3765);
|
||||
assertTrue("testH5Ewalk:H5Ewalk2 "+((wdata)((H5E_walk_data)walk_data).walkdata.get(1)).line,((wdata)((H5E_walk_data)walk_data).walkdata.get(1)).line==5504);
|
||||
assertTrue("testH5Ewalk:H5Ewalk2 "+((wdata)((H5E_walk_data)walk_data).walkdata.get(1)).func_name,((wdata)((H5E_walk_data)walk_data).walkdata.get(1)).func_name.compareToIgnoreCase("H5P_verify_apl_and_dxpl")==0);
|
||||
assertTrue("testH5Ewalk:H5Ewalk2 "+((wdata)((H5E_walk_data)walk_data).walkdata.get(0)).err_desc,((wdata)((H5E_walk_data)walk_data).walkdata.get(0)).err_desc.compareToIgnoreCase("not a property list")==0);
|
||||
assertTrue("testH5Ewalk:H5Ewalk2 "+((wdata)((H5E_walk_data)walk_data).walkdata.get(1)).err_desc,((wdata)((H5E_walk_data)walk_data).walkdata.get(1)).err_desc.compareToIgnoreCase("not the required access property list")==0);
|
||||
assertTrue("testH5Ewalk:H5Ewalk2 "+((H5E_walk_data)walk_data).walkdata.size(),((H5E_walk_data)walk_data).walkdata.size()==4);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -91,7 +91,7 @@ public class TestH5Edefault {
|
||||
err.printStackTrace();
|
||||
fail("H5.H5Eget_current_stack: " + err);
|
||||
}
|
||||
assertTrue("H5.H5Eget_current_stack: get_num #:" + num_msg_default, num_msg_default == 3);
|
||||
assertTrue("H5.H5Eget_current_stack: get_num #:" + num_msg_default, num_msg_default == 4);
|
||||
|
||||
//Save a copy of the current stack and clears the current stack
|
||||
try {
|
||||
@ -122,7 +122,7 @@ public class TestH5Edefault {
|
||||
err.printStackTrace();
|
||||
fail("H5.H5Eget_current_stack: " + err);
|
||||
}
|
||||
assertTrue("H5.H5Eget_current_stack: get_num #:" + num_msg, num_msg == 3);
|
||||
assertTrue("H5.H5Eget_current_stack: get_num #:" + num_msg, num_msg == 4);
|
||||
|
||||
try {
|
||||
H5.H5Eclose_stack(stack_id);
|
||||
@ -153,7 +153,7 @@ public class TestH5Edefault {
|
||||
err.printStackTrace();
|
||||
fail("H5.H5Eget_current_stack: " + err);
|
||||
}
|
||||
assertTrue("H5.H5Eget_current_stack: get_num #:" + num_msg_default, num_msg_default == 3);
|
||||
assertTrue("H5.H5Eget_current_stack: get_num #:" + num_msg_default, num_msg_default == 4);
|
||||
|
||||
//Save a copy of the current stack and clears the current stack
|
||||
try {
|
||||
@ -184,7 +184,7 @@ public class TestH5Edefault {
|
||||
err.printStackTrace();
|
||||
fail("H5.H5Eget_current_stack: " + err);
|
||||
}
|
||||
assertTrue("H5.H5Eget_current_stack: get_num #:" + num_msg, num_msg == 3);
|
||||
assertTrue("H5.H5Eget_current_stack: get_num #:" + num_msg, num_msg == 4);
|
||||
|
||||
//Generate errors on default stack
|
||||
try {
|
||||
@ -202,7 +202,7 @@ public class TestH5Edefault {
|
||||
err.printStackTrace();
|
||||
fail("H5.H5Eget_current_stack: " + err);
|
||||
}
|
||||
assertTrue("H5.H5Eget_current_stack: get_num #:" + num_msg_default, num_msg_default == 3);
|
||||
assertTrue("H5.H5Eget_current_stack: get_num #:" + num_msg_default, num_msg_default == 4);
|
||||
|
||||
//Remove one message from the current stack
|
||||
try {
|
||||
@ -213,7 +213,7 @@ public class TestH5Edefault {
|
||||
err.printStackTrace();
|
||||
fail("H5.H5Eget_current_stack: " + err);
|
||||
}
|
||||
assertTrue("H5.H5Eget_current_stack: pop #:" + num_msg_default, num_msg_default == 2);
|
||||
assertTrue("H5.H5Eget_current_stack: pop #:" + num_msg_default, num_msg_default == 3);
|
||||
|
||||
//Verify the copy still has the correct number of messages
|
||||
try {
|
||||
@ -223,7 +223,7 @@ public class TestH5Edefault {
|
||||
err.printStackTrace();
|
||||
fail("H5.H5Eget_current_stack: " + err);
|
||||
}
|
||||
assertTrue("H5.H5Eget_current_stack: get_num #:" + num_msg, num_msg == 3);
|
||||
assertTrue("H5.H5Eget_current_stack: get_num #:" + num_msg, num_msg == 4);
|
||||
}
|
||||
|
||||
@Test(expected = IllegalArgumentException.class)
|
||||
@ -293,7 +293,7 @@ public class TestH5Edefault {
|
||||
err.printStackTrace();
|
||||
fail("H5.H5Eset_current_stack: " + err);
|
||||
}
|
||||
assertTrue("H5.H5Eset_current_stack: get_num #:" + num_msg, num_msg == 3);
|
||||
assertTrue("H5.H5Eset_current_stack: get_num #:" + num_msg, num_msg == 4);
|
||||
|
||||
//Save a copy of the current stack
|
||||
try {
|
||||
@ -314,7 +314,7 @@ public class TestH5Edefault {
|
||||
err.printStackTrace();
|
||||
fail("H5.H5Eset_current_stack: " + err);
|
||||
}
|
||||
assertTrue("H5.H5Eset_current_stack: get_num #:" + num_msg, num_msg == 3);
|
||||
assertTrue("H5.H5Eset_current_stack: get_num #:" + num_msg, num_msg == 4);
|
||||
|
||||
//Generate errors on default stack
|
||||
try {
|
||||
@ -332,7 +332,7 @@ public class TestH5Edefault {
|
||||
err.printStackTrace();
|
||||
fail("H5.H5Eget_current_stack: " + err);
|
||||
}
|
||||
assertTrue("H5.H5Eset_current_stack: get_num #:" + num_msg, num_msg == 3);
|
||||
assertTrue("H5.H5Eset_current_stack: get_num #:" + num_msg, num_msg == 4);
|
||||
|
||||
//Remove one message from the current stack
|
||||
try {
|
||||
@ -343,7 +343,7 @@ public class TestH5Edefault {
|
||||
err.printStackTrace();
|
||||
fail("H5.H5Eset_current_stack: " + err);
|
||||
}
|
||||
assertTrue("H5.H5Eset_current_stack: pop #:" + num_msg, num_msg == 2);
|
||||
assertTrue("H5.H5Eset_current_stack: pop #:" + num_msg, num_msg == 3);
|
||||
|
||||
//Verify the copy still has the correct number of messages
|
||||
try {
|
||||
@ -353,7 +353,7 @@ public class TestH5Edefault {
|
||||
err.printStackTrace();
|
||||
fail("H5.H5Eset_current_stack: " + err);
|
||||
}
|
||||
assertTrue("H5.H5Eset_current_stack: get_num #:" + num_msg, num_msg == 3);
|
||||
assertTrue("H5.H5Eset_current_stack: get_num #:" + num_msg, num_msg == 4);
|
||||
|
||||
try {
|
||||
H5.H5Eset_current_stack(stack_id);
|
||||
@ -363,7 +363,7 @@ public class TestH5Edefault {
|
||||
err.printStackTrace();
|
||||
fail("H5.H5Eset_current_stack: " + err);
|
||||
}
|
||||
assertTrue("H5.H5Eset_current_stack: get_num - " + num_msg, num_msg == 3);
|
||||
assertTrue("H5.H5Eset_current_stack: get_num - " + num_msg, num_msg == 4);
|
||||
}
|
||||
|
||||
@Test(expected = IllegalArgumentException.class)
|
||||
@ -386,7 +386,7 @@ public class TestH5Edefault {
|
||||
err.printStackTrace();
|
||||
fail("H5.H5Epop: " + err);
|
||||
}
|
||||
assertTrue("H5.H5Epop before #:" + num_msg, num_msg == 3);
|
||||
assertTrue("H5.H5Epop before #:" + num_msg, num_msg == 4);
|
||||
try {
|
||||
H5.H5Epop(HDF5Constants.H5E_DEFAULT, 1);
|
||||
num_msg = H5.H5Eget_num(HDF5Constants.H5E_DEFAULT);
|
||||
@ -395,7 +395,7 @@ public class TestH5Edefault {
|
||||
err.printStackTrace();
|
||||
fail("H5.H5Epop: " + err);
|
||||
}
|
||||
assertTrue("H5.H5Epop after #:" + num_msg, num_msg == 2);
|
||||
assertTrue("H5.H5Epop after #:" + num_msg, num_msg == 3);
|
||||
}
|
||||
|
||||
@Test(expected = IllegalArgumentException.class)
|
||||
@ -471,7 +471,7 @@ public class TestH5Edefault {
|
||||
err.printStackTrace();
|
||||
fail("H5.H5Eclear2_with_msg: " + err);
|
||||
}
|
||||
assertTrue("H5.H5Eclear2_with_msg before #:" + num_msg, num_msg == 3);
|
||||
assertTrue("H5.H5Eclear2_with_msg before #:" + num_msg, num_msg == 4);
|
||||
try {
|
||||
H5.H5Eclear2(HDF5Constants.H5E_DEFAULT);
|
||||
num_msg = H5.H5Eget_num(HDF5Constants.H5E_DEFAULT);
|
||||
|
@ -4,38 +4,30 @@ HDF5 version 1.10.3-snap1 currently under development
|
||||
|
||||
INTRODUCTION
|
||||
|
||||
This document describes the differences between HDF5-1.10.1 and HDF5 1.10.2, and
|
||||
contains information on the platforms tested and known problems in HDF5-1.10.1.
|
||||
For more details check the HISTORY*.txt files in the HDF5 source.
|
||||
This document describes the differences between this release and the previous
|
||||
HDF5 release. It contains information on the platforms tested and known
|
||||
problems in this release. For more details check the HISTORY*.txt files in the
|
||||
HDF5 source.
|
||||
|
||||
Note that documentation in the links below will be updated at the time of each
|
||||
final release.
|
||||
|
||||
Links to HDF5 1.10.1 source code, documentation, and additional materials can be found on The HDF5 web page at:
|
||||
Links to HDF5 documentation can be found on The HDF5 web page:
|
||||
|
||||
https://support.hdfgroup.org/HDF5/
|
||||
https://portal.hdfgroup.org/display/HDF5/HDF5
|
||||
|
||||
The HDF5 1.10.1 release can be obtained from:
|
||||
The official HDF5 releases can be obtained from:
|
||||
|
||||
https://support.hdfgroup.org/HDF5/release/obtain5.html
|
||||
https://www.hdfgroup.org/downloads/hdf5/
|
||||
|
||||
User documentation for the snapshot can be accessed directly at this location:
|
||||
Changes from Release to Release and New Features in the HDF5-1.10.x release series
|
||||
can be found at:
|
||||
|
||||
https://support.hdfgroup.org/HDF5/doc/
|
||||
|
||||
New features in the HDF5-1.10.x release series, including brief general
|
||||
descriptions of some new and modified APIs, are described in the "New Features
|
||||
in HDF5 1.10" document:
|
||||
|
||||
https://support.hdfgroup.org/HDF5/docNewFeatures/index.html
|
||||
|
||||
All new and modified APIs are listed in detail in the "HDF5 Software Changes
|
||||
from Release to Release" document, in the section "Release 1.10.1 (current
|
||||
release) versus Release 1.10.0
|
||||
|
||||
https://support.hdfgroup.org/HDF5/doc/ADGuide/Changes.html
|
||||
https://portal.hdfgroup.org/display/HDF5/HDF5+Application+Developer%27s+Guide
|
||||
|
||||
If you have any questions or comments, please send them to the HDF Help Desk:
|
||||
|
||||
help@hdfgroup.org
|
||||
help@hdfgroup.org
|
||||
|
||||
|
||||
CONTENTS
|
||||
@ -54,18 +46,16 @@ New Features
|
||||
|
||||
Configuration:
|
||||
-------------
|
||||
-
|
||||
|
||||
-
|
||||
|
||||
Library:
|
||||
--------
|
||||
-
|
||||
-
|
||||
|
||||
|
||||
Parallel Library:
|
||||
-----------------
|
||||
-
|
||||
|
||||
-
|
||||
|
||||
Fortran Library:
|
||||
----------------
|
||||
@ -76,7 +66,6 @@ New Features
|
||||
------------
|
||||
-
|
||||
|
||||
|
||||
Java Library:
|
||||
----------------
|
||||
-
|
||||
@ -110,7 +99,26 @@ Bug Fixes since HDF5-1.10.2 release
|
||||
|
||||
Library
|
||||
-------
|
||||
-
|
||||
- If an HDF5 file contains a malformed compound datatype with a
|
||||
suitably large offset, the type conversion code can run off
|
||||
the end of the type conversion buffer, causing a segmentation
|
||||
fault.
|
||||
|
||||
This issue was reported to The HDF Group as issue #CVE-2017-17507.
|
||||
|
||||
NOTE: The HDF5 C library cannot produce such a file. This condition
|
||||
should only occur in a corrupt (or deliberately altered) file
|
||||
or a file created by third-party software.
|
||||
|
||||
THE HDF GROUP WILL NOT FIX THIS BUG AT THIS TIME
|
||||
|
||||
Fixing this problem would involve updating the publicly visible
|
||||
H5T_conv_t function pointer typedef and versioning the API calls
|
||||
which use it. We normally only modify the public API during
|
||||
major releases, so this bug will not be fixed at this time.
|
||||
|
||||
(DER - 2018/02/26, HDFFV-10356)
|
||||
|
||||
|
||||
Configuration
|
||||
-------------
|
||||
@ -163,8 +171,8 @@ Supported Platforms
|
||||
|
||||
Linux 3.10.0-327.10.1.el7 GNU C (gcc), Fortran (gfortran), C++ (g++)
|
||||
#1 SMP x86_64 GNU/Linux compilers:
|
||||
(kituo/moohan) Version 4.8.5 20150623 (Red Hat 4.8.5-4)
|
||||
Version 4.9.3, Version 5.2.0
|
||||
(kituo/moohan) Version 4.8.5 20150623 (Red Hat 4.8.5-4)
|
||||
Version 4.9.3, Version 5.2.0,
|
||||
Intel(R) C (icc), C++ (icpc), Fortran (icc)
|
||||
compilers:
|
||||
Version 17.0.0.098 Build 20160721
|
||||
@ -200,7 +208,11 @@ Supported Platforms
|
||||
|
||||
Mac OS X El Capitan 10.11.6 Apple clang/clang++ version 7.3.0 from Xcode 7.3
|
||||
64-bit gfortran GNU Fortran (GCC) 5.2.0
|
||||
(osx1010dev/osx1010test) Intel icc/icpc/ifort version 16.0.2
|
||||
(osx1011dev/osx1011test) Intel icc/icpc/ifort version 16.0.2
|
||||
|
||||
Mac OS Sierra 10.12.6 Apple LLVM version 8.1.0 (clang/clang++-802.0.42)
|
||||
64-bit gfortran GNU Fortran (GCC) 7.1.0
|
||||
(swallow/kite) Intel icc/icpc/ifort version 17.0.2
|
||||
|
||||
Mac OS Sierra 10.12.6 Apple LLVM version 8.1.0 (clang/clang++-802.0.42)
|
||||
64-bit gfortran GNU Fortran (GCC) 7.1.0
|
||||
@ -280,12 +292,11 @@ The following platforms are not supported but have been tested for this release.
|
||||
|
||||
Linux 3.10.0-327.18.2.el7 GNU C (gcc) and C++ (g++) compilers
|
||||
#1 SMP x86_64 GNU/Linux Version 4.8.5 20150623 (Red Hat 4.8.5-4)
|
||||
(jelly) with NAG Fortran Compiler Release 6.1(Tozai
|
||||
)
|
||||
(jelly) with NAG Fortran Compiler Release 6.1(Tozai)
|
||||
GCC Version 7.1.0
|
||||
OpenMPI 3.0.0-GCC-7.2.0-2.29
|
||||
Intel(R) C (icc) and C++ (icpc) compilers
|
||||
Version 17.0.7.098 (Build 20160721)
|
||||
Version 17.0.0.098 Build 20160721
|
||||
with NAG Fortran Compiler Release 6.1(Tozai)
|
||||
|
||||
Linux 3.10.0-327.10.1.el7 MPICH 3.2 compiled with GCC 5.3.0
|
||||
|
@ -188,7 +188,7 @@ string(TOLOWER ${LIB_TYPE} SEARCH_TYPE)
|
||||
|
||||
find_package (HDF5 NAMES hdf5 COMPONENTS C ${SEARCH_TYPE})
|
||||
# find_package (HDF5) # Find non-cmake built HDF5
|
||||
INCLUDE_DIRECTORIES (${HDF5_INCLUDE_DIR})
|
||||
set_directory_properties(PROPERTIES INCLUDE_DIRECTORIES "${HDF5_INCLUDE_DIR}")
|
||||
set (LINK_LIBS ${LINK_LIBS} ${HDF5_C_${LIB_TYPE}_LIBRARY})
|
||||
|
||||
set (example hdf_example)
|
||||
|
@ -1,5 +1,5 @@
|
||||
cmake_minimum_required (VERSION 3.10)
|
||||
PROJECT (HDF5_SRC C CXX)
|
||||
project (HDF5_SRC C)
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# Apply Definitions to compiler in this directory and below
|
||||
@ -113,6 +113,14 @@ set (H5CS_HDRS
|
||||
IDE_GENERATED_PROPERTIES ("H5CS" "${H5CS_HDRS}" "${H5CS_SOURCES}" )
|
||||
|
||||
|
||||
set (H5CX_SOURCES
|
||||
${HDF5_SRC_DIR}/H5CX.c
|
||||
)
|
||||
set (H5CX_HDRS
|
||||
)
|
||||
IDE_GENERATED_PROPERTIES ("H5CX" "${H5CX_HDRS}" "${H5CX_SOURCES}" )
|
||||
|
||||
|
||||
set (H5D_SOURCES
|
||||
${HDF5_SRC_DIR}/H5D.c
|
||||
${HDF5_SRC_DIR}/H5Dbtree.c
|
||||
@ -694,6 +702,7 @@ set (common_SRCS
|
||||
${H5B2_SOURCES}
|
||||
${H5C_SOURCES}
|
||||
${H5CS_SOURCES}
|
||||
${H5CX_SOURCES}
|
||||
${H5D_SOURCES}
|
||||
${H5E_SOURCES}
|
||||
${H5EA_SOURCES}
|
||||
@ -773,6 +782,7 @@ set (H5_PRIVATE_HEADERS
|
||||
${HDF5_SRC_DIR}/H5Bprivate.h
|
||||
${HDF5_SRC_DIR}/H5Cprivate.h
|
||||
${HDF5_SRC_DIR}/H5CSprivate.h
|
||||
${HDF5_SRC_DIR}/H5CXprivate.h
|
||||
${HDF5_SRC_DIR}/H5Dprivate.h
|
||||
${HDF5_SRC_DIR}/H5Eprivate.h
|
||||
${HDF5_SRC_DIR}/H5EAprivate.h
|
||||
@ -844,10 +854,11 @@ if (HDF5_GENERATE_HEADERS)
|
||||
endif ()
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# Setup the H5Detect utility which generates H5Tinit with platform
|
||||
# Setup the H5detect utility which generates H5Tinit with platform
|
||||
# specific type checks inside
|
||||
#-----------------------------------------------------------------------------
|
||||
add_executable (H5detect ${HDF5_SRC_DIR}/H5detect.c)
|
||||
target_include_directories(H5detect PRIVATE ${HDF5_BINARY_DIR})
|
||||
TARGET_C_PROPERTIES (H5detect STATIC " " " ")
|
||||
if (MSVC OR MINGW)
|
||||
target_link_libraries (H5detect "ws2_32.lib")
|
||||
@ -864,6 +875,7 @@ add_custom_command (
|
||||
)
|
||||
|
||||
add_executable (H5make_libsettings ${HDF5_SRC_DIR}/H5make_libsettings.c)
|
||||
target_include_directories(H5make_libsettings PRIVATE ${HDF5_BINARY_DIR})
|
||||
TARGET_C_PROPERTIES (H5make_libsettings STATIC " " " ")
|
||||
if (MSVC OR MINGW)
|
||||
target_link_libraries (H5make_libsettings "ws2_32.lib")
|
||||
@ -881,11 +893,12 @@ add_custom_command (
|
||||
)
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# Add H5Tinit source to build - generated by H5Detect/CMake at configure time
|
||||
# Add H5Tinit source to build - generated by H5detect/CMake at configure time
|
||||
#-----------------------------------------------------------------------------
|
||||
set (gen_SRCS ${HDF5_BINARY_DIR}/H5Tinit.c ${HDF5_BINARY_DIR}/H5lib_settings.c)
|
||||
|
||||
add_library (${HDF5_LIB_TARGET} STATIC ${common_SRCS} ${gen_SRCS} ${H5_PUBLIC_HEADERS} ${H5_PRIVATE_HEADERS} ${H5_GENERATED_HEADERS})
|
||||
target_include_directories(${HDF5_LIB_TARGET} PUBLIC "${HDF5_SRC_DIR};${HDF5_BINARY_DIR}")
|
||||
TARGET_C_PROPERTIES (${HDF5_LIB_TARGET} STATIC " " " ")
|
||||
target_link_libraries (${HDF5_LIB_TARGET} PRIVATE ${LINK_LIBS} ${LINK_COMP_LIBS})
|
||||
if (NOT WIN32)
|
||||
@ -895,14 +908,16 @@ set_global_variable (HDF5_LIBRARIES_TO_EXPORT ${HDF5_LIB_TARGET})
|
||||
H5_SET_LIB_OPTIONS (${HDF5_LIB_TARGET} ${HDF5_LIB_NAME} STATIC 0)
|
||||
set_target_properties (${HDF5_LIB_TARGET} PROPERTIES
|
||||
FOLDER libraries
|
||||
INTERFACE_INCLUDE_DIRECTORIES "$<INSTALL_INTERFACE:$<INSTALL_PREFIX>/include>"
|
||||
INTERFACE_INCLUDE_DIRECTORIES $<INSTALL_INTERFACE:$<INSTALL_PREFIX>/include>
|
||||
)
|
||||
|
||||
## all_packages="AC,B,B2,D,F,FA,FL,FS,HL,I,O,S,ST,T,Z"
|
||||
#all_packages="AC,B2,CX,D,F,HL,I,O,S,ST,T,Z"
|
||||
option (HDF5_ENABLE_DEBUG_APIS "Turn on extra debug output in all packages" OFF)
|
||||
if (HDF5_ENABLE_DEBUG_APIS)
|
||||
set_target_properties (${HDF5_LIB_TARGET} PROPERTIES
|
||||
COMPILE_DEFINITIONS
|
||||
"H5Z_DEBUG;H5T_DEBUG;H5ST_DEBUG;H5S_DEBUG;H5O_DEBUG;H5I_DEBUG;H5HL_DEBUG;H5F_DEBUG;H5D_DEBUG;H5B2_DEBUG;H5AC_DEBUG"
|
||||
"H5Z_DEBUG;H5T_DEBUG;H5ST_DEBUG;H5S_DEBUG;H5O_DEBUG;H5I_DEBUG;H5HL_DEBUG;H5F_DEBUG;H5D_DEBUG;H5CX_DEBUG;H5B2_DEBUG;H5AC_DEBUG"
|
||||
)
|
||||
endif ()
|
||||
set (install_targets ${HDF5_LIB_TARGET})
|
||||
@ -925,6 +940,7 @@ if (BUILD_SHARED_LIBS)
|
||||
)
|
||||
set (shared_gen_SRCS ${HDF5_BINARY_DIR}/shared/H5Tinit.c ${HDF5_BINARY_DIR}/shared/H5lib_settings.c)
|
||||
add_library (${HDF5_LIBSH_TARGET} SHARED ${common_SRCS} ${shared_gen_SRCS} ${H5_PUBLIC_HEADERS} ${H5_PRIVATE_HEADERS} ${H5_GENERATED_HEADERS})
|
||||
target_include_directories(${HDF5_LIBSH_TARGET} PUBLIC "${HDF5_SRC_DIR};${HDF5_BINARY_DIR}")
|
||||
TARGET_C_PROPERTIES (${HDF5_LIBSH_TARGET} SHARED " " " ")
|
||||
target_link_libraries (${HDF5_LIBSH_TARGET} PRIVATE ${LINK_LIBS} ${LINK_COMP_LIBS})
|
||||
if (NOT WIN32)
|
||||
@ -963,6 +979,7 @@ if (NOT HDF5_INSTALL_NO_DEVELOPMENT)
|
||||
FILES
|
||||
${H5_PUBLIC_HEADERS}
|
||||
${H5_GENERATED_HEADERS}
|
||||
${HDF5_BINARY_DIR}/H5pubconf.h
|
||||
DESTINATION
|
||||
${HDF5_INSTALL_INCLUDE_DIR}
|
||||
COMPONENT
|
||||
|
25
src/H5.c
25
src/H5.c
@ -21,6 +21,7 @@
|
||||
/***********/
|
||||
#include "H5private.h" /* Generic Functions */
|
||||
#include "H5ACprivate.h" /* Metadata cache */
|
||||
#include "H5CXprivate.h" /* API Contexts */
|
||||
#include "H5Dprivate.h" /* Datasets */
|
||||
#include "H5Eprivate.h" /* Error handling */
|
||||
#include "H5FLprivate.h" /* Free lists */
|
||||
@ -30,7 +31,6 @@
|
||||
#include "H5Pprivate.h" /* Property lists */
|
||||
#include "H5SLprivate.h" /* Skip lists */
|
||||
#include "H5Tprivate.h" /* Datatypes */
|
||||
#include "H5FSprivate.h" /* File free space */
|
||||
|
||||
/****************/
|
||||
/* Local Macros */
|
||||
@ -224,7 +224,7 @@ H5_init_library(void)
|
||||
if(H5L_init() < 0)
|
||||
HGOTO_ERROR(H5E_FUNC, H5E_CANTINIT, FAIL, "unable to initialize link interface")
|
||||
if(H5FS_init() < 0)
|
||||
HGOTO_ERROR(H5E_FUNC, H5E_CANTINIT, FAIL, "unable to initialize FS interface")
|
||||
HGOTO_ERROR(H5E_FUNC, H5E_CANTINIT, FAIL, "unable to initialize FS interface")
|
||||
|
||||
/* Debugging? */
|
||||
H5_debug_mask("-all");
|
||||
@ -267,6 +267,9 @@ H5_term_library(void)
|
||||
/* Indicate that the library is being shut down */
|
||||
H5_TERM_GLOBAL = TRUE;
|
||||
|
||||
/* Push the API context without checking for errors */
|
||||
H5CX_push_special();
|
||||
|
||||
/* Check if we should display error output */
|
||||
(void)H5Eget_auto2(H5E_DEFAULT, &func, NULL);
|
||||
|
||||
@ -351,9 +354,12 @@ H5_term_library(void)
|
||||
/* Don't shut down the skip list code until everything that uses it is down */
|
||||
if(pending == 0)
|
||||
pending += DOWN(SL);
|
||||
/* Don't shut down the free list code until _everything_ else is down */
|
||||
/* Don't shut down the free list code until everything that uses it is down */
|
||||
if(pending == 0)
|
||||
pending += DOWN(FL);
|
||||
/* Don't shut down the API context code until _everything_ else is down */
|
||||
if(pending == 0)
|
||||
pending += DOWN(CX);
|
||||
} /* end if */
|
||||
} while(pending && ntries++ < 100);
|
||||
|
||||
@ -409,6 +415,8 @@ H5_term_library(void)
|
||||
/* Mark library as closed */
|
||||
H5_INIT_GLOBAL = FALSE;
|
||||
|
||||
/* Don't pop the API context (i.e. H5CX_pop), since it's been shut down already */
|
||||
|
||||
done:
|
||||
#ifdef H5_HAVE_THREADSAFE
|
||||
H5_API_UNLOCK
|
||||
@ -907,7 +915,7 @@ H5allocate_memory(size_t size, hbool_t clear)
|
||||
else
|
||||
ret_value = H5MM_malloc(size);
|
||||
|
||||
FUNC_LEAVE_API(ret_value)
|
||||
FUNC_LEAVE_API_NOINIT(ret_value)
|
||||
} /* end H5allocate_memory() */
|
||||
|
||||
|
||||
@ -945,7 +953,7 @@ H5resize_memory(void *mem, size_t size)
|
||||
|
||||
ret_value = H5MM_realloc(mem, size);
|
||||
|
||||
FUNC_LEAVE_API(ret_value)
|
||||
FUNC_LEAVE_API_NOINIT(ret_value)
|
||||
} /* end H5resize_memory() */
|
||||
|
||||
|
||||
@ -970,7 +978,7 @@ H5free_memory(void *mem)
|
||||
/* At this time, it is impossible for this to fail. */
|
||||
H5MM_xfree(mem);
|
||||
|
||||
FUNC_LEAVE_API(SUCCEED)
|
||||
FUNC_LEAVE_API_NOINIT(SUCCEED)
|
||||
} /* end H5free_memory() */
|
||||
|
||||
|
||||
@ -987,20 +995,19 @@ H5free_memory(void *mem)
|
||||
herr_t
|
||||
H5is_library_threadsafe(hbool_t *is_ts)
|
||||
{
|
||||
herr_t ret_value = SUCCEED;
|
||||
|
||||
FUNC_ENTER_API_NOINIT
|
||||
H5TRACE1("e", "*b", is_ts);
|
||||
|
||||
HDassert(is_ts);
|
||||
|
||||
/* At this time, it is impossible for this to fail. */
|
||||
#ifdef H5_HAVE_THREADSAFE
|
||||
*is_ts = TRUE;
|
||||
#else /* H5_HAVE_THREADSAFE */
|
||||
*is_ts = FALSE;
|
||||
#endif /* H5_HAVE_THREADSAFE */
|
||||
|
||||
FUNC_LEAVE_API(ret_value)
|
||||
FUNC_LEAVE_API_NOINIT(SUCCEED)
|
||||
} /* end H5is_library_threadsafe() */
|
||||
|
||||
|
||||
|
325
src/H5A.c
325
src/H5A.c
@ -24,6 +24,7 @@
|
||||
/***********/
|
||||
#include "H5private.h" /* Generic Functions */
|
||||
#include "H5Apkg.h" /* Attributes */
|
||||
#include "H5CXprivate.h" /* API Contexts */
|
||||
#include "H5Eprivate.h" /* Error handling */
|
||||
#include "H5FLprivate.h" /* Free Lists */
|
||||
#include "H5Iprivate.h" /* IDs */
|
||||
@ -91,7 +92,7 @@ static const H5I_class_t H5I_ATTR_CLS[1] = {{
|
||||
H5I_ATTR, /* ID class value */
|
||||
0, /* Class flags */
|
||||
0, /* # of reserved IDs for class */
|
||||
(H5I_free_t)H5A_close /* Callback routine for closing objects of this class */
|
||||
(H5I_free_t)H5A__close_cb /* Callback routine for closing objects of this class */
|
||||
}};
|
||||
|
||||
/* Flag indicating "top" of interface has been initialized */
|
||||
@ -250,7 +251,6 @@ H5Acreate2(hid_t loc_id, const char *attr_name, hid_t type_id, hid_t space_id,
|
||||
H5G_loc_t loc; /* Object location */
|
||||
H5T_t *type; /* Datatype to use for attribute */
|
||||
H5S_t *space; /* Dataspace to use for attribute */
|
||||
hid_t dxpl_id = H5AC_ind_read_dxpl_id; /* dxpl used by library */
|
||||
hid_t ret_value; /* Return value */
|
||||
|
||||
FUNC_ENTER_API(FAIL)
|
||||
@ -268,14 +268,14 @@ H5Acreate2(hid_t loc_id, const char *attr_name, hid_t type_id, hid_t space_id,
|
||||
if(NULL == (type = (H5T_t *)H5I_object_verify(type_id, H5I_DATATYPE)))
|
||||
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a type")
|
||||
if(NULL == (space = (H5S_t *)H5I_object_verify(space_id, H5I_DATASPACE)))
|
||||
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a data space")
|
||||
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a dataspace")
|
||||
|
||||
/* Verify access property list and get correct dxpl */
|
||||
if(H5P_verify_apl_and_dxpl(&aapl_id, H5P_CLS_AACC, &dxpl_id, loc_id, TRUE) < 0)
|
||||
HGOTO_ERROR(H5E_ATTR, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
|
||||
/* Verify access property list and set up collective metadata if appropriate */
|
||||
if(H5CX_set_apl(&aapl_id, H5P_CLS_AACC, loc_id, TRUE) < 0)
|
||||
HGOTO_ERROR(H5E_ATTR, H5E_CANTSET, H5I_INVALID_HID, "can't set access property list info")
|
||||
|
||||
/* Go do the real work for attaching the attribute to the object */
|
||||
if(NULL == (attr = H5A_create(&loc, attr_name, type, space, acpl_id, dxpl_id)))
|
||||
if(NULL == (attr = H5A__create(&loc, attr_name, type, space, acpl_id)))
|
||||
HGOTO_ERROR(H5E_ATTR, H5E_CANTINIT, FAIL, "unable to create attribute")
|
||||
|
||||
/* Register the new attribute and get an ID for it */
|
||||
@ -284,7 +284,7 @@ H5Acreate2(hid_t loc_id, const char *attr_name, hid_t type_id, hid_t space_id,
|
||||
|
||||
done:
|
||||
/* Cleanup on failure */
|
||||
if(ret_value < 0 && attr && H5A_close(attr) < 0)
|
||||
if(ret_value < 0 && attr && H5A__close(attr) < 0)
|
||||
HDONE_ERROR(H5E_ATTR, H5E_CANTFREE, FAIL, "can't close attribute")
|
||||
|
||||
FUNC_LEAVE_API(ret_value)
|
||||
@ -328,13 +328,8 @@ H5Acreate_by_name(hid_t loc_id, const char *obj_name, const char *attr_name,
|
||||
{
|
||||
H5A_t *attr = NULL; /* Attribute created */
|
||||
H5G_loc_t loc; /* Object location */
|
||||
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 */
|
||||
hbool_t loc_found = FALSE; /* Entry at 'obj_name' found */
|
||||
H5T_t *type; /* Datatype to use for attribute */
|
||||
H5S_t *space; /* Dataspace to use for attribute */
|
||||
hid_t dxpl_id = H5AC_ind_read_dxpl_id; /* dxpl used by library */
|
||||
hid_t ret_value; /* Return value */
|
||||
|
||||
FUNC_ENTER_API(FAIL)
|
||||
@ -355,35 +350,30 @@ H5Acreate_by_name(hid_t loc_id, const char *obj_name, const char *attr_name,
|
||||
if(NULL == (type = (H5T_t *)H5I_object_verify(type_id, H5I_DATATYPE)))
|
||||
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a type")
|
||||
if(NULL == (space = (H5S_t *)H5I_object_verify(space_id, H5I_DATASPACE)))
|
||||
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a data space")
|
||||
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a dataspace")
|
||||
|
||||
/* Set up opened group location to fill in */
|
||||
obj_loc.oloc = &obj_oloc;
|
||||
obj_loc.path = &obj_path;
|
||||
H5G_loc_reset(&obj_loc);
|
||||
/* Verify access property list and set up collective metadata if appropriate */
|
||||
if(H5CX_set_apl(&aapl_id, H5P_CLS_AACC, loc_id, TRUE) < 0)
|
||||
HGOTO_ERROR(H5E_ATTR, H5E_CANTSET, H5I_INVALID_HID, "can't set access property list info")
|
||||
|
||||
/* Verify access property list and get correct dxpl */
|
||||
if(H5P_verify_apl_and_dxpl(&aapl_id, H5P_CLS_AACC, &dxpl_id, loc_id, TRUE) < 0)
|
||||
HGOTO_ERROR(H5E_ATTR, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
|
||||
if(H5P_DEFAULT != lapl_id) {
|
||||
if(TRUE != H5P_isa_class(lapl_id, H5P_LINK_ACCESS))
|
||||
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not link access property list ID")
|
||||
H5CX_set_lapl(lapl_id);
|
||||
} /* end if */
|
||||
|
||||
/* Find the object's location */
|
||||
if(H5G_loc_find(&loc, obj_name, &obj_loc/*out*/, lapl_id, dxpl_id) < 0)
|
||||
HGOTO_ERROR(H5E_ATTR, H5E_NOTFOUND, FAIL, "object not found")
|
||||
loc_found = TRUE;
|
||||
|
||||
/* Go do the real work for attaching the attribute to the dataset */
|
||||
if(NULL == (attr = H5A_create(&obj_loc, attr_name, type, space, acpl_id, dxpl_id)))
|
||||
/* Create the attribute on the object */
|
||||
if(NULL == (attr = H5A__create_by_name(&loc, obj_name, attr_name, type, space, acpl_id)))
|
||||
HGOTO_ERROR(H5E_ATTR, H5E_CANTINIT, FAIL, "unable to create attribute")
|
||||
|
||||
/* Register the new attribute and get an ID for it */
|
||||
if((ret_value = H5I_register(H5I_ATTR, attr, TRUE)) < 0)
|
||||
HGOTO_ERROR(H5E_ATOM, H5E_CANTREGISTER, FAIL, "unable to register attribute for ID")
|
||||
|
||||
done:
|
||||
/* Release resources */
|
||||
if(loc_found && H5G_loc_free(&obj_loc) < 0)
|
||||
HDONE_ERROR(H5E_ATTR, H5E_CANTRELEASE, FAIL, "can't free location")
|
||||
if(ret_value < 0 && attr && H5A_close(attr) < 0)
|
||||
HDONE_ERROR(H5E_ATTR, H5E_CANTFREE, FAIL, "can't close attribute")
|
||||
/* Cleanup on failure */
|
||||
if(ret_value < 0 && attr && H5A__close(attr) < 0)
|
||||
HDONE_ERROR(H5E_ATTR, H5E_CANTFREE, FAIL, "can't close attribute")
|
||||
|
||||
FUNC_LEAVE_API(ret_value)
|
||||
} /* H5Acreate_by_name() */
|
||||
@ -413,7 +403,6 @@ H5Aopen(hid_t loc_id, const char *attr_name, hid_t aapl_id)
|
||||
{
|
||||
H5G_loc_t loc; /* Object location */
|
||||
H5A_t *attr = NULL; /* Attribute opened */
|
||||
hid_t dxpl_id = H5AC_ind_read_dxpl_id; /* dxpl used by library */
|
||||
hid_t ret_value;
|
||||
|
||||
FUNC_ENTER_API(FAIL)
|
||||
@ -427,17 +416,13 @@ H5Aopen(hid_t loc_id, const char *attr_name, hid_t aapl_id)
|
||||
if(!attr_name || !*attr_name)
|
||||
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no attribute name")
|
||||
|
||||
/* Verify access property list and get correct dxpl */
|
||||
if(H5P_verify_apl_and_dxpl(&aapl_id, H5P_CLS_AACC, &dxpl_id, loc_id, FALSE) < 0)
|
||||
HGOTO_ERROR(H5E_ATTR, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
|
||||
/* Verify access property list and set up collective metadata if appropriate */
|
||||
if(H5CX_set_apl(&aapl_id, H5P_CLS_AACC, loc_id, FALSE) < 0)
|
||||
HGOTO_ERROR(H5E_ATTR, H5E_CANTSET, FAIL, "can't set access property list info")
|
||||
|
||||
/* Read in attribute from object header */
|
||||
if(NULL == (attr = H5O_attr_open_by_name(loc.oloc, attr_name, dxpl_id)))
|
||||
HGOTO_ERROR(H5E_ATTR, H5E_CANTINIT, FAIL, "unable to load attribute info from object header for attribute: '%s'", attr_name)
|
||||
|
||||
/* Finish initializing attribute */
|
||||
if(H5A__open_common(&loc, attr) < 0)
|
||||
HGOTO_ERROR(H5E_ATTR, H5E_CANTINIT, FAIL, "unable to initialize attribute")
|
||||
if(NULL == (attr = H5A__open(&loc, attr_name)))
|
||||
HGOTO_ERROR(H5E_ATTR, H5E_CANTOPENOBJ, FAIL, "unable to load attribute info from object header for attribute: '%s'", attr_name)
|
||||
|
||||
/* Register the attribute and get an ID for it */
|
||||
if((ret_value = H5I_register(H5I_ATTR, attr, TRUE)) < 0)
|
||||
@ -446,7 +431,7 @@ H5Aopen(hid_t loc_id, const char *attr_name, hid_t aapl_id)
|
||||
done:
|
||||
/* Cleanup on failure */
|
||||
if(ret_value < 0)
|
||||
if(attr && H5A_close(attr) < 0)
|
||||
if(attr && H5A__close(attr) < 0)
|
||||
HDONE_ERROR(H5E_ATTR, H5E_CANTFREE, FAIL, "can't close attribute")
|
||||
|
||||
FUNC_LEAVE_API(ret_value)
|
||||
@ -480,7 +465,6 @@ H5Aopen_by_name(hid_t loc_id, const char *obj_name, const char *attr_name,
|
||||
{
|
||||
H5G_loc_t loc; /* Object location */
|
||||
H5A_t *attr = NULL; /* Attribute opened */
|
||||
hid_t dxpl_id = H5AC_ind_read_dxpl_id; /* dxpl used by library */
|
||||
hid_t ret_value;
|
||||
|
||||
FUNC_ENTER_API(FAIL)
|
||||
@ -495,18 +479,19 @@ H5Aopen_by_name(hid_t loc_id, const char *obj_name, const char *attr_name,
|
||||
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no object name")
|
||||
if(!attr_name || !*attr_name)
|
||||
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no attribute name")
|
||||
if(H5P_DEFAULT == lapl_id)
|
||||
lapl_id = H5P_LINK_ACCESS_DEFAULT;
|
||||
else
|
||||
|
||||
/* Verify access property list and set up collective metadata if appropriate */
|
||||
if(H5CX_set_apl(&aapl_id, H5P_CLS_AACC, loc_id, FALSE) < 0)
|
||||
HGOTO_ERROR(H5E_ATTR, H5E_CANTSET, FAIL, "can't set access property list info")
|
||||
|
||||
if(H5P_DEFAULT != lapl_id) {
|
||||
if(TRUE != H5P_isa_class(lapl_id, H5P_LINK_ACCESS))
|
||||
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not link access property list ID")
|
||||
|
||||
/* Verify access property list and get correct dxpl */
|
||||
if(H5P_verify_apl_and_dxpl(&aapl_id, H5P_CLS_AACC, &dxpl_id, loc_id, FALSE) < 0)
|
||||
HGOTO_ERROR(H5E_ATTR, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
|
||||
H5CX_set_lapl(lapl_id);
|
||||
} /* end if */
|
||||
|
||||
/* Open the attribute on the object header */
|
||||
if(NULL == (attr = H5A_open_by_name(&loc, obj_name, attr_name, lapl_id, dxpl_id)))
|
||||
if(NULL == (attr = H5A__open_by_name(&loc, obj_name, attr_name)))
|
||||
HGOTO_ERROR(H5E_ATTR, H5E_CANTOPENOBJ, FAIL, "can't open attribute")
|
||||
|
||||
/* Register the attribute and get an ID for it */
|
||||
@ -516,7 +501,7 @@ H5Aopen_by_name(hid_t loc_id, const char *obj_name, const char *attr_name,
|
||||
done:
|
||||
/* Cleanup on failure */
|
||||
if(ret_value < 0)
|
||||
if(attr && H5A_close(attr) < 0)
|
||||
if(attr && H5A__close(attr) < 0)
|
||||
HDONE_ERROR(H5E_ATTR, H5E_CANTFREE, FAIL, "can't close attribute")
|
||||
|
||||
FUNC_LEAVE_API(ret_value)
|
||||
@ -553,7 +538,6 @@ H5Aopen_by_idx(hid_t loc_id, const char *obj_name, H5_index_t idx_type,
|
||||
{
|
||||
H5A_t *attr = NULL; /* Attribute opened */
|
||||
H5G_loc_t loc; /* Object location */
|
||||
hid_t dxpl_id = H5AC_ind_read_dxpl_id; /* dxpl used by library */
|
||||
hid_t ret_value; /* Return value */
|
||||
|
||||
FUNC_ENTER_API(FAIL)
|
||||
@ -571,18 +555,19 @@ H5Aopen_by_idx(hid_t loc_id, const char *obj_name, H5_index_t idx_type,
|
||||
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid index type specified")
|
||||
if(order <= H5_ITER_UNKNOWN || order >= H5_ITER_N)
|
||||
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid iteration order specified")
|
||||
if(H5P_DEFAULT == lapl_id)
|
||||
lapl_id = H5P_LINK_ACCESS_DEFAULT;
|
||||
else
|
||||
|
||||
/* Verify access property list and set up collective metadata if appropriate */
|
||||
if(H5CX_set_apl(&aapl_id, H5P_CLS_AACC, loc_id, FALSE) < 0)
|
||||
HGOTO_ERROR(H5E_ATTR, H5E_CANTSET, FAIL, "can't set access property list info")
|
||||
|
||||
if(H5P_DEFAULT != lapl_id) {
|
||||
if(TRUE != H5P_isa_class(lapl_id, H5P_LINK_ACCESS))
|
||||
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not link access property list ID")
|
||||
|
||||
/* Verify access property list and get correct dxpl */
|
||||
if(H5P_verify_apl_and_dxpl(&aapl_id, H5P_CLS_AACC, &dxpl_id, loc_id, FALSE) < 0)
|
||||
HGOTO_ERROR(H5E_ATTR, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
|
||||
H5CX_set_lapl(lapl_id);
|
||||
} /* end if */
|
||||
|
||||
/* Open the attribute in the object header */
|
||||
if(NULL == (attr = H5A_open_by_idx(&loc, obj_name, idx_type, order, n, lapl_id, dxpl_id)))
|
||||
if(NULL == (attr = H5A__open_by_idx(&loc, obj_name, idx_type, order, n)))
|
||||
HGOTO_ERROR(H5E_ATTR, H5E_CANTOPENOBJ, FAIL, "unable to open attribute")
|
||||
|
||||
/* Register the attribute and get an ID for it */
|
||||
@ -592,7 +577,7 @@ H5Aopen_by_idx(hid_t loc_id, const char *obj_name, H5_index_t idx_type,
|
||||
done:
|
||||
/* Cleanup on failure */
|
||||
if(ret_value < 0)
|
||||
if(attr && H5A_close(attr) < 0)
|
||||
if(attr && H5A__close(attr) < 0)
|
||||
HDONE_ERROR(H5E_ATTR, H5E_CANTFREE, FAIL, "can't close attribute")
|
||||
|
||||
FUNC_LEAVE_API(ret_value)
|
||||
@ -620,8 +605,6 @@ H5Awrite(hid_t attr_id, hid_t dtype_id, const void *buf)
|
||||
{
|
||||
H5A_t *attr; /* Attribute object for ID */
|
||||
H5T_t *mem_type; /* Memory datatype */
|
||||
hid_t dxpl_id = H5AC_ind_read_dxpl_id; /* dxpl used by library */
|
||||
hid_t aapl_id = H5P_DEFAULT; /* temp access plist */
|
||||
herr_t ret_value; /* Return value */
|
||||
|
||||
FUNC_ENTER_API(FAIL)
|
||||
@ -635,12 +618,12 @@ H5Awrite(hid_t attr_id, hid_t dtype_id, const void *buf)
|
||||
if(NULL == buf)
|
||||
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "null attribute buffer")
|
||||
|
||||
/* Verify access property list and get correct dxpl */
|
||||
if(H5P_verify_apl_and_dxpl(&aapl_id, H5P_CLS_AACC, &dxpl_id, attr_id, TRUE) < 0)
|
||||
HGOTO_ERROR(H5E_ATTR, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
|
||||
/* Set up collective metadata if appropriate */
|
||||
if(H5CX_set_loc(attr_id) < 0)
|
||||
HGOTO_ERROR(H5E_ATTR, H5E_CANTSET, FAIL, "can't set collective metadata read")
|
||||
|
||||
/* Go write the actual data to the attribute */
|
||||
if((ret_value = H5A__write(attr, mem_type, buf, dxpl_id)) < 0)
|
||||
if((ret_value = H5A__write(attr, mem_type, buf)) < 0)
|
||||
HGOTO_ERROR(H5E_ATTR, H5E_WRITEERROR, FAIL, "unable to write attribute")
|
||||
|
||||
done:
|
||||
@ -669,8 +652,6 @@ H5Aread(hid_t attr_id, hid_t dtype_id, void *buf)
|
||||
{
|
||||
H5A_t *attr; /* Attribute object for ID */
|
||||
H5T_t *mem_type; /* Memory datatype */
|
||||
hid_t dxpl_id = H5AC_ind_read_dxpl_id; /* dxpl used by library */
|
||||
hid_t aapl_id = H5P_DEFAULT; /* temp access plist */
|
||||
herr_t ret_value; /* Return value */
|
||||
|
||||
FUNC_ENTER_API(FAIL)
|
||||
@ -684,12 +665,8 @@ H5Aread(hid_t attr_id, hid_t dtype_id, void *buf)
|
||||
if(NULL == buf)
|
||||
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "null attribute buffer")
|
||||
|
||||
/* Verify access property list and get correct dxpl */
|
||||
if(H5P_verify_apl_and_dxpl(&aapl_id, H5P_CLS_AACC, &dxpl_id, attr_id, FALSE) < 0)
|
||||
HGOTO_ERROR(H5E_ATTR, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
|
||||
|
||||
/* Go write the actual data to the attribute */
|
||||
if((ret_value = H5A__read(attr, mem_type, buf, dxpl_id)) < 0)
|
||||
if((ret_value = H5A__read(attr, mem_type, buf)) < 0)
|
||||
HGOTO_ERROR(H5E_ATTR, H5E_READERROR, FAIL, "unable to read attribute")
|
||||
|
||||
done:
|
||||
@ -752,8 +729,8 @@ done:
|
||||
hid_t
|
||||
H5Aget_type(hid_t attr_id)
|
||||
{
|
||||
H5A_t *attr; /* Attribute object for ID */
|
||||
hid_t ret_value; /* Return value */
|
||||
H5A_t *attr; /* Attribute object for ID */
|
||||
hid_t ret_value; /* Return value */
|
||||
|
||||
FUNC_ENTER_API(FAIL)
|
||||
H5TRACE1("i", "i", attr_id);
|
||||
@ -762,8 +739,9 @@ H5Aget_type(hid_t attr_id)
|
||||
if(NULL == (attr = (H5A_t *)H5I_object_verify(attr_id, H5I_ATTR)))
|
||||
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not an attribute")
|
||||
|
||||
if((ret_value = H5A_get_type(attr)) < 0)
|
||||
if((ret_value = H5A__get_type(attr)) < 0)
|
||||
HGOTO_ERROR(H5E_ARGS, H5E_CANTGET, FAIL, "can't get datatype ID of attribute")
|
||||
|
||||
done:
|
||||
FUNC_LEAVE_API(ret_value)
|
||||
} /* H5Aget_type() */
|
||||
@ -803,7 +781,7 @@ H5Aget_create_plist(hid_t attr_id)
|
||||
if(NULL == (attr = (H5A_t *)H5I_object_verify(attr_id, H5I_ATTR)))
|
||||
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not an attribute")
|
||||
|
||||
if((ret_value = H5A_get_create_plist(attr)) < 0)
|
||||
if((ret_value = H5A__get_create_plist(attr)) < 0)
|
||||
HGOTO_ERROR(H5E_ARGS, H5E_CANTGET, FAIL, "can't get creation property list for attr")
|
||||
|
||||
done:
|
||||
@ -880,7 +858,6 @@ H5Aget_name_by_idx(hid_t loc_id, const char *obj_name, H5_index_t idx_type,
|
||||
{
|
||||
H5G_loc_t loc; /* Object location */
|
||||
H5A_t *attr = NULL; /* Attribute object for name */
|
||||
hid_t dxpl_id = H5AC_ind_read_dxpl_id; /* dxpl used by library */
|
||||
ssize_t ret_value; /* Return value */
|
||||
|
||||
FUNC_ENTER_API(FAIL)
|
||||
@ -899,12 +876,12 @@ H5Aget_name_by_idx(hid_t loc_id, const char *obj_name, H5_index_t idx_type,
|
||||
if(order <= H5_ITER_UNKNOWN || order >= H5_ITER_N)
|
||||
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid iteration order specified")
|
||||
|
||||
/* Verify access property list and get correct dxpl */
|
||||
if(H5P_verify_apl_and_dxpl(&lapl_id, H5P_CLS_LACC, &dxpl_id, loc_id, FALSE) < 0)
|
||||
HGOTO_ERROR(H5E_ATTR, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
|
||||
/* Verify access property list and set up collective metadata if appropriate */
|
||||
if(H5CX_set_apl(&lapl_id, H5P_CLS_LACC, loc_id, FALSE) < 0)
|
||||
HGOTO_ERROR(H5E_ATTR, H5E_CANTSET, FAIL, "can't set access property list info")
|
||||
|
||||
/* Open the attribute on the object header */
|
||||
if(NULL == (attr = H5A_open_by_idx(&loc, obj_name, idx_type, order, n, lapl_id, dxpl_id)))
|
||||
if(NULL == (attr = H5A__open_by_idx(&loc, obj_name, idx_type, order, n)))
|
||||
HGOTO_ERROR(H5E_ATTR, H5E_CANTOPENOBJ, FAIL, "can't open attribute")
|
||||
|
||||
/* Get the length of the name */
|
||||
@ -919,7 +896,7 @@ H5Aget_name_by_idx(hid_t loc_id, const char *obj_name, H5_index_t idx_type,
|
||||
|
||||
done:
|
||||
/* Release resources */
|
||||
if(attr && H5A_close(attr) < 0)
|
||||
if(attr && H5A__close(attr) < 0)
|
||||
HDONE_ERROR(H5E_ATTR, H5E_CANTFREE, FAIL, "can't close attribute")
|
||||
|
||||
FUNC_LEAVE_API(ret_value)
|
||||
@ -1018,7 +995,6 @@ H5Aget_info_by_name(hid_t loc_id, const char *obj_name, const char *attr_name,
|
||||
{
|
||||
H5G_loc_t loc; /* Object location */
|
||||
H5A_t *attr = NULL; /* Attribute object for name */
|
||||
hid_t dxpl_id = H5AC_ind_read_dxpl_id; /* dxpl used by library */
|
||||
herr_t ret_value = SUCCEED; /* Return value */
|
||||
|
||||
FUNC_ENTER_API(FAIL)
|
||||
@ -1036,12 +1012,12 @@ H5Aget_info_by_name(hid_t loc_id, const char *obj_name, const char *attr_name,
|
||||
if(NULL == ainfo)
|
||||
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid info pointer")
|
||||
|
||||
/* Verify access property list and get correct dxpl */
|
||||
if(H5P_verify_apl_and_dxpl(&lapl_id, H5P_CLS_LACC, &dxpl_id, loc_id, FALSE) < 0)
|
||||
HGOTO_ERROR(H5E_ATTR, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
|
||||
/* Verify access property list and set up collective metadata if appropriate */
|
||||
if(H5CX_set_apl(&lapl_id, H5P_CLS_LACC, loc_id, FALSE) < 0)
|
||||
HGOTO_ERROR(H5E_ATTR, H5E_CANTSET, FAIL, "can't set access property list info")
|
||||
|
||||
/* Open the attribute on the object header */
|
||||
if(NULL == (attr = H5A_open_by_name(&loc, obj_name, attr_name, lapl_id, dxpl_id)))
|
||||
if(NULL == (attr = H5A__open_by_name(&loc, obj_name, attr_name)))
|
||||
HGOTO_ERROR(H5E_ATTR, H5E_CANTOPENOBJ, FAIL, "can't open attribute")
|
||||
|
||||
/* Get the attribute information */
|
||||
@ -1049,8 +1025,8 @@ H5Aget_info_by_name(hid_t loc_id, const char *obj_name, const char *attr_name,
|
||||
HGOTO_ERROR(H5E_ATTR, H5E_CANTGET, FAIL, "unable to get attribute info")
|
||||
|
||||
done:
|
||||
/* Cleanup on failure */
|
||||
if(attr && H5A_close(attr) < 0)
|
||||
/* Release resources */
|
||||
if(attr && H5A__close(attr) < 0)
|
||||
HDONE_ERROR(H5E_ATTR, H5E_CANTFREE, FAIL, "can't close attribute")
|
||||
|
||||
FUNC_LEAVE_API(ret_value)
|
||||
@ -1077,7 +1053,6 @@ H5Aget_info_by_idx(hid_t loc_id, const char *obj_name, H5_index_t idx_type,
|
||||
{
|
||||
H5G_loc_t loc; /* Object location */
|
||||
H5A_t *attr = NULL; /* Attribute object for name */
|
||||
hid_t dxpl_id = H5AC_ind_read_dxpl_id; /* dxpl used by library */
|
||||
herr_t ret_value = SUCCEED; /* Return value */
|
||||
|
||||
FUNC_ENTER_API(FAIL)
|
||||
@ -1098,12 +1073,12 @@ H5Aget_info_by_idx(hid_t loc_id, const char *obj_name, H5_index_t idx_type,
|
||||
if(NULL == ainfo)
|
||||
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid info pointer")
|
||||
|
||||
/* Verify access property list and get correct dxpl */
|
||||
if(H5P_verify_apl_and_dxpl(&lapl_id, H5P_CLS_LACC, &dxpl_id, loc_id, FALSE) < 0)
|
||||
HGOTO_ERROR(H5E_ATTR, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
|
||||
/* Verify access property list and set up collective metadata if appropriate */
|
||||
if(H5CX_set_apl(&lapl_id, H5P_CLS_LACC, loc_id, FALSE) < 0)
|
||||
HGOTO_ERROR(H5E_ATTR, H5E_CANTSET, FAIL, "can't set access property list info")
|
||||
|
||||
/* Open the attribute on the object header */
|
||||
if(NULL == (attr = H5A_open_by_idx(&loc, obj_name, idx_type, order, n, lapl_id, dxpl_id)))
|
||||
if(NULL == (attr = H5A__open_by_idx(&loc, obj_name, idx_type, order, n)))
|
||||
HGOTO_ERROR(H5E_ATTR, H5E_CANTOPENOBJ, FAIL, "can't open attribute")
|
||||
|
||||
/* Get the attribute information */
|
||||
@ -1112,7 +1087,7 @@ H5Aget_info_by_idx(hid_t loc_id, const char *obj_name, H5_index_t idx_type,
|
||||
|
||||
done:
|
||||
/* Release resources */
|
||||
if(attr && H5A_close(attr) < 0)
|
||||
if(attr && H5A__close(attr) < 0)
|
||||
HDONE_ERROR(H5E_ATTR, H5E_CANTFREE, FAIL, "can't close attribute")
|
||||
|
||||
FUNC_LEAVE_API(ret_value)
|
||||
@ -1153,8 +1128,12 @@ H5Arename(hid_t loc_id, const char *old_name, const char *new_name)
|
||||
if(H5G_loc(loc_id, &loc) < 0)
|
||||
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a location")
|
||||
|
||||
/* Set up collective metadata if appropriate */
|
||||
if(H5CX_set_loc(loc_id) < 0)
|
||||
HGOTO_ERROR(H5E_ATTR, H5E_CANTSET, FAIL, "can't set collective metadata read")
|
||||
|
||||
/* Call private attribute rename routine */
|
||||
if(H5O_attr_rename(loc.oloc, H5AC_ind_read_dxpl_id, old_name, new_name) < 0)
|
||||
if(H5A__rename(&loc, old_name, new_name) < 0)
|
||||
HGOTO_ERROR(H5E_ATTR, H5E_CANTRENAME, FAIL, "can't rename attribute")
|
||||
} /* end if */
|
||||
|
||||
@ -1199,17 +1178,16 @@ H5Arename_by_name(hid_t loc_id, const char *obj_name, const char *old_attr_name,
|
||||
/* Avoid thrashing things if the names are the same */
|
||||
if(HDstrcmp(old_attr_name, new_attr_name)) {
|
||||
H5G_loc_t loc; /* Object location */
|
||||
hid_t dxpl_id = H5AC_ind_read_dxpl_id; /* dxpl used by the library */
|
||||
|
||||
/* Verify access property list and get correct dxpl */
|
||||
if(H5P_verify_apl_and_dxpl(&lapl_id, H5P_CLS_LACC, &dxpl_id, loc_id, TRUE) < 0)
|
||||
HGOTO_ERROR(H5E_ATTR, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
|
||||
/* Verify access property list and set up collective metadata if appropriate */
|
||||
if(H5CX_set_apl(&lapl_id, H5P_CLS_LACC, loc_id, TRUE) < 0)
|
||||
HGOTO_ERROR(H5E_ATTR, H5E_CANTSET, FAIL, "can't set access property list info")
|
||||
|
||||
if(H5G_loc(loc_id, &loc) < 0)
|
||||
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a location")
|
||||
|
||||
/* Call private attribute rename routine */
|
||||
if(H5A_rename_by_name(loc, obj_name, old_attr_name, new_attr_name, lapl_id, dxpl_id) < 0)
|
||||
if(H5A__rename_by_name(loc, obj_name, old_attr_name, new_attr_name) < 0)
|
||||
HGOTO_ERROR(H5E_ATTR, H5E_CANTRENAME, FAIL, "can't rename attribute")
|
||||
} /* end if */
|
||||
|
||||
@ -1263,9 +1241,6 @@ herr_t
|
||||
H5Aiterate2(hid_t loc_id, H5_index_t idx_type, H5_iter_order_t order,
|
||||
hsize_t *idx, H5A_operator2_t op, void *op_data)
|
||||
{
|
||||
H5A_attr_iter_op_t attr_op; /* Attribute operator */
|
||||
hsize_t start_idx; /* Index of attribute to start iterating at */
|
||||
hsize_t last_attr; /* Index of last attribute examined */
|
||||
herr_t ret_value; /* Return value */
|
||||
|
||||
FUNC_ENTER_API(FAIL)
|
||||
@ -1279,19 +1254,10 @@ H5Aiterate2(hid_t loc_id, H5_index_t idx_type, H5_iter_order_t order,
|
||||
if(order <= H5_ITER_UNKNOWN || order >= H5_ITER_N)
|
||||
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid iteration order specified")
|
||||
|
||||
/* Build attribute operator info */
|
||||
attr_op.op_type = H5A_ATTR_OP_APP2;
|
||||
attr_op.u.app_op2 = op;
|
||||
|
||||
/* Call attribute iteration routine */
|
||||
last_attr = start_idx = (idx ? *idx : 0);
|
||||
if((ret_value = H5O_attr_iterate(loc_id, H5AC_ind_read_dxpl_id, idx_type, order, start_idx, &last_attr, &attr_op, op_data)) < 0)
|
||||
if((ret_value = H5A__iterate(loc_id, idx_type, order, idx, op, op_data)) < 0)
|
||||
HERROR(H5E_ATTR, H5E_BADITER, "error iterating over attributes");
|
||||
|
||||
/* Set the last attribute information */
|
||||
if(idx)
|
||||
*idx = last_attr;
|
||||
|
||||
done:
|
||||
FUNC_LEAVE_API(ret_value)
|
||||
} /* H5Aiterate2() */
|
||||
@ -1346,15 +1312,6 @@ H5Aiterate_by_name(hid_t loc_id, const char *obj_name, H5_index_t idx_type,
|
||||
hid_t lapl_id)
|
||||
{
|
||||
H5G_loc_t loc; /* Object location */
|
||||
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 */
|
||||
hbool_t loc_found = FALSE; /* Entry at 'obj_name' found */
|
||||
hid_t obj_loc_id = (-1); /* ID for object located */
|
||||
H5A_attr_iter_op_t attr_op; /* Attribute operator */
|
||||
hsize_t start_idx; /* Index of attribute to start iterating at */
|
||||
hsize_t last_attr; /* Index of last attribute examined */
|
||||
hid_t dxpl_id = H5AC_ind_read_dxpl_id; /* dxpl used by library */
|
||||
herr_t ret_value; /* Return value */
|
||||
|
||||
FUNC_ENTER_API(FAIL)
|
||||
@ -1373,46 +1330,15 @@ H5Aiterate_by_name(hid_t loc_id, const char *obj_name, H5_index_t idx_type,
|
||||
if(order <= H5_ITER_UNKNOWN || order >= H5_ITER_N)
|
||||
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid iteration order specified")
|
||||
|
||||
/* Verify access property list and get correct dxpl */
|
||||
if(H5P_verify_apl_and_dxpl(&lapl_id, H5P_CLS_LACC, &dxpl_id, loc_id, FALSE) < 0)
|
||||
HGOTO_ERROR(H5E_ATTR, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
|
||||
/* Verify access property list and set up collective metadata if appropriate */
|
||||
if(H5CX_set_apl(&lapl_id, H5P_CLS_LACC, loc_id, FALSE) < 0)
|
||||
HGOTO_ERROR(H5E_ATTR, H5E_CANTSET, FAIL, "can't set access property list info")
|
||||
|
||||
/* Set up opened group location to fill in */
|
||||
obj_loc.oloc = &obj_oloc;
|
||||
obj_loc.path = &obj_path;
|
||||
H5G_loc_reset(&obj_loc);
|
||||
|
||||
/* Find the object's location */
|
||||
if(H5G_loc_find(&loc, obj_name, &obj_loc/*out*/, lapl_id, dxpl_id) < 0)
|
||||
HGOTO_ERROR(H5E_ATTR, H5E_NOTFOUND, FAIL, "object not found")
|
||||
loc_found = TRUE;
|
||||
|
||||
/* Open the object */
|
||||
if((obj_loc_id = H5O_open_by_loc(&obj_loc, lapl_id, dxpl_id, TRUE)) < 0)
|
||||
HGOTO_ERROR(H5E_ATTR, H5E_CANTOPENOBJ, FAIL, "unable to open object")
|
||||
|
||||
/* Build attribute operator info */
|
||||
attr_op.op_type = H5A_ATTR_OP_APP2;
|
||||
attr_op.u.app_op2 = op;
|
||||
|
||||
/* Call attribute iteration routine */
|
||||
last_attr = start_idx = (idx ? *idx : 0);
|
||||
if((ret_value = H5O_attr_iterate(obj_loc_id, dxpl_id, idx_type, order, start_idx, &last_attr, &attr_op, op_data)) < 0)
|
||||
/* Call attribute iteration by name routine */
|
||||
if((ret_value = H5A__iterate_by_name(&loc, obj_name, idx_type, order, idx, op, op_data)) < 0)
|
||||
HERROR(H5E_ATTR, H5E_BADITER, "error iterating over attributes");
|
||||
|
||||
/* Set the last attribute information */
|
||||
if(idx)
|
||||
*idx = last_attr;
|
||||
|
||||
done:
|
||||
/* Release resources */
|
||||
if(obj_loc_id > 0) {
|
||||
if(H5I_dec_app_ref(obj_loc_id) < 0)
|
||||
HDONE_ERROR(H5E_ATTR, H5E_CANTDEC, FAIL, "unable to close temporary object")
|
||||
} /* end if */
|
||||
else if(loc_found && H5G_loc_free(&obj_loc) < 0)
|
||||
HDONE_ERROR(H5E_ATTR, H5E_CANTRELEASE, FAIL, "can't free location")
|
||||
|
||||
FUNC_LEAVE_API(ret_value)
|
||||
} /* H5Aiterate_by_name() */
|
||||
|
||||
@ -1448,8 +1374,12 @@ H5Adelete(hid_t loc_id, const char *name)
|
||||
if(!name || !*name)
|
||||
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no name")
|
||||
|
||||
/* Set up collective metadata if appropriate */
|
||||
if(H5CX_set_loc(loc_id) < 0)
|
||||
HGOTO_ERROR(H5E_ATTR, H5E_CANTSET, FAIL, "can't set collective metadata read")
|
||||
|
||||
/* Delete the attribute from the location */
|
||||
if(H5O_attr_remove(loc.oloc, name, H5AC_ind_read_dxpl_id) < 0)
|
||||
if(H5A__delete(&loc, name) < 0)
|
||||
HGOTO_ERROR(H5E_ATTR, H5E_CANTDELETE, FAIL, "unable to delete attribute")
|
||||
|
||||
done:
|
||||
@ -1478,11 +1408,6 @@ H5Adelete_by_name(hid_t loc_id, const char *obj_name, const char *attr_name,
|
||||
hid_t lapl_id)
|
||||
{
|
||||
H5G_loc_t loc; /* Object location */
|
||||
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 */
|
||||
hbool_t loc_found = FALSE; /* Entry at 'obj_name' found */
|
||||
hid_t dxpl_id = H5AC_ind_read_dxpl_id; /* dxpl used by library */
|
||||
herr_t ret_value = SUCCEED; /* Return value */
|
||||
|
||||
FUNC_ENTER_API(FAIL)
|
||||
@ -1498,29 +1423,15 @@ H5Adelete_by_name(hid_t loc_id, const char *obj_name, const char *attr_name,
|
||||
if(!attr_name || !*attr_name)
|
||||
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no attribute name")
|
||||
|
||||
/* Verify access property list and get correct dxpl */
|
||||
if(H5P_verify_apl_and_dxpl(&lapl_id, H5P_CLS_LACC, &dxpl_id, loc_id, TRUE) < 0)
|
||||
HGOTO_ERROR(H5E_ATTR, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
|
||||
|
||||
/* Set up opened group location to fill in */
|
||||
obj_loc.oloc = &obj_oloc;
|
||||
obj_loc.path = &obj_path;
|
||||
H5G_loc_reset(&obj_loc);
|
||||
|
||||
/* Find the object's location */
|
||||
if(H5G_loc_find(&loc, obj_name, &obj_loc/*out*/, lapl_id, dxpl_id) < 0)
|
||||
HGOTO_ERROR(H5E_ATTR, H5E_NOTFOUND, FAIL, "object not found")
|
||||
loc_found = TRUE;
|
||||
/* Verify access property list and set up collective metadata if appropriate */
|
||||
if(H5CX_set_apl(&lapl_id, H5P_CLS_LACC, loc_id, TRUE) < 0)
|
||||
HGOTO_ERROR(H5E_ATTR, H5E_CANTSET, FAIL, "can't set access property list info")
|
||||
|
||||
/* Delete the attribute from the location */
|
||||
if(H5O_attr_remove(obj_loc.oloc, attr_name, dxpl_id) < 0)
|
||||
if(H5A__delete_by_name(&loc, obj_name, attr_name) < 0)
|
||||
HGOTO_ERROR(H5E_ATTR, H5E_CANTDELETE, FAIL, "unable to delete attribute")
|
||||
|
||||
done:
|
||||
/* Release resources */
|
||||
if(loc_found && H5G_loc_free(&obj_loc) < 0)
|
||||
HDONE_ERROR(H5E_ATTR, H5E_CANTRELEASE, FAIL, "can't free location")
|
||||
|
||||
FUNC_LEAVE_API(ret_value)
|
||||
} /* H5Adelete_by_name() */
|
||||
|
||||
@ -1554,11 +1465,6 @@ H5Adelete_by_idx(hid_t loc_id, const char *obj_name, H5_index_t idx_type,
|
||||
H5_iter_order_t order, hsize_t n, hid_t lapl_id)
|
||||
{
|
||||
H5G_loc_t loc; /* Object location */
|
||||
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 */
|
||||
hbool_t loc_found = FALSE; /* Entry at 'obj_name' found */
|
||||
hid_t dxpl_id = H5AC_ind_read_dxpl_id; /* dxpl used by library */
|
||||
herr_t ret_value = SUCCEED; /* Return value */
|
||||
|
||||
FUNC_ENTER_API(FAIL)
|
||||
@ -1576,29 +1482,15 @@ H5Adelete_by_idx(hid_t loc_id, const char *obj_name, H5_index_t idx_type,
|
||||
if(order <= H5_ITER_UNKNOWN || order >= H5_ITER_N)
|
||||
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid iteration order specified")
|
||||
|
||||
/* Verify access property list and get correct dxpl */
|
||||
if(H5P_verify_apl_and_dxpl(&lapl_id, H5P_CLS_LACC, &dxpl_id, loc_id, TRUE) < 0)
|
||||
HGOTO_ERROR(H5E_ATTR, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
|
||||
|
||||
/* Set up opened group location to fill in */
|
||||
obj_loc.oloc = &obj_oloc;
|
||||
obj_loc.path = &obj_path;
|
||||
H5G_loc_reset(&obj_loc);
|
||||
|
||||
/* Find the object's location */
|
||||
if(H5G_loc_find(&loc, obj_name, &obj_loc/*out*/, lapl_id, dxpl_id) < 0)
|
||||
HGOTO_ERROR(H5E_ATTR, H5E_NOTFOUND, FAIL, "object not found")
|
||||
loc_found = TRUE;
|
||||
/* Verify access property list and set up collective metadata if appropriate */
|
||||
if(H5CX_set_apl(&lapl_id, H5P_CLS_LACC, loc_id, TRUE) < 0)
|
||||
HGOTO_ERROR(H5E_ATTR, H5E_CANTSET, FAIL, "can't set access property list info")
|
||||
|
||||
/* Delete the attribute from the location */
|
||||
if(H5O_attr_remove_by_idx(obj_loc.oloc, idx_type, order, n, dxpl_id) < 0)
|
||||
if(H5A__delete_by_idx(&loc, obj_name, idx_type, order, n) < 0)
|
||||
HGOTO_ERROR(H5E_ATTR, H5E_CANTDELETE, FAIL, "unable to delete attribute")
|
||||
|
||||
done:
|
||||
/* Release resources */
|
||||
if(loc_found && H5G_loc_free(&obj_loc) < 0)
|
||||
HDONE_ERROR(H5E_ATTR, H5E_CANTRELEASE, FAIL, "can't free location")
|
||||
|
||||
FUNC_LEAVE_API(ret_value)
|
||||
} /* H5Adelete_by_idx() */
|
||||
|
||||
@ -1671,7 +1563,7 @@ H5Aexists(hid_t obj_id, const char *attr_name)
|
||||
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no attribute name")
|
||||
|
||||
/* Check if the attribute exists */
|
||||
if((ret_value = H5O_attr_exists(loc.oloc, attr_name, H5AC_ind_read_dxpl_id)) < 0)
|
||||
if((ret_value = H5A__exists(&loc, attr_name)) < 0)
|
||||
HGOTO_ERROR(H5E_ATTR, H5E_CANTGET, FAIL, "unable to determine if attribute exists")
|
||||
|
||||
done:
|
||||
@ -1697,7 +1589,6 @@ H5Aexists_by_name(hid_t loc_id, const char *obj_name, const char *attr_name,
|
||||
hid_t lapl_id)
|
||||
{
|
||||
H5G_loc_t loc; /* Object location */
|
||||
hid_t dxpl_id = H5AC_ind_read_dxpl_id; /* dxpl used by library */
|
||||
htri_t ret_value; /* Return value */
|
||||
|
||||
FUNC_ENTER_API(FAIL)
|
||||
@ -1713,11 +1604,11 @@ H5Aexists_by_name(hid_t loc_id, const char *obj_name, const char *attr_name,
|
||||
if (!attr_name || !*attr_name)
|
||||
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no attribute name")
|
||||
|
||||
/* Verify access property list and get correct dxpl */
|
||||
if (H5P_verify_apl_and_dxpl(&lapl_id, H5P_CLS_LACC, &dxpl_id, loc_id, FALSE) < 0)
|
||||
HGOTO_ERROR(H5E_ATTR, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
|
||||
/* Verify access property list and set up collective metadata if appropriate */
|
||||
if(H5CX_set_apl(&lapl_id, H5P_CLS_LACC, loc_id, FALSE) < 0)
|
||||
HGOTO_ERROR(H5E_ATTR, H5E_CANTSET, FAIL, "can't set access property list info")
|
||||
|
||||
if ((ret_value = H5A_exists_by_name(loc, obj_name, attr_name, lapl_id, dxpl_id)) < 0)
|
||||
if ((ret_value = H5A__exists_by_name(loc, obj_name, attr_name)) < 0)
|
||||
HGOTO_ERROR(H5E_ATTR, H5E_CANTGET, FAIL, "unable to determine if attribute exists")
|
||||
|
||||
done:
|
||||
|
332
src/H5AC.c
332
src/H5AC.c
@ -39,6 +39,7 @@
|
||||
#include "H5private.h" /* Generic Functions */
|
||||
#include "H5ACpkg.h" /* Metadata cache */
|
||||
#include "H5Cprivate.h" /* Cache */
|
||||
#include "H5CXprivate.h" /* API Contexts */
|
||||
#include "H5Eprivate.h" /* Error handling */
|
||||
#include "H5Fpkg.h" /* Files */
|
||||
#include "H5FDprivate.h" /* File drivers */
|
||||
@ -66,7 +67,7 @@ static herr_t H5AC__check_if_write_permitted(const H5F_t *f,
|
||||
static herr_t H5AC__ext_config_2_int_config(H5AC_cache_config_t *ext_conf_ptr,
|
||||
H5C_auto_size_ctl_t *int_conf_ptr);
|
||||
#if H5AC_DO_TAGGING_SANITY_CHECKS
|
||||
static herr_t H5AC__verify_tag(hid_t dxpl_id, const H5AC_class_t * type);
|
||||
static herr_t H5AC__verify_tag(const H5AC_class_t * type);
|
||||
#endif /* H5AC_DO_TAGGING_SANITY_CHECKS */
|
||||
|
||||
|
||||
@ -81,20 +82,6 @@ hbool_t H5_PKG_INIT_VAR = FALSE;
|
||||
/* Library Private Variables */
|
||||
/*****************************/
|
||||
|
||||
/* Default dataset transfer property list for metadata I/O calls (coll write, ind read) */
|
||||
hid_t H5AC_ind_read_dxpl_id = (-1);
|
||||
#ifdef H5_HAVE_PARALLEL
|
||||
/* collective metadata read property */
|
||||
hid_t H5AC_coll_read_dxpl_id = (-1);
|
||||
#endif /* H5_HAVE_PARALLEL */
|
||||
|
||||
/* DXPL to be used in operations that will not result in I/O calls */
|
||||
hid_t H5AC_noio_dxpl_id = (-1);
|
||||
|
||||
/* Default DXPL to be used for raw data I/O operations when one is not
|
||||
provided by the user (fill values in H5Dcreate) */
|
||||
hid_t H5AC_rawdata_dxpl_id = (-1);
|
||||
|
||||
#ifdef H5_HAVE_PARALLEL
|
||||
/* Environment variable for collective API sanity checks */
|
||||
hbool_t H5_coll_api_sanity_check_g = false;
|
||||
@ -187,18 +174,7 @@ done:
|
||||
herr_t
|
||||
H5AC__init_package(void)
|
||||
{
|
||||
#if defined H5_DEBUG_BUILD | defined H5_HAVE_PARALLEL
|
||||
H5P_genplist_t *xfer_plist; /* Dataset transfer property list object */
|
||||
#endif /* defined H5_DEBUG_BUILD | defined H5_HAVE_PARALLEL */
|
||||
#ifdef H5_DEBUG_BUILD
|
||||
H5FD_dxpl_type_t dxpl_type; /* Property indicating the type of the internal dxpl */
|
||||
#endif /* H5_DEBUG_BUILD */
|
||||
#ifdef H5_HAVE_PARALLEL
|
||||
H5P_coll_md_read_flag_t coll_meta_read;
|
||||
#endif /* H5_HAVE_PARALLEL */
|
||||
herr_t ret_value = SUCCEED; /* Return value */
|
||||
|
||||
FUNC_ENTER_PACKAGE
|
||||
FUNC_ENTER_PACKAGE_NOERR
|
||||
|
||||
#ifdef H5_HAVE_PARALLEL
|
||||
/* check whether to enable strict collective function calling
|
||||
@ -212,81 +188,7 @@ H5AC__init_package(void)
|
||||
}
|
||||
#endif /* H5_HAVE_PARALLEL */
|
||||
|
||||
#if defined(H5_HAVE_PARALLEL) || defined(H5_DEBUG_BUILD)
|
||||
/* Get an ID for the internal independent metadata dxpl */
|
||||
if((H5AC_ind_read_dxpl_id = H5P_create_id(H5P_CLS_DATASET_XFER_g, FALSE)) < 0)
|
||||
HGOTO_ERROR(H5E_CACHE, H5E_CANTCREATE, FAIL, "unable to register property list")
|
||||
|
||||
/* Get an ID for the no I/O internal dxpl */
|
||||
if((H5AC_noio_dxpl_id = H5P_create_id(H5P_CLS_DATASET_XFER_g, FALSE)) < 0)
|
||||
HGOTO_ERROR(H5E_CACHE, H5E_CANTCREATE, FAIL, "unable to register property list")
|
||||
|
||||
/* Get an ID for the raw data (H5AC) dxpl */
|
||||
if((H5AC_rawdata_dxpl_id = H5P_create_id(H5P_CLS_DATASET_XFER_g, FALSE)) < 0)
|
||||
HGOTO_ERROR(H5E_CACHE, H5E_CANTCREATE, FAIL, "unable to register property list")
|
||||
|
||||
/* if this is a debug build, set the dxpl type flag on the
|
||||
independent metadata dxpl and create the noio and raw data internal dxpls */
|
||||
#ifdef H5_DEBUG_BUILD
|
||||
/* Get the property list object */
|
||||
if (NULL == (xfer_plist = (H5P_genplist_t *)H5I_object(H5AC_ind_read_dxpl_id)))
|
||||
HGOTO_ERROR(H5E_CACHE, H5E_BADATOM, FAIL, "can't get new property list object")
|
||||
/* Insert the dxpl type property */
|
||||
dxpl_type = H5FD_METADATA_DXPL;
|
||||
if(H5P_set(xfer_plist, H5FD_DXPL_TYPE_NAME, &dxpl_type) < 0)
|
||||
HGOTO_ERROR(H5E_CACHE, H5E_CANTSET, FAIL, "can't set dxpl type property")
|
||||
|
||||
/* Get the property list object */
|
||||
if (NULL == (xfer_plist = (H5P_genplist_t *)H5I_object(H5AC_noio_dxpl_id)))
|
||||
HGOTO_ERROR(H5E_CACHE, H5E_BADATOM, FAIL, "can't get new property list object")
|
||||
/* Insert the dxpl type property */
|
||||
dxpl_type = H5FD_NOIO_DXPL;
|
||||
if(H5P_set(xfer_plist, H5FD_DXPL_TYPE_NAME, &dxpl_type) < 0)
|
||||
HGOTO_ERROR(H5E_CACHE, H5E_CANTSET, FAIL, "can't set dxpl type property")
|
||||
|
||||
/* Get the property list object */
|
||||
if (NULL == (xfer_plist = (H5P_genplist_t *)H5I_object(H5AC_rawdata_dxpl_id)))
|
||||
HGOTO_ERROR(H5E_CACHE, H5E_BADATOM, FAIL, "can't get new property list object")
|
||||
/* Insert the dxpl type property */
|
||||
dxpl_type = H5FD_RAWDATA_DXPL;
|
||||
if(H5P_set(xfer_plist, H5FD_DXPL_TYPE_NAME, &dxpl_type) < 0)
|
||||
HGOTO_ERROR(H5E_CACHE, H5E_CANTSET, FAIL, "can't set dxpl type property")
|
||||
#endif /* H5_DEBUG_BUILD */
|
||||
|
||||
/* if this is a parallel build, create an internal dxpl for
|
||||
collective metadata reads */
|
||||
#ifdef H5_HAVE_PARALLEL
|
||||
/* Get an ID for H5AC_coll_read_dxpl_id */
|
||||
if((H5AC_coll_read_dxpl_id = H5P_create_id(H5P_CLS_DATASET_XFER_g, FALSE)) < 0)
|
||||
HGOTO_ERROR(H5E_CACHE, H5E_CANTCREATE, FAIL, "unable to register property list")
|
||||
/* Get the property list object */
|
||||
if (NULL == (xfer_plist = (H5P_genplist_t *)H5I_object(H5AC_coll_read_dxpl_id)))
|
||||
HGOTO_ERROR(H5E_CACHE, H5E_BADATOM, FAIL, "can't get new property list object")
|
||||
/* set 'collective metadata read' property */
|
||||
coll_meta_read = H5P_USER_TRUE;
|
||||
if(H5P_set(xfer_plist, H5_COLL_MD_READ_FLAG_NAME, &coll_meta_read) < 0)
|
||||
HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set collective metadata read flag")
|
||||
|
||||
/* if we have a debug build, set the dxpl type to metadata on the
|
||||
collective metadata dxpl */
|
||||
#ifdef H5_DEBUG_BUILD
|
||||
/* set metadata dxpl type */
|
||||
dxpl_type = H5FD_METADATA_DXPL;
|
||||
if(H5P_set(xfer_plist, H5FD_DXPL_TYPE_NAME, &dxpl_type) < 0)
|
||||
HGOTO_ERROR(H5E_CACHE, H5E_CANTSET, FAIL, "can't set dxpl type property")
|
||||
#endif /* H5_DEBUG_BUILD */
|
||||
#endif /* H5_HAVE_PARALLEL */
|
||||
|
||||
#else /* defined(H5_HAVE_PARALLEL) || defined(H5_DEBUG_BUILD) */
|
||||
H5AC_ind_read_dxpl_id = H5P_DATASET_XFER_DEFAULT;
|
||||
H5AC_noio_dxpl_id = H5P_DATASET_XFER_DEFAULT;
|
||||
H5AC_rawdata_dxpl_id = H5P_DATASET_XFER_DEFAULT;
|
||||
#endif /* defined(H5_HAVE_PARALLEL) || defined(H5_DEBUG_BUILD) */
|
||||
|
||||
#if defined(H5_DEBUG_BUILD) | defined(H5_HAVE_PARALLEL)
|
||||
done:
|
||||
#endif /* defined(H5_DEBUG_BUILD) | defined(H5_HAVE_PARALLEL) */
|
||||
FUNC_LEAVE_NOAPI(ret_value)
|
||||
FUNC_LEAVE_NOAPI(SUCCEED)
|
||||
} /* end H5AC__init_package() */
|
||||
|
||||
|
||||
@ -307,46 +209,13 @@ done:
|
||||
int
|
||||
H5AC_term_package(void)
|
||||
{
|
||||
int n = 0;
|
||||
|
||||
FUNC_ENTER_NOAPI_NOINIT_NOERR
|
||||
|
||||
if(H5_PKG_INIT_VAR) {
|
||||
if(H5AC_ind_read_dxpl_id > 0 || H5AC_noio_dxpl_id > 0 || H5AC_rawdata_dxpl_id > 0
|
||||
#ifdef H5_HAVE_PARALLEL
|
||||
|| H5AC_coll_read_dxpl_id > 0
|
||||
#endif /* H5_HAVE_PARALLEL */
|
||||
) {
|
||||
#if defined(H5_HAVE_PARALLEL) || defined(H5_DEBUG_BUILD)
|
||||
/* Indicate more work to do */
|
||||
n = 1; /* H5I */
|
||||
|
||||
/* Close H5AC dxpls */
|
||||
if(H5I_dec_ref(H5AC_ind_read_dxpl_id) < 0 ||
|
||||
H5I_dec_ref(H5AC_noio_dxpl_id) < 0 ||
|
||||
H5I_dec_ref(H5AC_rawdata_dxpl_id) < 0
|
||||
#ifdef H5_HAVE_PARALLEL
|
||||
|| H5I_dec_ref(H5AC_coll_read_dxpl_id) < 0
|
||||
#endif /* H5_HAVE_PARALLEL */
|
||||
)
|
||||
H5E_clear_stack(NULL); /*ignore error*/
|
||||
#endif /* defined(H5_HAVE_PARALLEL) || defined(H5_DEBUG_BUILD) */
|
||||
|
||||
/* Reset static IDs */
|
||||
H5AC_ind_read_dxpl_id = (-1);
|
||||
H5AC_noio_dxpl_id = (-1);
|
||||
H5AC_rawdata_dxpl_id = (-1);
|
||||
#ifdef H5_HAVE_PARALLEL
|
||||
H5AC_coll_read_dxpl_id = (-1);
|
||||
#endif /* H5_HAVE_PARALLEL */
|
||||
} /* end if */
|
||||
|
||||
if(H5_PKG_INIT_VAR)
|
||||
/* Reset interface initialization flag */
|
||||
if(0 == n)
|
||||
H5_PKG_INIT_VAR = FALSE;
|
||||
} /* end if */
|
||||
H5_PKG_INIT_VAR = FALSE;
|
||||
|
||||
FUNC_LEAVE_NOAPI(n)
|
||||
FUNC_LEAVE_NOAPI(0)
|
||||
} /* end H5AC_term_package() */
|
||||
|
||||
|
||||
@ -598,7 +467,7 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
herr_t
|
||||
H5AC_dest(H5F_t *f, hid_t dxpl_id)
|
||||
H5AC_dest(H5F_t *f)
|
||||
{
|
||||
#ifdef H5_HAVE_PARALLEL
|
||||
H5AC_aux_t * aux_ptr = NULL;
|
||||
@ -646,15 +515,13 @@ H5AC_dest(H5F_t *f, hid_t dxpl_id)
|
||||
* 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) ) &&
|
||||
( H5AC__flush_entries(f, dxpl_id) < 0 ) )
|
||||
|
||||
HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "Can't flush")
|
||||
|
||||
if(H5F_ACC_RDWR & H5F_INTENT(f))
|
||||
if(H5AC__flush_entries(f) < 0)
|
||||
HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "Can't flush")
|
||||
#endif /* H5_HAVE_PARALLEL */
|
||||
|
||||
/* Destroy the cache */
|
||||
if(H5C_dest(f, dxpl_id) < 0)
|
||||
if(H5C_dest(f) < 0)
|
||||
HGOTO_ERROR(H5E_CACHE, H5E_CANTFREE, FAIL, "can't destroy cache")
|
||||
f->shared->cache = NULL;
|
||||
|
||||
@ -696,7 +563,7 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
herr_t
|
||||
H5AC_evict(H5F_t *f, hid_t dxpl_id)
|
||||
H5AC_evict(H5F_t *f)
|
||||
{
|
||||
hbool_t log_enabled; /* TRUE if logging was set up */
|
||||
hbool_t curr_logging; /* TRUE if currently logging */
|
||||
@ -714,7 +581,7 @@ H5AC_evict(H5F_t *f, hid_t dxpl_id)
|
||||
HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "unable to get logging status")
|
||||
|
||||
/* Evict all entries in the cache except the pinned superblock entry */
|
||||
if(H5C_evict(f, dxpl_id) < 0)
|
||||
if(H5C_evict(f) < 0)
|
||||
HGOTO_ERROR(H5E_CACHE, H5E_CANTFREE, FAIL, "can't evict cache")
|
||||
|
||||
done:
|
||||
@ -743,8 +610,8 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
herr_t
|
||||
H5AC_expunge_entry(H5F_t *f, hid_t dxpl_id, const H5AC_class_t *type,
|
||||
haddr_t addr, unsigned flags)
|
||||
H5AC_expunge_entry(H5F_t *f, const H5AC_class_t *type, haddr_t addr,
|
||||
unsigned flags)
|
||||
{
|
||||
#if H5AC__TRACE_FILE_ENABLED
|
||||
char trace[128] = "";
|
||||
@ -781,7 +648,7 @@ H5AC_expunge_entry(H5F_t *f, hid_t dxpl_id, const H5AC_class_t *type,
|
||||
}
|
||||
#endif /* H5AC__TRACE_FILE_ENABLED */
|
||||
|
||||
if(H5C_expunge_entry(f, dxpl_id, type, addr, flags) < 0)
|
||||
if(H5C_expunge_entry(f, type, addr, flags) < 0)
|
||||
HGOTO_ERROR(H5E_CACHE, H5E_CANTEXPUNGE, FAIL, "H5C_expunge_entry() failed")
|
||||
|
||||
done:
|
||||
@ -820,7 +687,7 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
herr_t
|
||||
H5AC_flush(H5F_t *f, hid_t dxpl_id)
|
||||
H5AC_flush(H5F_t *f)
|
||||
{
|
||||
#if H5AC__TRACE_FILE_ENABLED
|
||||
char trace[128] = "";
|
||||
@ -855,13 +722,13 @@ H5AC_flush(H5F_t *f, hid_t dxpl_id)
|
||||
HGOTO_ERROR(H5E_CACHE, H5E_CANTGET, FAIL, "H5C_clear_coll_entries() failed")
|
||||
|
||||
/* Attempt to flush all entries from rank 0 & Bcast clean list to other ranks */
|
||||
if(H5AC__flush_entries(f, dxpl_id) < 0)
|
||||
if(H5AC__flush_entries(f) < 0)
|
||||
HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "Can't flush")
|
||||
#endif /* H5_HAVE_PARALLEL */
|
||||
|
||||
/* Flush the cache */
|
||||
/* (Again, in parallel - writes out the superblock) */
|
||||
if(H5C_flush_cache(f, dxpl_id, H5AC__NO_FLAGS_SET) < 0)
|
||||
if(H5C_flush_cache(f, H5AC__NO_FLAGS_SET) < 0)
|
||||
HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "Can't flush cache")
|
||||
|
||||
done:
|
||||
@ -900,7 +767,7 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
herr_t
|
||||
H5AC_force_cache_image_load(H5F_t *f, hid_t dxpl_id)
|
||||
H5AC_force_cache_image_load(H5F_t *f)
|
||||
{
|
||||
herr_t ret_value = SUCCEED; /* Return value */
|
||||
|
||||
@ -911,7 +778,7 @@ H5AC_force_cache_image_load(H5F_t *f, hid_t dxpl_id)
|
||||
HDassert(f->shared);
|
||||
HDassert(f->shared->cache);
|
||||
|
||||
if(H5C_force_cache_image_load(f, dxpl_id) < 0)
|
||||
if(H5C_force_cache_image_load(f) < 0)
|
||||
HGOTO_ERROR(H5E_CACHE, H5E_CANTLOAD, FAIL, "Can't load cache image")
|
||||
|
||||
done:
|
||||
@ -1003,8 +870,8 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
herr_t
|
||||
H5AC_insert_entry(H5F_t *f, hid_t dxpl_id, const H5AC_class_t *type, haddr_t addr,
|
||||
void *thing, unsigned int flags)
|
||||
H5AC_insert_entry(H5F_t *f, const H5AC_class_t *type, haddr_t addr, void *thing,
|
||||
unsigned int flags)
|
||||
{
|
||||
#if H5AC__TRACE_FILE_ENABLED
|
||||
char trace[128] = "";
|
||||
@ -1048,12 +915,12 @@ H5AC_insert_entry(H5F_t *f, hid_t dxpl_id, const H5AC_class_t *type, haddr_t add
|
||||
#endif /* H5AC__TRACE_FILE_ENABLED */
|
||||
|
||||
#if H5AC_DO_TAGGING_SANITY_CHECKS
|
||||
if(!H5C_get_ignore_tags(f->shared->cache) && H5AC__verify_tag(dxpl_id, type) < 0)
|
||||
if(!H5C_get_ignore_tags(f->shared->cache) && H5AC__verify_tag(type) < 0)
|
||||
HGOTO_ERROR(H5E_CACHE, H5E_CANTTAG, FAIL, "Bad tag value")
|
||||
#endif /* H5AC_DO_TAGGING_SANITY_CHECKS */
|
||||
|
||||
/* Insert entry into metadata cache */
|
||||
if(H5C_insert_entry(f, dxpl_id, type, addr, thing, flags) < 0)
|
||||
if(H5C_insert_entry(f, type, addr, thing, flags) < 0)
|
||||
HGOTO_ERROR(H5E_CACHE, H5E_CANTINS, FAIL, "H5C_insert_entry() failed")
|
||||
|
||||
#if H5AC__TRACE_FILE_ENABLED
|
||||
@ -1073,7 +940,7 @@ H5AC_insert_entry(H5F_t *f, hid_t dxpl_id, const H5AC_class_t *type, haddr_t add
|
||||
|
||||
/* Check if we should try to flush */
|
||||
if(aux_ptr->dirty_bytes >= aux_ptr->dirty_bytes_threshold)
|
||||
if(H5AC__run_sync_point(f, dxpl_id, H5AC_SYNC_POINT_OP__FLUSH_TO_MIN_CLEAN) < 0)
|
||||
if(H5AC__run_sync_point(f, H5AC_SYNC_POINT_OP__FLUSH_TO_MIN_CLEAN) < 0)
|
||||
HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "Can't run sync point")
|
||||
} /* end if */
|
||||
}
|
||||
@ -1431,12 +1298,7 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
herr_t
|
||||
H5AC_move_entry(H5F_t *f, const H5AC_class_t *type, haddr_t old_addr,
|
||||
haddr_t new_addr, hid_t
|
||||
#ifndef H5_HAVE_PARALLEL
|
||||
H5_ATTR_UNUSED
|
||||
#endif /* H5_HAVE_PARALLEL */
|
||||
dxpl_id)
|
||||
H5AC_move_entry(H5F_t *f, const H5AC_class_t *type, haddr_t old_addr, haddr_t new_addr)
|
||||
{
|
||||
#if H5AC__TRACE_FILE_ENABLED
|
||||
char trace[128] = "";
|
||||
@ -1486,7 +1348,7 @@ H5_ATTR_UNUSED
|
||||
#ifdef H5_HAVE_PARALLEL
|
||||
/* Check if we should try to flush */
|
||||
if(NULL != aux_ptr && aux_ptr->dirty_bytes >= aux_ptr->dirty_bytes_threshold)
|
||||
if(H5AC__run_sync_point(f, dxpl_id, H5AC_SYNC_POINT_OP__FLUSH_TO_MIN_CLEAN) < 0)
|
||||
if(H5AC__run_sync_point(f, H5AC_SYNC_POINT_OP__FLUSH_TO_MIN_CLEAN) < 0)
|
||||
HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "Can't run sync point")
|
||||
#endif /* H5_HAVE_PARALLEL */
|
||||
|
||||
@ -1591,7 +1453,7 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
herr_t
|
||||
H5AC_prep_for_file_close(H5F_t *f, hid_t dxpl_id)
|
||||
H5AC_prep_for_file_close(H5F_t *f)
|
||||
{
|
||||
herr_t ret_value = SUCCEED; /* Return value */
|
||||
|
||||
@ -1602,7 +1464,7 @@ H5AC_prep_for_file_close(H5F_t *f, hid_t dxpl_id)
|
||||
HDassert(f->shared);
|
||||
HDassert(f->shared->cache);
|
||||
|
||||
if(H5C_prep_for_file_close(f, dxpl_id) < 0)
|
||||
if(H5C_prep_for_file_close(f) < 0)
|
||||
HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "cache prep for file close failed")
|
||||
|
||||
done:
|
||||
@ -1701,8 +1563,8 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
void *
|
||||
H5AC_protect(H5F_t *f, hid_t dxpl_id, const H5AC_class_t *type, haddr_t addr,
|
||||
void *udata, unsigned flags)
|
||||
H5AC_protect(H5F_t *f, const H5AC_class_t *type, haddr_t addr, void *udata,
|
||||
unsigned flags)
|
||||
{
|
||||
#if H5AC__TRACE_FILE_ENABLED
|
||||
char trace[128] = "";
|
||||
@ -1755,11 +1617,11 @@ H5AC_protect(H5F_t *f, hid_t dxpl_id, const H5AC_class_t *type, haddr_t addr,
|
||||
#endif /* H5AC__TRACE_FILE_ENABLED */
|
||||
|
||||
#if H5AC_DO_TAGGING_SANITY_CHECKS
|
||||
if(!H5C_get_ignore_tags(f->shared->cache) && H5AC__verify_tag(dxpl_id, type) < 0)
|
||||
if(!H5C_get_ignore_tags(f->shared->cache) && H5AC__verify_tag(type) < 0)
|
||||
HGOTO_ERROR(H5E_CACHE, H5E_CANTTAG, NULL, "Bad tag value")
|
||||
#endif /* H5AC_DO_TAGGING_SANITY_CHECKS */
|
||||
|
||||
if(NULL == (thing = H5C_protect(f, dxpl_id, type, addr, udata, flags)))
|
||||
if(NULL == (thing = H5C_protect(f, type, addr, udata, flags)))
|
||||
HGOTO_ERROR(H5E_CACHE, H5E_CANTPROTECT, NULL, "H5C_protect() failed")
|
||||
|
||||
#if H5AC__TRACE_FILE_ENABLED
|
||||
@ -2039,8 +1901,8 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
herr_t
|
||||
H5AC_unprotect(H5F_t *f, hid_t dxpl_id, const H5AC_class_t *type, haddr_t addr,
|
||||
void *thing, unsigned flags)
|
||||
H5AC_unprotect(H5F_t *f, const H5AC_class_t *type, haddr_t addr, void *thing,
|
||||
unsigned flags)
|
||||
{
|
||||
#if H5AC__TRACE_FILE_ENABLED
|
||||
char trace[128] = "";
|
||||
@ -2111,13 +1973,13 @@ H5AC_unprotect(H5F_t *f, hid_t dxpl_id, const H5AC_class_t *type, haddr_t addr,
|
||||
} /* end if */
|
||||
#endif /* H5_HAVE_PARALLEL */
|
||||
|
||||
if(H5C_unprotect(f, dxpl_id, addr, thing, flags) < 0)
|
||||
if(H5C_unprotect(f, addr, thing, flags) < 0)
|
||||
HGOTO_ERROR(H5E_CACHE, H5E_CANTUNPROTECT, FAIL, "H5C_unprotect() failed")
|
||||
|
||||
#ifdef H5_HAVE_PARALLEL
|
||||
/* Check if we should try to flush */
|
||||
if((aux_ptr != NULL) && (aux_ptr->dirty_bytes >= aux_ptr->dirty_bytes_threshold))
|
||||
if(H5AC__run_sync_point(f, dxpl_id, H5AC_SYNC_POINT_OP__FLUSH_TO_MIN_CLEAN) < 0)
|
||||
if(H5AC__run_sync_point(f, H5AC_SYNC_POINT_OP__FLUSH_TO_MIN_CLEAN) < 0)
|
||||
HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "Can't run sync point")
|
||||
#endif /* H5_HAVE_PARALLEL */
|
||||
|
||||
@ -2765,33 +2627,19 @@ done:
|
||||
*
|
||||
*------------------------------------------------------------------------------
|
||||
*/
|
||||
herr_t
|
||||
H5AC_tag(hid_t dxpl_id, haddr_t metadata_tag, haddr_t *prev_tag)
|
||||
void
|
||||
H5AC_tag(haddr_t metadata_tag, haddr_t *prev_tag)
|
||||
{
|
||||
H5P_genplist_t *dxpl; /* Dataset transfer property list */
|
||||
herr_t ret_value = SUCCEED; /* Return value */
|
||||
|
||||
FUNC_ENTER_NOAPI(FAIL)
|
||||
|
||||
/* Check Arguments */
|
||||
if(NULL == (dxpl = (H5P_genplist_t *)H5I_object_verify(dxpl_id, H5I_GENPROP_LST)))
|
||||
HGOTO_ERROR(H5E_CACHE, H5E_BADTYPE, FAIL, "not a property list")
|
||||
FUNC_ENTER_NOAPI_NOINIT_NOERR
|
||||
|
||||
/* Get the current tag value and return that (if prev_tag is NOT null) */
|
||||
if(prev_tag) {
|
||||
haddr_t tag; /* Tag value */
|
||||
if(prev_tag)
|
||||
*prev_tag = H5CX_get_tag();
|
||||
|
||||
if((H5P_get(dxpl, H5AC_TAG_NAME, &tag)) < 0)
|
||||
HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "unable to query dxpl")
|
||||
*prev_tag = tag;
|
||||
} /* end if */
|
||||
/* Set the provided tag */
|
||||
H5CX_set_tag(metadata_tag);
|
||||
|
||||
/* Set the provided tag in the dxpl_id. */
|
||||
if(H5P_set(dxpl, H5AC_TAG_NAME, &metadata_tag) < 0)
|
||||
HGOTO_ERROR(H5E_CACHE, H5E_CANTSET, FAIL, "can't set tag in dxpl")
|
||||
|
||||
done:
|
||||
FUNC_LEAVE_NOAPI(ret_value)
|
||||
FUNC_LEAVE_NOAPI_VOID
|
||||
} /* H5AC_tag */
|
||||
|
||||
|
||||
@ -2843,7 +2691,7 @@ done:
|
||||
*------------------------------------------------------------------------------
|
||||
*/
|
||||
herr_t
|
||||
H5AC_flush_tagged_metadata(H5F_t * f, haddr_t metadata_tag, hid_t dxpl_id)
|
||||
H5AC_flush_tagged_metadata(H5F_t *f, haddr_t metadata_tag)
|
||||
{
|
||||
/* Variable Declarations */
|
||||
herr_t ret_value = SUCCEED;
|
||||
@ -2856,7 +2704,7 @@ H5AC_flush_tagged_metadata(H5F_t * f, haddr_t metadata_tag, hid_t dxpl_id)
|
||||
HDassert(f->shared);
|
||||
|
||||
/* Call cache level function to flush metadata entries with specified tag */
|
||||
if(H5C_flush_tagged_entries(f, dxpl_id, metadata_tag) < 0)
|
||||
if(H5C_flush_tagged_entries(f, metadata_tag) < 0)
|
||||
HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "Cannot flush metadata")
|
||||
|
||||
done:
|
||||
@ -2878,7 +2726,7 @@ done:
|
||||
*------------------------------------------------------------------------------
|
||||
*/
|
||||
herr_t
|
||||
H5AC_evict_tagged_metadata(H5F_t * f, haddr_t metadata_tag, hbool_t match_global, hid_t dxpl_id)
|
||||
H5AC_evict_tagged_metadata(H5F_t *f, haddr_t metadata_tag, hbool_t match_global)
|
||||
{
|
||||
/* Variable Declarations */
|
||||
herr_t ret_value = SUCCEED;
|
||||
@ -2891,7 +2739,7 @@ H5AC_evict_tagged_metadata(H5F_t * f, haddr_t metadata_tag, hbool_t match_global
|
||||
HDassert(f->shared);
|
||||
|
||||
/* Call cache level function to evict metadata entries with specified tag */
|
||||
if(H5C_evict_tagged_entries(f, dxpl_id, metadata_tag, match_global) < 0)
|
||||
if(H5C_evict_tagged_entries(f, metadata_tag, match_global) < 0)
|
||||
HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "Cannot evict metadata")
|
||||
|
||||
done:
|
||||
@ -2912,7 +2760,7 @@ done:
|
||||
*------------------------------------------------------------------------------
|
||||
*/
|
||||
herr_t
|
||||
H5AC_expunge_tag_type_metadata(H5F_t *f, hid_t dxpl_id, haddr_t tag, int type_id, unsigned flags)
|
||||
H5AC_expunge_tag_type_metadata(H5F_t *f, haddr_t tag, int type_id, unsigned flags)
|
||||
{
|
||||
/* Variable Declarations */
|
||||
herr_t ret_value = SUCCEED;
|
||||
@ -2925,7 +2773,7 @@ H5AC_expunge_tag_type_metadata(H5F_t *f, hid_t dxpl_id, haddr_t tag, int type_id
|
||||
HDassert(f->shared);
|
||||
|
||||
/* Call cache level function to expunge entries with specified tag and type id */
|
||||
if(H5C_expunge_tag_type_metadata(f, dxpl_id, tag, type_id, flags)<0)
|
||||
if(H5C_expunge_tag_type_metadata(f, tag, type_id, flags)<0)
|
||||
HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "Cannot expunge tagged type entries")
|
||||
|
||||
done:
|
||||
@ -3019,21 +2867,15 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static herr_t
|
||||
H5AC__verify_tag(hid_t dxpl_id, const H5AC_class_t *type)
|
||||
H5AC__verify_tag(const H5AC_class_t *type)
|
||||
{
|
||||
H5P_genplist_t *dxpl; /* DXPL for operation */
|
||||
haddr_t tag; /* Entry tag to validate */
|
||||
herr_t ret_value = SUCCEED; /* Return value */
|
||||
|
||||
FUNC_ENTER_STATIC
|
||||
|
||||
/* Get the dataset transfer property list */
|
||||
if(NULL == (dxpl = (H5P_genplist_t *)H5I_object_verify(dxpl_id, H5I_GENPROP_LST)))
|
||||
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a property list")
|
||||
|
||||
/* Get the tag from the DXPL */
|
||||
if((H5P_get(dxpl, H5AC_TAG_NAME, &tag)) < 0)
|
||||
HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "unable to query property value")
|
||||
/* Get the current tag */
|
||||
tag = H5CX_get_tag();
|
||||
|
||||
/* Verify legal tag value */
|
||||
if(H5C_verify_tag(type->id, tag) < 0)
|
||||
@ -3095,65 +2937,21 @@ done:
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
herr_t
|
||||
H5AC_set_ring(hid_t dxpl_id, H5AC_ring_t ring, H5P_genplist_t **dxpl,
|
||||
H5AC_ring_t *orig_ring)
|
||||
void
|
||||
H5AC_set_ring(H5AC_ring_t ring, H5AC_ring_t *orig_ring)
|
||||
{
|
||||
herr_t ret_value = SUCCEED; /* return value */
|
||||
FUNC_ENTER_NOAPI_NOINIT_NOERR
|
||||
|
||||
FUNC_ENTER_NOAPI(FAIL)
|
||||
/* Get the current ring value and return that (if orig_ring is NOT null) */
|
||||
if(orig_ring)
|
||||
*orig_ring = H5CX_get_ring();
|
||||
|
||||
/* Sanity checks */
|
||||
HDassert(dxpl);
|
||||
HDassert(orig_ring);
|
||||
/* Set the provided ring */
|
||||
H5CX_set_ring(ring);
|
||||
|
||||
/* Set the ring type in the DXPL */
|
||||
if(NULL == ((*dxpl) = (H5P_genplist_t *)H5I_object_verify(dxpl_id, H5I_GENPROP_LST)))
|
||||
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a property list")
|
||||
if((H5P_get((*dxpl), H5AC_RING_NAME, orig_ring)) < 0)
|
||||
HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "unable to get original ring value")
|
||||
if((H5P_set((*dxpl), H5AC_RING_NAME, &ring)) < 0)
|
||||
HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "unable to set ring value")
|
||||
|
||||
done:
|
||||
FUNC_LEAVE_NOAPI(ret_value)
|
||||
FUNC_LEAVE_NOAPI_VOID
|
||||
} /* end H5AC_set_ring() */
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5AC_reset_ring
|
||||
*
|
||||
* Purpose: Routine to reset the original ring on a DXPL (after passing
|
||||
* through to the metadata cache).
|
||||
*
|
||||
* Return: Success: Non-negative
|
||||
* Failure: Negative
|
||||
*
|
||||
* Programmer: Quincey Koziol
|
||||
* Tuesday, September 8, 2015
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
herr_t
|
||||
H5AC_reset_ring(H5P_genplist_t *dxpl, H5AC_ring_t orig_ring)
|
||||
{
|
||||
herr_t ret_value = SUCCEED; /* return value */
|
||||
|
||||
FUNC_ENTER_NOAPI(FAIL)
|
||||
|
||||
/* Reset the ring in the DXPL, if it's been changed */
|
||||
if(orig_ring) {
|
||||
/* Sanity check */
|
||||
HDassert(dxpl);
|
||||
|
||||
if((H5P_set(dxpl, H5AC_RING_NAME, &orig_ring)) < 0)
|
||||
HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "unable to set property value")
|
||||
} /* end if */
|
||||
|
||||
done:
|
||||
FUNC_LEAVE_NOAPI(ret_value)
|
||||
} /* end H5AC_reset_ring() */
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5AC_unsettle_entry_ring()
|
||||
|
@ -37,6 +37,7 @@
|
||||
#include "H5private.h" /* Generic Functions */
|
||||
#include "H5ACpkg.h" /* Metadata cache */
|
||||
#include "H5Cprivate.h" /* Cache */
|
||||
#include "H5CXprivate.h" /* API Contexts */
|
||||
#include "H5Eprivate.h" /* Error handling */
|
||||
#include "H5Fpkg.h" /* Files */
|
||||
#include "H5MMprivate.h" /* Memory management */
|
||||
@ -94,20 +95,19 @@ static herr_t H5AC__construct_candidate_list(H5AC_t *cache_ptr,
|
||||
H5AC_aux_t *aux_ptr, int sync_point_op);
|
||||
static herr_t H5AC__copy_candidate_list_to_buffer(const H5AC_t *cache_ptr,
|
||||
unsigned *num_entries_ptr, haddr_t **haddr_buf_ptr_ptr);
|
||||
static herr_t H5AC__propagate_and_apply_candidate_list(H5F_t *f, hid_t dxpl_id);
|
||||
static herr_t H5AC__propagate_flushed_and_still_clean_entries_list(H5F_t *f,
|
||||
hid_t dxpl_id);
|
||||
static herr_t H5AC__propagate_and_apply_candidate_list(H5F_t *f);
|
||||
static herr_t H5AC__propagate_flushed_and_still_clean_entries_list(H5F_t *f);
|
||||
static herr_t H5AC__receive_haddr_list(MPI_Comm mpi_comm, unsigned *num_entries_ptr,
|
||||
haddr_t **haddr_buf_ptr_ptr);
|
||||
static herr_t H5AC__receive_candidate_list(const H5AC_t *cache_ptr,
|
||||
unsigned *num_entries_ptr, haddr_t **haddr_buf_ptr_ptr);
|
||||
static herr_t H5AC__receive_and_apply_clean_list(H5F_t *f, hid_t dxpl_id);
|
||||
static herr_t H5AC__receive_and_apply_clean_list(H5F_t *f);
|
||||
static herr_t H5AC__tidy_cache_0_lists(H5AC_t *cache_ptr, unsigned num_candidates,
|
||||
haddr_t *candidates_list_ptr);
|
||||
static herr_t H5AC__rsp__dist_md_write__flush(H5F_t *f, hid_t dxpl_id);
|
||||
static herr_t H5AC__rsp__dist_md_write__flush_to_min_clean(H5F_t *f, hid_t dxpl_id);
|
||||
static herr_t H5AC__rsp__p0_only__flush(H5F_t *f, hid_t dxpl_id);
|
||||
static herr_t H5AC__rsp__p0_only__flush_to_min_clean(H5F_t *f, hid_t dxpl_id);
|
||||
static herr_t H5AC__rsp__dist_md_write__flush(H5F_t *f);
|
||||
static herr_t H5AC__rsp__dist_md_write__flush_to_min_clean(H5F_t *f);
|
||||
static herr_t H5AC__rsp__p0_only__flush(H5F_t *f);
|
||||
static herr_t H5AC__rsp__p0_only__flush_to_min_clean(H5F_t *f);
|
||||
|
||||
|
||||
/*********************/
|
||||
@ -1226,7 +1226,7 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static herr_t
|
||||
H5AC__propagate_and_apply_candidate_list(H5F_t *f, hid_t dxpl_id)
|
||||
H5AC__propagate_and_apply_candidate_list(H5F_t *f)
|
||||
{
|
||||
H5AC_t * cache_ptr;
|
||||
H5AC_aux_t * aux_ptr;
|
||||
@ -1275,7 +1275,7 @@ H5AC__propagate_and_apply_candidate_list(H5F_t *f, hid_t dxpl_id)
|
||||
aux_ptr->write_permitted = TRUE;
|
||||
|
||||
/* Apply the candidate list */
|
||||
result = H5C_apply_candidate_list(f, dxpl_id, cache_ptr, num_candidates,
|
||||
result = H5C_apply_candidate_list(f, cache_ptr, num_candidates,
|
||||
candidates_list_ptr, aux_ptr->mpi_rank, aux_ptr->mpi_size);
|
||||
|
||||
/* Disable writes again */
|
||||
@ -1393,7 +1393,7 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static herr_t
|
||||
H5AC__propagate_flushed_and_still_clean_entries_list(H5F_t *f, hid_t dxpl_id)
|
||||
H5AC__propagate_flushed_and_still_clean_entries_list(H5F_t *f)
|
||||
{
|
||||
H5AC_t * cache_ptr;
|
||||
H5AC_aux_t * aux_ptr;
|
||||
@ -1415,10 +1415,9 @@ H5AC__propagate_flushed_and_still_clean_entries_list(H5F_t *f, hid_t dxpl_id)
|
||||
HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Can't broadcast clean slist.")
|
||||
HDassert(H5SL_count(aux_ptr->c_slist_ptr) == 0);
|
||||
} /* end if */
|
||||
else {
|
||||
if(H5AC__receive_and_apply_clean_list(f, dxpl_id) < 0)
|
||||
else
|
||||
if(H5AC__receive_and_apply_clean_list(f) < 0)
|
||||
HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Can't receive and/or process clean slist broadcast.")
|
||||
} /* end else */
|
||||
|
||||
done:
|
||||
FUNC_LEAVE_NOAPI(ret_value)
|
||||
@ -1427,7 +1426,7 @@ done:
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
*
|
||||
* Function: H5AC_receive_haddr_list()
|
||||
* Function: H5AC__receive_haddr_list()
|
||||
*
|
||||
* Purpose: Receive the list of entry addresses from process 0,
|
||||
* and return it in a buffer pointed to by *haddr_buf_ptr_ptr.
|
||||
@ -1494,7 +1493,7 @@ done:
|
||||
haddr_buf_ptr = (haddr_t *)H5MM_xfree((void *)haddr_buf_ptr);
|
||||
|
||||
FUNC_LEAVE_NOAPI(ret_value)
|
||||
} /* H5AC_receive_haddr_list() */
|
||||
} /* H5AC__receive_haddr_list() */
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
@ -1516,7 +1515,7 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static herr_t
|
||||
H5AC__receive_and_apply_clean_list(H5F_t *f, hid_t dxpl_id)
|
||||
H5AC__receive_and_apply_clean_list(H5F_t *f)
|
||||
{
|
||||
H5AC_t * cache_ptr;
|
||||
H5AC_aux_t * aux_ptr;
|
||||
@ -1541,7 +1540,7 @@ H5AC__receive_and_apply_clean_list(H5F_t *f, hid_t dxpl_id)
|
||||
|
||||
if(num_entries > 0)
|
||||
/* mark the indicated entries as clean */
|
||||
if(H5C_mark_entries_as_clean(f, dxpl_id, num_entries, haddr_buf_ptr) < 0)
|
||||
if(H5C_mark_entries_as_clean(f, num_entries, haddr_buf_ptr) < 0)
|
||||
HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Can't mark entries clean.")
|
||||
|
||||
/* if it is defined, call the sync point done callback. Note
|
||||
@ -1659,7 +1658,7 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static herr_t
|
||||
H5AC__rsp__dist_md_write__flush(H5F_t *f, hid_t dxpl_id)
|
||||
H5AC__rsp__dist_md_write__flush(H5F_t *f)
|
||||
{
|
||||
H5AC_t * cache_ptr;
|
||||
H5AC_aux_t * aux_ptr;
|
||||
@ -1694,15 +1693,20 @@ H5AC__rsp__dist_md_write__flush(H5F_t *f, hid_t dxpl_id)
|
||||
if(H5AC__copy_candidate_list_to_buffer(cache_ptr, &num_entries, &haddr_buf_ptr) < 0)
|
||||
HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "Can't construct candidate buffer.")
|
||||
|
||||
/* initial sync point barrier */
|
||||
if(MPI_SUCCESS != (mpi_result = MPI_Barrier(aux_ptr->mpi_comm)))
|
||||
HMPI_GOTO_ERROR(FAIL, "MPI_Barrier failed", mpi_result)
|
||||
/* Initial sync point barrier
|
||||
*
|
||||
* 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)))
|
||||
HMPI_GOTO_ERROR(FAIL, "MPI_Barrier failed", mpi_result)
|
||||
|
||||
/* Enable writes during this operation */
|
||||
aux_ptr->write_permitted = TRUE;
|
||||
|
||||
/* Apply the candidate list */
|
||||
result = H5C_apply_candidate_list(f, dxpl_id, cache_ptr, num_entries,
|
||||
result = H5C_apply_candidate_list(f, cache_ptr, num_entries,
|
||||
haddr_buf_ptr, aux_ptr->mpi_rank, aux_ptr->mpi_size);
|
||||
|
||||
/* Disable writes again */
|
||||
@ -1801,7 +1805,7 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static herr_t
|
||||
H5AC__rsp__dist_md_write__flush_to_min_clean(H5F_t *f, hid_t dxpl_id)
|
||||
H5AC__rsp__dist_md_write__flush_to_min_clean(H5F_t *f)
|
||||
{
|
||||
H5AC_t * cache_ptr;
|
||||
H5AC_aux_t * aux_ptr;
|
||||
@ -1830,7 +1834,7 @@ H5AC__rsp__dist_md_write__flush_to_min_clean(H5F_t *f, hid_t dxpl_id)
|
||||
HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "Can't construct candidate list.")
|
||||
|
||||
/* propagate and apply candidate list -- all processes */
|
||||
if(H5AC__propagate_and_apply_candidate_list(f, dxpl_id) < 0)
|
||||
if(H5AC__propagate_and_apply_candidate_list(f) < 0)
|
||||
HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "Can't propagate and apply candidate list.")
|
||||
} /* evictions enabled */
|
||||
|
||||
@ -1876,7 +1880,7 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static herr_t
|
||||
H5AC__rsp__p0_only__flush(H5F_t *f, hid_t dxpl_id)
|
||||
H5AC__rsp__p0_only__flush(H5F_t *f)
|
||||
{
|
||||
H5AC_t * cache_ptr;
|
||||
H5AC_aux_t * aux_ptr;
|
||||
@ -1894,12 +1898,16 @@ H5AC__rsp__p0_only__flush(H5F_t *f, hid_t dxpl_id)
|
||||
HDassert(aux_ptr->magic == H5AC__H5AC_AUX_T_MAGIC);
|
||||
HDassert(aux_ptr->metadata_write_strategy == H5AC_METADATA_WRITE_STRATEGY__PROCESS_0_ONLY);
|
||||
|
||||
/* to prevent "messages from the future" we must
|
||||
/* To prevent "messages from the future" we must
|
||||
* synchronize all processes before we start the flush.
|
||||
* Hence the following barrier.
|
||||
*
|
||||
* 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(MPI_SUCCESS != (mpi_result = MPI_Barrier(aux_ptr->mpi_comm)))
|
||||
HMPI_GOTO_ERROR(FAIL, "MPI_Barrier failed", mpi_result)
|
||||
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) {
|
||||
@ -1909,7 +1917,7 @@ H5AC__rsp__p0_only__flush(H5F_t *f, hid_t dxpl_id)
|
||||
aux_ptr->write_permitted = TRUE;
|
||||
|
||||
/* Flush the cache */
|
||||
result = H5C_flush_cache(f, dxpl_id, H5AC__NO_FLAGS_SET);
|
||||
result = H5C_flush_cache(f, H5AC__NO_FLAGS_SET);
|
||||
|
||||
/* Disable writes again */
|
||||
aux_ptr->write_permitted = FALSE;
|
||||
@ -1919,7 +1927,7 @@ H5AC__rsp__p0_only__flush(H5F_t *f, hid_t dxpl_id)
|
||||
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
|
||||
* enforce POSIX semantics on the server that pretends to be a
|
||||
* file system in our parallel tests.
|
||||
*/
|
||||
if(aux_ptr->write_done)
|
||||
@ -1927,7 +1935,7 @@ H5AC__rsp__p0_only__flush(H5F_t *f, hid_t dxpl_id)
|
||||
} /* end if */
|
||||
|
||||
/* Propagate cleaned entries to other ranks. */
|
||||
if(H5AC__propagate_flushed_and_still_clean_entries_list(f, dxpl_id) < 0)
|
||||
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:
|
||||
@ -1978,7 +1986,7 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static herr_t
|
||||
H5AC__rsp__p0_only__flush_to_min_clean(H5F_t *f, hid_t dxpl_id)
|
||||
H5AC__rsp__p0_only__flush_to_min_clean(H5F_t *f)
|
||||
{
|
||||
H5AC_t * cache_ptr;
|
||||
H5AC_aux_t * aux_ptr;
|
||||
@ -2030,7 +2038,7 @@ H5AC__rsp__p0_only__flush_to_min_clean(H5F_t *f, hid_t dxpl_id)
|
||||
aux_ptr->write_permitted = TRUE;
|
||||
|
||||
/* Flush the cache */
|
||||
result = H5C_flush_to_min_clean(f, dxpl_id);
|
||||
result = H5C_flush_to_min_clean(f);
|
||||
|
||||
/* Disable writes again */
|
||||
aux_ptr->write_permitted = FALSE;
|
||||
@ -2047,7 +2055,7 @@ H5AC__rsp__p0_only__flush_to_min_clean(H5F_t *f, hid_t dxpl_id)
|
||||
(aux_ptr->write_done)();
|
||||
} /* end if */
|
||||
|
||||
if(H5AC__propagate_flushed_and_still_clean_entries_list(f, dxpl_id) < 0)
|
||||
if(H5AC__propagate_flushed_and_still_clean_entries_list(f) < 0)
|
||||
HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "Can't propagate clean entries list.")
|
||||
} /* end if */
|
||||
|
||||
@ -2088,7 +2096,7 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
herr_t
|
||||
H5AC__run_sync_point(H5F_t *f, hid_t dxpl_id, int sync_point_op)
|
||||
H5AC__run_sync_point(H5F_t *f, int sync_point_op)
|
||||
{
|
||||
H5AC_t * cache_ptr;
|
||||
H5AC_aux_t * aux_ptr;
|
||||
@ -2130,12 +2138,12 @@ HDfprintf(stdout, "%d:H5AC_propagate...:%u: (u/uu/i/iu/r/ru) = %zu/%u/%zu/%u/%zu
|
||||
case H5AC_METADATA_WRITE_STRATEGY__PROCESS_0_ONLY:
|
||||
switch(sync_point_op) {
|
||||
case H5AC_SYNC_POINT_OP__FLUSH_TO_MIN_CLEAN:
|
||||
if(H5AC__rsp__p0_only__flush_to_min_clean(f, dxpl_id) < 0)
|
||||
if(H5AC__rsp__p0_only__flush_to_min_clean(f) < 0)
|
||||
HGOTO_ERROR(H5E_CACHE, H5E_CANTGET, FAIL, "H5AC__rsp__p0_only__flush_to_min_clean() failed.")
|
||||
break;
|
||||
|
||||
case H5AC_SYNC_POINT_OP__FLUSH_CACHE:
|
||||
if(H5AC__rsp__p0_only__flush(f, dxpl_id) < 0)
|
||||
if(H5AC__rsp__p0_only__flush(f) < 0)
|
||||
HGOTO_ERROR(H5E_CACHE, H5E_CANTGET, FAIL, "H5AC__rsp__p0_only__flush() failed.")
|
||||
break;
|
||||
|
||||
@ -2148,12 +2156,12 @@ HDfprintf(stdout, "%d:H5AC_propagate...:%u: (u/uu/i/iu/r/ru) = %zu/%u/%zu/%u/%zu
|
||||
case H5AC_METADATA_WRITE_STRATEGY__DISTRIBUTED:
|
||||
switch(sync_point_op) {
|
||||
case H5AC_SYNC_POINT_OP__FLUSH_TO_MIN_CLEAN:
|
||||
if(H5AC__rsp__dist_md_write__flush_to_min_clean(f, dxpl_id) < 0)
|
||||
if(H5AC__rsp__dist_md_write__flush_to_min_clean(f) < 0)
|
||||
HGOTO_ERROR(H5E_CACHE, H5E_CANTGET, FAIL, "H5AC__rsp__dist_md_write__flush_to_min_clean() failed.")
|
||||
break;
|
||||
|
||||
case H5AC_SYNC_POINT_OP__FLUSH_CACHE:
|
||||
if(H5AC__rsp__dist_md_write__flush(f, dxpl_id) < 0)
|
||||
if(H5AC__rsp__dist_md_write__flush(f) < 0)
|
||||
HGOTO_ERROR(H5E_CACHE, H5E_CANTGET, FAIL, "H5AC__rsp__dist_md_write__flush() failed.")
|
||||
break;
|
||||
|
||||
@ -2284,7 +2292,7 @@ H5AC__tidy_cache_0_lists(H5AC_t *cache_ptr, unsigned num_candidates,
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
herr_t
|
||||
H5AC__flush_entries(H5F_t *f, hid_t dxpl_id)
|
||||
H5AC__flush_entries(H5F_t *f)
|
||||
{
|
||||
herr_t ret_value = SUCCEED; /* Return value */
|
||||
|
||||
@ -2296,7 +2304,7 @@ H5AC__flush_entries(H5F_t *f, hid_t dxpl_id)
|
||||
|
||||
/* Check if we have >1 ranks */
|
||||
if(H5C_get_aux_ptr(f->shared->cache))
|
||||
if(H5AC__run_sync_point(f, dxpl_id, H5AC_SYNC_POINT_OP__FLUSH_CACHE) < 0)
|
||||
if(H5AC__run_sync_point(f, H5AC_SYNC_POINT_OP__FLUSH_CACHE) < 0)
|
||||
HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "Can't run sync point.")
|
||||
|
||||
done:
|
||||
|
@ -425,8 +425,8 @@ H5_DLL herr_t H5AC__log_flushed_entry(H5C_t *cache_ptr, haddr_t addr,
|
||||
H5_DLL herr_t H5AC__log_inserted_entry(const H5AC_info_t *entry_ptr);
|
||||
H5_DLL herr_t H5AC__log_moved_entry(const H5F_t *f, haddr_t old_addr,
|
||||
haddr_t new_addr);
|
||||
H5_DLL herr_t H5AC__flush_entries(H5F_t *f, hid_t dxpl_id);
|
||||
H5_DLL herr_t H5AC__run_sync_point(H5F_t *f, hid_t dxpl_id, int sync_point_op);
|
||||
H5_DLL herr_t H5AC__flush_entries(H5F_t *f);
|
||||
H5_DLL herr_t H5AC__run_sync_point(H5F_t *f, int sync_point_op);
|
||||
H5_DLL herr_t H5AC__set_sync_point_done_callback(H5C_t *cache_ptr,
|
||||
void (*sync_point_done)(unsigned num_writes, haddr_t *written_entries_tbl));
|
||||
H5_DLL herr_t H5AC__set_write_done_callback(H5C_t * cache_ptr,
|
||||
|
@ -50,11 +50,6 @@
|
||||
#define H5AC__SOHM_TAG (haddr_t)5
|
||||
#define H5AC__GLOBALHEAP_TAG (haddr_t)6
|
||||
|
||||
/* Definitions for cache "tag" property */
|
||||
#define H5AC_TAG_NAME "H5AC_tag"
|
||||
#define H5AC_TAG_SIZE sizeof(haddr_t)
|
||||
#define H5AC_TAG_DEF (H5AC__INVALID_TAG)
|
||||
|
||||
/* Types of metadata objects cached */
|
||||
typedef enum {
|
||||
H5AC_BT_ID = 0, /* ( 0) B-tree nodes */
|
||||
@ -230,22 +225,6 @@ typedef struct H5AC_proxy_entry_t {
|
||||
/* (Note that this currently duplicates some cache functionality) */
|
||||
} H5AC_proxy_entry_t;
|
||||
|
||||
/* Name of property for ring info in DXPL */
|
||||
#define H5AC_RING_NAME "H5AC_ring_type"
|
||||
|
||||
/* Dataset transfer property lists for metadata calls */
|
||||
H5_DLLVAR hid_t H5AC_ind_read_dxpl_id;
|
||||
#ifdef H5_HAVE_PARALLEL
|
||||
H5_DLLVAR hid_t H5AC_coll_read_dxpl_id;
|
||||
#endif /* H5_HAVE_PARALLEL */
|
||||
|
||||
/* DXPL to be used in operations that will not result in I/O calls */
|
||||
H5_DLLVAR hid_t H5AC_noio_dxpl_id;
|
||||
|
||||
/* DXPL to be used for raw data I/O operations when one is not
|
||||
provided by the user (fill values in H5Dcreate) */
|
||||
H5_DLLVAR hid_t H5AC_rawdata_dxpl_id;
|
||||
|
||||
/* Default cache configuration. */
|
||||
#define H5AC__DEFAULT_METADATA_WRITE_STRATEGY \
|
||||
H5AC_METADATA_WRITE_STRATEGY__DISTRIBUTED
|
||||
@ -410,29 +389,29 @@ H5_DLL herr_t H5AC_create(const H5F_t *f, H5AC_cache_config_t *config_ptr,
|
||||
H5AC_cache_image_config_t * image_config_ptr);
|
||||
H5_DLL herr_t H5AC_get_entry_status(const H5F_t *f, haddr_t addr,
|
||||
unsigned *status_ptr);
|
||||
H5_DLL herr_t H5AC_insert_entry(H5F_t *f, hid_t dxpl_id, const H5AC_class_t *type,
|
||||
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, hid_t dxpl_id);
|
||||
H5_DLL herr_t H5AC_prep_for_file_close(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, hid_t dxpl_id, const H5AC_class_t *type,
|
||||
haddr_t addr, void *udata, unsigned flags);
|
||||
H5_DLL void * H5AC_protect(H5F_t *f, const H5AC_class_t *type, haddr_t addr,
|
||||
void *udata, unsigned flags);
|
||||
H5_DLL herr_t H5AC_resize_entry(void *thing, size_t new_size);
|
||||
H5_DLL herr_t H5AC_unpin_entry(void *thing);
|
||||
H5_DLL herr_t H5AC_destroy_flush_dependency(void *parent_thing, void *child_thing);
|
||||
H5_DLL herr_t H5AC_unprotect(H5F_t *f, hid_t dxpl_id, const H5AC_class_t *type,
|
||||
haddr_t addr, void *thing, unsigned flags);
|
||||
H5_DLL herr_t H5AC_flush(H5F_t *f, hid_t dxpl_id);
|
||||
H5_DLL herr_t H5AC_unprotect(H5F_t *f, const H5AC_class_t *type, haddr_t addr,
|
||||
void *thing, unsigned flags);
|
||||
H5_DLL herr_t H5AC_flush(H5F_t *f);
|
||||
H5_DLL herr_t H5AC_mark_entry_dirty(void *thing);
|
||||
H5_DLL herr_t H5AC_mark_entry_clean(void *thing);
|
||||
H5_DLL herr_t H5AC_mark_entry_unserialized(void *thing);
|
||||
H5_DLL herr_t H5AC_mark_entry_serialized(void *thing);
|
||||
H5_DLL herr_t H5AC_move_entry(H5F_t *f, const H5AC_class_t *type,
|
||||
haddr_t old_addr, haddr_t new_addr, hid_t dxpl_id);
|
||||
H5_DLL herr_t H5AC_dest(H5F_t *f, hid_t dxpl_id);
|
||||
H5_DLL herr_t H5AC_evict(H5F_t *f, hid_t dxpl_id);
|
||||
H5_DLL herr_t H5AC_expunge_entry(H5F_t *f, hid_t dxpl_id,
|
||||
const H5AC_class_t *type, haddr_t addr, unsigned flags);
|
||||
haddr_t old_addr, haddr_t new_addr);
|
||||
H5_DLL herr_t H5AC_dest(H5F_t *f);
|
||||
H5_DLL herr_t H5AC_evict(H5F_t *f);
|
||||
H5_DLL herr_t H5AC_expunge_entry(H5F_t *f, const H5AC_class_t *type,
|
||||
haddr_t addr, unsigned flags);
|
||||
H5_DLL herr_t H5AC_remove_entry(void *entry);
|
||||
H5_DLL herr_t H5AC_get_cache_auto_resize_config(const H5AC_t * cache_ptr,
|
||||
H5AC_cache_config_t *config_ptr);
|
||||
@ -449,24 +428,23 @@ H5_DLL herr_t H5AC_load_cache_image_on_next_protect(H5F_t *f, haddr_t addr,
|
||||
hsize_t len, hbool_t rw);
|
||||
H5_DLL herr_t H5AC_validate_cache_image_config(H5AC_cache_image_config_t *config_ptr);
|
||||
H5_DLL hbool_t H5AC_cache_image_pending(const H5F_t *f);
|
||||
H5_DLL herr_t H5AC_force_cache_image_load(H5F_t * f, hid_t dxpl_id);
|
||||
H5_DLL herr_t H5AC_force_cache_image_load(H5F_t * f);
|
||||
H5_DLL herr_t H5AC_get_mdc_image_info(H5AC_t *cache_ptr, haddr_t *image_addr,
|
||||
hsize_t *image_len);
|
||||
|
||||
/* Tag & Ring routines */
|
||||
H5_DLL herr_t H5AC_tag(hid_t dxpl_id, haddr_t metadata_tag, haddr_t *prev_tag);
|
||||
H5_DLL herr_t H5AC_flush_tagged_metadata(H5F_t * f, haddr_t metadata_tag, hid_t dxpl_id);
|
||||
H5_DLL herr_t H5AC_evict_tagged_metadata(H5F_t * f, haddr_t metadata_tag, hbool_t match_global, hid_t dxpl_id);
|
||||
H5_DLL void H5AC_tag(haddr_t metadata_tag, haddr_t *prev_tag);
|
||||
H5_DLL herr_t H5AC_flush_tagged_metadata(H5F_t *f, haddr_t metadata_tag);
|
||||
H5_DLL herr_t H5AC_evict_tagged_metadata(H5F_t * f, haddr_t metadata_tag, hbool_t match_global);
|
||||
H5_DLL herr_t H5AC_retag_copied_metadata(const H5F_t *f, haddr_t metadata_tag);
|
||||
H5_DLL herr_t H5AC_ignore_tags(const H5F_t *f);
|
||||
H5_DLL herr_t H5AC_cork(H5F_t *f, haddr_t obj_addr, unsigned action, hbool_t *corked);
|
||||
H5_DLL herr_t H5AC_get_entry_ring(const H5F_t *f, haddr_t addr, H5AC_ring_t *ring);
|
||||
H5_DLL herr_t H5AC_set_ring(hid_t dxpl_id, H5AC_ring_t ring, H5P_genplist_t **dxpl,
|
||||
H5AC_ring_t *orig_ring);
|
||||
H5_DLL herr_t H5AC_reset_ring(H5P_genplist_t *dxpl, H5AC_ring_t orig_ring);
|
||||
H5_DLL void H5AC_set_ring(H5AC_ring_t ring, H5AC_ring_t *orig_ring);
|
||||
H5_DLL herr_t H5AC_unsettle_entry_ring(void *entry);
|
||||
H5_DLL herr_t H5AC_unsettle_ring(H5F_t * f, H5AC_ring_t ring);
|
||||
H5_DLL herr_t H5AC_expunge_tag_type_metadata(H5F_t *f, hid_t dxpl_id, haddr_t tag, int type_id, unsigned flags);
|
||||
H5_DLL herr_t H5AC_expunge_tag_type_metadata(H5F_t *f, haddr_t tag, int type_id,
|
||||
unsigned flags);
|
||||
H5_DLL herr_t H5AC_get_tag(const void *thing, /*OUT*/ haddr_t *tag);
|
||||
|
||||
/* Virtual entry routines */
|
||||
@ -474,7 +452,7 @@ H5_DLL H5AC_proxy_entry_t *H5AC_proxy_entry_create(void);
|
||||
H5_DLL herr_t H5AC_proxy_entry_add_parent(H5AC_proxy_entry_t *pentry, void *parent);
|
||||
H5_DLL herr_t H5AC_proxy_entry_remove_parent(H5AC_proxy_entry_t *pentry, void *parent);
|
||||
H5_DLL herr_t H5AC_proxy_entry_add_child(H5AC_proxy_entry_t *pentry, H5F_t *f,
|
||||
hid_t dxpl_id, void *child);
|
||||
void *child);
|
||||
H5_DLL herr_t H5AC_proxy_entry_remove_child(H5AC_proxy_entry_t *pentry, void *child);
|
||||
H5_DLL herr_t H5AC_proxy_entry_dest(H5AC_proxy_entry_t *pentry);
|
||||
|
||||
|
@ -284,8 +284,7 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
herr_t
|
||||
H5AC_proxy_entry_add_child(H5AC_proxy_entry_t *pentry, H5F_t *f, hid_t dxpl_id,
|
||||
void *child)
|
||||
H5AC_proxy_entry_add_child(H5AC_proxy_entry_t *pentry, H5F_t *f, void *child)
|
||||
{
|
||||
herr_t ret_value = SUCCEED; /* Return value */
|
||||
|
||||
@ -303,7 +302,7 @@ H5AC_proxy_entry_add_child(H5AC_proxy_entry_t *pentry, H5F_t *f, hid_t dxpl_id,
|
||||
HGOTO_ERROR(H5E_CACHE, H5E_CANTALLOC, FAIL, "temporary file space allocation failed for proxy entry")
|
||||
|
||||
/* Insert the proxy entry into the cache */
|
||||
if(H5AC_insert_entry(f, dxpl_id, H5AC_PROXY_ENTRY, pentry->addr, pentry, H5AC__PIN_ENTRY_FLAG) < 0)
|
||||
if(H5AC_insert_entry(f, H5AC_PROXY_ENTRY, pentry->addr, pentry, H5AC__PIN_ENTRY_FLAG) < 0)
|
||||
HGOTO_ERROR(H5E_CACHE, H5E_CANTINSERT, FAIL, "unable to cache proxy entry")
|
||||
|
||||
/* Proxies start out clean (insertions are automatically marked dirty) */
|
||||
|
@ -54,7 +54,6 @@
|
||||
typedef struct H5A_fh_ud_cmp_t {
|
||||
/* downward */
|
||||
H5F_t *f; /* Pointer to file that fractal heap is in */
|
||||
hid_t dxpl_id; /* DXPL for operation */
|
||||
const char *name; /* Name of attribute to compare */
|
||||
const H5A_dense_bt2_name_rec_t *record; /* v2 B-tree record for attribute */
|
||||
H5A_bt2_found_t found_op; /* Callback when correct attribute is found */
|
||||
@ -168,7 +167,7 @@ H5A__dense_fh_name_cmp(const void *obj, size_t obj_len, void *_udata)
|
||||
FUNC_ENTER_STATIC
|
||||
|
||||
/* Decode attribute information */
|
||||
if(NULL == (attr = (H5A_t *)H5O_msg_decode(udata->f, udata->dxpl_id, NULL, H5O_ATTR_ID, obj_len, (const unsigned char *)obj)))
|
||||
if(NULL == (attr = (H5A_t *)H5O_msg_decode(udata->f, NULL, H5O_ATTR_ID, obj_len, (const unsigned char *)obj)))
|
||||
HGOTO_ERROR(H5E_OHDR, H5E_CANTDECODE, FAIL, "can't decode attribute")
|
||||
|
||||
/* Compare the string values */
|
||||
@ -270,7 +269,6 @@ H5A__dense_btree2_name_compare(const void *_bt2_udata, const void *_bt2_rec, int
|
||||
/* Prepare user data for callback */
|
||||
/* down */
|
||||
fh_udata.f = bt2_udata->f;
|
||||
fh_udata.dxpl_id = bt2_udata->dxpl_id;
|
||||
fh_udata.name = bt2_udata->name;
|
||||
fh_udata.record = bt2_rec;
|
||||
fh_udata.found_op = bt2_udata->found_op;
|
||||
@ -287,7 +285,7 @@ H5A__dense_btree2_name_compare(const void *_bt2_udata, const void *_bt2_rec, int
|
||||
HDassert(fheap);
|
||||
|
||||
/* Check if the user's attribute and the B-tree's attribute have the same name */
|
||||
if(H5HF_op(fheap, bt2_udata->dxpl_id, &bt2_rec->id, H5A__dense_fh_name_cmp, &fh_udata) < 0)
|
||||
if(H5HF_op(fheap, &bt2_rec->id, H5A__dense_fh_name_cmp, &fh_udata) < 0)
|
||||
HGOTO_ERROR(H5E_HEAP, H5E_CANTCOMPARE, FAIL, "can't compare btree2 records")
|
||||
|
||||
/* Callback will set comparison value */
|
||||
|
355
src/H5Adense.c
355
src/H5Adense.c
File diff suppressed because it is too large
Load Diff
@ -38,6 +38,7 @@
|
||||
/***********/
|
||||
#include "H5private.h" /* Generic Functions */
|
||||
#include "H5Apkg.h" /* Attributes */
|
||||
#include "H5CXprivate.h" /* API Contexts */
|
||||
#include "H5Dprivate.h" /* Datasets */
|
||||
#include "H5Eprivate.h" /* Error handling */
|
||||
#include "H5Iprivate.h" /* IDs */
|
||||
@ -87,12 +88,12 @@
|
||||
PURPOSE
|
||||
Creates an attribute on an object
|
||||
USAGE
|
||||
hid_t H5Acreate1(loc_id, name, type_id, space_id, plist_id)
|
||||
hid_t H5Acreate1(loc_id, name, type_id, space_id, acpl_id)
|
||||
hid_t loc_id; IN: Object (dataset or group) to be attached to
|
||||
const char *name; IN: Name of attribute to create
|
||||
hid_t type_id; IN: ID of datatype for attribute
|
||||
hid_t space_id; IN: ID of dataspace for attribute
|
||||
hid_t plist_id; IN: ID of creation property list (currently not used)
|
||||
hid_t acpl_id; IN: ID of creation property list (currently not used)
|
||||
RETURNS
|
||||
Non-negative on success/Negative on failure
|
||||
|
||||
@ -110,16 +111,16 @@
|
||||
--------------------------------------------------------------------------*/
|
||||
hid_t
|
||||
H5Acreate1(hid_t loc_id, const char *name, hid_t type_id, hid_t space_id,
|
||||
hid_t plist_id)
|
||||
hid_t acpl_id)
|
||||
{
|
||||
H5A_t *attr = NULL; /* Attribute created */
|
||||
H5G_loc_t loc; /* Object location */
|
||||
H5T_t *type; /* Datatype to use for attribute */
|
||||
H5S_t *space; /* Dataspace to use for attribute */
|
||||
hid_t ret_value; /* Return value */
|
||||
H5A_t *attr = NULL; /* Attribute created */
|
||||
H5G_loc_t loc; /* Object location */
|
||||
H5T_t *type; /* Datatype to use for attribute */
|
||||
H5S_t *space; /* Dataspace to use for attribute */
|
||||
hid_t ret_value; /* Return value */
|
||||
|
||||
FUNC_ENTER_API(FAIL)
|
||||
H5TRACE5("i", "i*siii", loc_id, name, type_id, space_id, plist_id);
|
||||
H5TRACE5("i", "i*siii", loc_id, name, type_id, space_id, acpl_id);
|
||||
|
||||
/* check arguments */
|
||||
if(H5I_ATTR == H5I_get_type(loc_id))
|
||||
@ -133,10 +134,14 @@ H5Acreate1(hid_t loc_id, const char *name, hid_t type_id, hid_t space_id,
|
||||
if(NULL == (type = (H5T_t *)H5I_object_verify(type_id, H5I_DATATYPE)))
|
||||
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a type")
|
||||
if(NULL == (space = (H5S_t *)H5I_object_verify(space_id, H5I_DATASPACE)))
|
||||
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a data space")
|
||||
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a dataspace")
|
||||
|
||||
/* Set up collective metadata if appropriate */
|
||||
if(H5CX_set_loc(loc_id) < 0)
|
||||
HGOTO_ERROR(H5E_ATTR, H5E_CANTSET, H5I_INVALID_HID, "can't set collective metadata read")
|
||||
|
||||
/* Go do the real work for attaching the attribute to the dataset */
|
||||
if(NULL==(attr = H5A_create(&loc, name, type, space, plist_id, H5AC_ind_read_dxpl_id)))
|
||||
if(NULL == (attr = H5A__create(&loc, name, type, space, acpl_id)))
|
||||
HGOTO_ERROR(H5E_ATTR, H5E_CANTINIT, FAIL, "unable to create attribute")
|
||||
|
||||
/* Register the new attribute and get an ID for it */
|
||||
@ -144,6 +149,10 @@ H5Acreate1(hid_t loc_id, const char *name, hid_t type_id, hid_t space_id,
|
||||
HGOTO_ERROR(H5E_ATOM, H5E_CANTREGISTER, FAIL, "unable to register attribute for ID")
|
||||
|
||||
done:
|
||||
/* Cleanup on failure */
|
||||
if(ret_value < 0 && attr && H5A__close(attr) < 0)
|
||||
HDONE_ERROR(H5E_ATTR, H5E_CANTFREE, FAIL, "can't close attribute")
|
||||
|
||||
FUNC_LEAVE_API(ret_value)
|
||||
} /* H5Acreate1() */
|
||||
|
||||
@ -173,9 +182,9 @@ done:
|
||||
hid_t
|
||||
H5Aopen_name(hid_t loc_id, const char *name)
|
||||
{
|
||||
H5G_loc_t loc; /* Object location */
|
||||
H5A_t *attr = NULL; /* Attribute opened */
|
||||
hid_t ret_value;
|
||||
H5G_loc_t loc; /* Object location */
|
||||
H5A_t *attr = NULL; /* Attribute opened */
|
||||
hid_t ret_value;
|
||||
|
||||
FUNC_ENTER_API(FAIL)
|
||||
H5TRACE2("i", "i*s", loc_id, name);
|
||||
@ -189,7 +198,7 @@ H5Aopen_name(hid_t loc_id, const char *name)
|
||||
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no name")
|
||||
|
||||
/* Open the attribute on the object header */
|
||||
if(NULL == (attr = H5A_open_by_name(&loc, ".", name, H5P_LINK_ACCESS_DEFAULT, H5AC_ind_read_dxpl_id)))
|
||||
if(NULL == (attr = H5A__open_by_name(&loc, ".", name)))
|
||||
HGOTO_ERROR(H5E_ATTR, H5E_CANTOPENOBJ, FAIL, "can't open attribute: '%s'", name)
|
||||
|
||||
/* Register the attribute and get an ID for it */
|
||||
@ -199,7 +208,7 @@ H5Aopen_name(hid_t loc_id, const char *name)
|
||||
done:
|
||||
/* Cleanup on failure */
|
||||
if(ret_value < 0)
|
||||
if(attr && H5A_close(attr) < 0)
|
||||
if(attr && H5A__close(attr) < 0)
|
||||
HDONE_ERROR(H5E_ATTR, H5E_CANTFREE, FAIL, "can't close attribute")
|
||||
|
||||
FUNC_LEAVE_API(ret_value)
|
||||
@ -245,8 +254,8 @@ H5Aopen_idx(hid_t loc_id, unsigned idx)
|
||||
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a location")
|
||||
|
||||
/* Open the attribute in the object header */
|
||||
if(NULL == (attr = H5A_open_by_idx(&loc, ".", H5_INDEX_CRT_ORDER, H5_ITER_INC, (hsize_t)idx, H5P_LINK_ACCESS_DEFAULT, H5AC_ind_read_dxpl_id)))
|
||||
HGOTO_ERROR(H5E_ATTR, H5E_CANTOPENOBJ, FAIL, "unable to open attribute")
|
||||
if(NULL == (attr = H5A__open_by_idx(&loc, ".", H5_INDEX_CRT_ORDER, H5_ITER_INC, (hsize_t)idx)))
|
||||
HGOTO_ERROR(H5E_ATTR, H5E_CANTOPENOBJ, H5I_INVALID_HID, "unable to open attribute")
|
||||
|
||||
/* Register the attribute and get an ID for it */
|
||||
if((ret_value = H5I_register(H5I_ATTR, attr, TRUE)) < 0)
|
||||
@ -255,7 +264,7 @@ H5Aopen_idx(hid_t loc_id, unsigned idx)
|
||||
done:
|
||||
/* Cleanup on failure */
|
||||
if(ret_value < 0)
|
||||
if(attr && H5A_close(attr) < 0)
|
||||
if(attr && H5A__close(attr) < 0)
|
||||
HDONE_ERROR(H5E_ATTR, H5E_CANTFREE, FAIL, "can't close attribute")
|
||||
|
||||
FUNC_LEAVE_API(ret_value)
|
||||
@ -283,9 +292,9 @@ done:
|
||||
int
|
||||
H5Aget_num_attrs(hid_t loc_id)
|
||||
{
|
||||
H5O_loc_t *loc; /* Object location for attribute */
|
||||
void *obj;
|
||||
int ret_value;
|
||||
H5O_loc_t *loc; /* Object location for attribute */
|
||||
void *obj;
|
||||
int ret_value;
|
||||
|
||||
FUNC_ENTER_API(FAIL)
|
||||
H5TRACE1("Is", "i", loc_id);
|
||||
@ -331,7 +340,7 @@ H5Aget_num_attrs(hid_t loc_id)
|
||||
} /*lint !e788 All appropriate cases are covered */
|
||||
|
||||
/* Look up the # of attributes for the object */
|
||||
if((ret_value = H5O_attr_count(loc, H5AC_ind_read_dxpl_id)) < 0)
|
||||
if((ret_value = H5A__get_num_attrs(loc)) < 0)
|
||||
HGOTO_ERROR(H5E_ATTR, H5E_CANTCOUNT, FAIL, "can't get attribute count for object")
|
||||
|
||||
done:
|
||||
@ -379,10 +388,7 @@ done:
|
||||
herr_t
|
||||
H5Aiterate1(hid_t loc_id, unsigned *attr_num, H5A_operator1_t op, void *op_data)
|
||||
{
|
||||
H5A_attr_iter_op_t attr_op; /* Attribute operator */
|
||||
hsize_t start_idx; /* Index of attribute to start iterating at */
|
||||
hsize_t last_attr; /* Index of last attribute examined */
|
||||
herr_t ret_value; /* Return value */
|
||||
herr_t ret_value; /* Return value */
|
||||
|
||||
FUNC_ENTER_API(FAIL)
|
||||
H5TRACE4("e", "i*Iux*x", loc_id, attr_num, op, op_data);
|
||||
@ -391,19 +397,10 @@ H5Aiterate1(hid_t loc_id, unsigned *attr_num, H5A_operator1_t op, void *op_data)
|
||||
if(H5I_ATTR == H5I_get_type(loc_id))
|
||||
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "location is not valid for an attribute")
|
||||
|
||||
/* Build attribute operator info */
|
||||
attr_op.op_type = H5A_ATTR_OP_APP;
|
||||
attr_op.u.app_op = op;
|
||||
|
||||
/* Call attribute iteration routine */
|
||||
last_attr = start_idx = (hsize_t)(attr_num ? *attr_num : 0);
|
||||
if((ret_value = H5O_attr_iterate(loc_id, H5AC_ind_read_dxpl_id, H5_INDEX_CRT_ORDER, H5_ITER_INC, start_idx, &last_attr, &attr_op, op_data)) < 0)
|
||||
if((ret_value = H5A__iterate_old(loc_id, attr_num, op, op_data)) < 0)
|
||||
HERROR(H5E_ATTR, H5E_BADITER, "error iterating over attributes");
|
||||
|
||||
/* Set the last attribute information */
|
||||
if(attr_num)
|
||||
*attr_num = (unsigned)last_attr;
|
||||
|
||||
done:
|
||||
FUNC_LEAVE_API(ret_value)
|
||||
} /* H5Aiterate1() */
|
||||
|
972
src/H5Aint.c
972
src/H5Aint.c
File diff suppressed because it is too large
Load Diff
157
src/H5Apkg.h
157
src/H5Apkg.h
@ -129,7 +129,6 @@ typedef herr_t (*H5A_bt2_found_t)(const H5A_t *attr, hbool_t *took_ownership, vo
|
||||
typedef struct H5A_bt2_ud_common_t {
|
||||
/* downward */
|
||||
H5F_t *f; /* Pointer to file that fractal heap is in */
|
||||
hid_t dxpl_id; /* DXPL for operation */
|
||||
H5HF_t *fheap; /* Fractal heap handle */
|
||||
H5HF_t *shared_fheap; /* Fractal heap handle for shared messages */
|
||||
const char *name; /* Name of attribute to compare */
|
||||
@ -182,93 +181,111 @@ H5_DLLVAR const H5B2_class_t H5A_BT2_CORDER[1];
|
||||
/******************************/
|
||||
|
||||
/* Function prototypes for H5A package scope */
|
||||
H5_DLL H5A_t *H5A_create(const H5G_loc_t *loc, const char *name,
|
||||
const H5T_t *type, const H5S_t *space, hid_t acpl_id, hid_t dxpl_id);
|
||||
H5_DLL H5A_t *H5A_open_by_name(const H5G_loc_t *loc, const char *obj_name,
|
||||
const char *attr_name, hid_t lapl_id, hid_t dxpl_id);
|
||||
H5_DLL H5A_t *H5A_open_by_idx(const H5G_loc_t *loc, const char *obj_name,
|
||||
H5_index_t idx_type, H5_iter_order_t order, hsize_t n, hid_t lapl_id, hid_t dxpl_id);
|
||||
H5_DLL herr_t H5A__open_common(const H5G_loc_t *loc, H5A_t *attr);
|
||||
H5_DLL H5A_t *H5A_copy(H5A_t *new_attr, const H5A_t *old_attr);
|
||||
H5_DLL H5A_t *H5A__create(const H5G_loc_t *loc, const char *attr_name,
|
||||
const H5T_t *type, const H5S_t *space, hid_t acpl_id);
|
||||
H5_DLL H5A_t *H5A__create_by_name(const H5G_loc_t *loc, const char *obj_name,
|
||||
const char *attr_name, const H5T_t *type, const H5S_t *space,
|
||||
hid_t acpl_id);
|
||||
H5_DLL H5A_t *H5A__open(const H5G_loc_t *loc, const char *attr_name);
|
||||
H5_DLL H5A_t *H5A__open_by_name(const H5G_loc_t *loc, const char *obj_name,
|
||||
const char *attr_name);
|
||||
H5_DLL H5A_t *H5A__open_by_idx(const H5G_loc_t *loc, const char *obj_name,
|
||||
H5_index_t idx_type, H5_iter_order_t order, hsize_t n);
|
||||
H5_DLL H5A_t *H5A__copy(H5A_t *new_attr, const H5A_t *old_attr);
|
||||
H5_DLL hid_t H5A__get_type(H5A_t *attr);
|
||||
H5_DLL herr_t H5A__get_info(const H5A_t *attr, H5A_info_t *ainfo);
|
||||
H5_DLL hid_t H5A_get_create_plist(H5A_t* attr);
|
||||
H5_DLL herr_t H5A_free(H5A_t *attr);
|
||||
H5_DLL herr_t H5A_close(H5A_t *attr);
|
||||
H5_DLL htri_t H5A_get_ainfo(H5F_t *f, hid_t dxpl_id, H5O_t *oh, H5O_ainfo_t *ainfo);
|
||||
H5_DLL herr_t H5A_set_version(const H5F_t *f, H5A_t *attr);
|
||||
H5_DLL herr_t H5A_rename_by_name(H5G_loc_t loc, const char *obj_name, const char *old_attr_name,
|
||||
const char *new_attr_name, hid_t lapl_id, hid_t dxpl_id);
|
||||
H5_DLL htri_t H5A_exists_by_name(H5G_loc_t loc, const char *obj_name, const char *attr_name,
|
||||
hid_t lapl_id, hid_t dxpl_id);
|
||||
H5_DLL herr_t H5A__write(H5A_t *attr, const H5T_t *mem_type, const void *buf, hid_t dxpl_id);
|
||||
H5_DLL herr_t H5A__read(const H5A_t *attr, const H5T_t *mem_type, void *buf, hid_t dxpl_id);
|
||||
H5_DLL hid_t H5A__get_create_plist(H5A_t* attr);
|
||||
H5_DLL herr_t H5A__free(H5A_t *attr);
|
||||
H5_DLL herr_t H5A__close(H5A_t *attr);
|
||||
H5_DLL herr_t H5A__close_cb(H5A_t *attr);
|
||||
H5_DLL htri_t H5A__get_ainfo(H5F_t *f, H5O_t *oh, H5O_ainfo_t *ainfo);
|
||||
H5_DLL herr_t H5A__set_version(const H5F_t *f, H5A_t *attr);
|
||||
H5_DLL herr_t H5A__rename(const H5G_loc_t *loc, const char *old_name,
|
||||
const char *new_name);
|
||||
H5_DLL herr_t H5A__rename_by_name(H5G_loc_t loc, const char *obj_name, const char *old_attr_name,
|
||||
const char *new_attr_name);
|
||||
#ifndef H5_NO_DEPRECATED_SYMBOLS
|
||||
H5_DLL int H5A__get_num_attrs(const H5O_loc_t *loc);
|
||||
#endif /* H5_NO_DEPRECATED_SYMBOLS */
|
||||
H5_DLL herr_t H5A__iterate(hid_t loc_id, H5_index_t idx_type, H5_iter_order_t order,
|
||||
hsize_t *idx, H5A_operator2_t op, void *op_data);
|
||||
H5_DLL herr_t H5A__iterate_by_name(const H5G_loc_t *loc, const char *obj_name,
|
||||
H5_index_t idx_type, H5_iter_order_t order, hsize_t *idx, H5A_operator2_t op,
|
||||
void *op_data);
|
||||
#ifndef H5_NO_DEPRECATED_SYMBOLS
|
||||
H5_DLL herr_t H5A__iterate_old(hid_t loc_id, unsigned *attr_num,
|
||||
H5A_operator1_t op, void *op_data);
|
||||
#endif /* H5_NO_DEPRECATED_SYMBOLS */
|
||||
H5_DLL herr_t H5A__delete(const H5G_loc_t *loc, const char *name);
|
||||
H5_DLL herr_t H5A__delete_by_name(const H5G_loc_t *loc, const char *obj_name,
|
||||
const char *attr_name);
|
||||
H5_DLL herr_t H5A__delete_by_idx(const H5G_loc_t *loc, const char *obj_name,
|
||||
H5_index_t idx_type, H5_iter_order_t order, hsize_t n);
|
||||
H5_DLL htri_t H5A__exists(const H5G_loc_t *loc, const char *name);
|
||||
H5_DLL htri_t H5A__exists_by_name(H5G_loc_t loc, const char *obj_name, const char *attr_name);
|
||||
H5_DLL herr_t H5A__write(H5A_t *attr, const H5T_t *mem_type, const void *buf);
|
||||
H5_DLL herr_t H5A__read(const H5A_t *attr, const H5T_t *mem_type, void *buf);
|
||||
H5_DLL ssize_t H5A__get_name(H5A_t *attr, size_t buf_size, char *buf);
|
||||
|
||||
/* Attribute "dense" storage routines */
|
||||
H5_DLL herr_t H5A_dense_create(H5F_t *f, hid_t dxpl_id, H5O_ainfo_t *ainfo);
|
||||
H5_DLL H5A_t *H5A_dense_open(H5F_t *f, hid_t dxpl_id, const H5O_ainfo_t *ainfo,
|
||||
const char *name);
|
||||
H5_DLL herr_t H5A_dense_insert(H5F_t *f, hid_t dxpl_id, const H5O_ainfo_t *ainfo,
|
||||
H5A_t *attr);
|
||||
H5_DLL herr_t H5A_dense_write(H5F_t *f, hid_t dxpl_id, const H5O_ainfo_t *ainfo,
|
||||
H5A_t *attr);
|
||||
H5_DLL herr_t H5A_dense_rename(H5F_t *f, hid_t dxpl_id, const H5O_ainfo_t *ainfo,
|
||||
H5_DLL herr_t H5A__dense_create(H5F_t *f, H5O_ainfo_t *ainfo);
|
||||
H5_DLL H5A_t *H5A__dense_open(H5F_t *f, const H5O_ainfo_t *ainfo, const char *name);
|
||||
H5_DLL herr_t H5A__dense_insert(H5F_t *f, const H5O_ainfo_t *ainfo, H5A_t *attr);
|
||||
H5_DLL herr_t H5A__dense_write(H5F_t *f, const H5O_ainfo_t *ainfo, H5A_t *attr);
|
||||
H5_DLL herr_t H5A__dense_rename(H5F_t *f, const H5O_ainfo_t *ainfo,
|
||||
const char *old_name, const char *new_name);
|
||||
H5_DLL herr_t H5A_dense_iterate(H5F_t *f, hid_t dxpl_id, hid_t loc_id,
|
||||
const H5O_ainfo_t *ainfo, H5_index_t idx_type, H5_iter_order_t order,
|
||||
hsize_t skip, hsize_t *last_attr, const H5A_attr_iter_op_t *attr_op,
|
||||
void *op_data);
|
||||
H5_DLL herr_t H5A_dense_remove(H5F_t *f, hid_t dxpl_id,
|
||||
const H5O_ainfo_t *ainfo, const char *name);
|
||||
H5_DLL herr_t H5A_dense_remove_by_idx(H5F_t *f, hid_t dxpl_id,
|
||||
const H5O_ainfo_t *ainfo, H5_index_t idx_type, H5_iter_order_t order,
|
||||
hsize_t n);
|
||||
H5_DLL htri_t H5A_dense_exists(H5F_t *f, hid_t dxpl_id, const H5O_ainfo_t *ainfo,
|
||||
H5_DLL herr_t H5A__dense_iterate(H5F_t *f, hid_t loc_id, const H5O_ainfo_t *ainfo,
|
||||
H5_index_t idx_type, H5_iter_order_t order, hsize_t skip, hsize_t *last_attr,
|
||||
const H5A_attr_iter_op_t *attr_op, void *op_data);
|
||||
H5_DLL herr_t H5A__dense_remove(H5F_t *f, const H5O_ainfo_t *ainfo,
|
||||
const char *name);
|
||||
H5_DLL herr_t H5A_dense_delete(H5F_t *f, hid_t dxpl_id, H5O_ainfo_t *ainfo);
|
||||
H5_DLL herr_t H5A__dense_remove_by_idx(H5F_t *f, const H5O_ainfo_t *ainfo,
|
||||
H5_index_t idx_type, H5_iter_order_t order, hsize_t n);
|
||||
H5_DLL htri_t H5A__dense_exists(H5F_t *f, const H5O_ainfo_t *ainfo,
|
||||
const char *name);
|
||||
H5_DLL herr_t H5A__dense_delete(H5F_t *f, H5O_ainfo_t *ainfo);
|
||||
|
||||
/* Attribute table operations */
|
||||
H5_DLL herr_t H5A_compact_build_table(H5F_t *f, hid_t dxpl_id, H5O_t *oh,
|
||||
H5_DLL herr_t H5A__compact_build_table(H5F_t *f, H5O_t *oh, H5_index_t idx_type,
|
||||
H5_iter_order_t order, H5A_attr_table_t *atable);
|
||||
H5_DLL herr_t H5A__dense_build_table(H5F_t *f, const H5O_ainfo_t *ainfo,
|
||||
H5_index_t idx_type, H5_iter_order_t order, H5A_attr_table_t *atable);
|
||||
H5_DLL herr_t H5A_dense_build_table(H5F_t *f, hid_t dxpl_id,
|
||||
const H5O_ainfo_t *ainfo, H5_index_t idx_type, H5_iter_order_t order,
|
||||
H5A_attr_table_t *atable);
|
||||
H5_DLL herr_t H5A_attr_iterate_table(const H5A_attr_table_t *atable,
|
||||
H5_DLL herr_t H5A__attr_iterate_table(const H5A_attr_table_t *atable,
|
||||
hsize_t skip, hsize_t *last_attr, hid_t loc_id,
|
||||
const H5A_attr_iter_op_t *attr_op, void *op_data);
|
||||
H5_DLL herr_t H5A_attr_release_table(H5A_attr_table_t *atable);
|
||||
H5_DLL herr_t H5A__attr_release_table(H5A_attr_table_t *atable);
|
||||
|
||||
/* Attribute operations */
|
||||
H5_DLL herr_t H5O_attr_create(const H5O_loc_t *loc, hid_t dxpl_id, H5A_t *attr);
|
||||
H5_DLL H5A_t *H5O_attr_open_by_name(const H5O_loc_t *loc, const char *name,
|
||||
hid_t dxpl_id);
|
||||
H5_DLL H5A_t *H5O_attr_open_by_idx(const H5O_loc_t *loc, H5_index_t idx_type,
|
||||
H5_iter_order_t order, hsize_t n, hid_t dxpl_id);
|
||||
H5_DLL herr_t H5O_attr_update_shared(H5F_t *f, hid_t dxpl_id, H5O_t *oh,
|
||||
H5A_t *attr, H5O_shared_t *sh_mesg);
|
||||
H5_DLL herr_t H5O_attr_write(const H5O_loc_t *loc, hid_t dxpl_id,
|
||||
H5A_t *attr);
|
||||
H5_DLL herr_t H5O_attr_rename(const H5O_loc_t *loc, hid_t dxpl_id,
|
||||
const char *old_name, const char *new_name);
|
||||
H5_DLL herr_t H5O_attr_remove(const H5O_loc_t *loc, const char *name,
|
||||
hid_t dxpl_id);
|
||||
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, hid_t dxpl_id);
|
||||
H5_DLL htri_t H5O_attr_exists(const H5O_loc_t *loc, const char *name, hid_t dxpl_id);
|
||||
H5_DLL herr_t H5O__attr_create(const H5O_loc_t *loc, H5A_t *attr);
|
||||
H5_DLL H5A_t *H5O__attr_open_by_name(const H5O_loc_t *loc, const char *name);
|
||||
H5_DLL H5A_t *H5O__attr_open_by_idx(const H5O_loc_t *loc, H5_index_t idx_type,
|
||||
H5_iter_order_t order, hsize_t n);
|
||||
H5_DLL herr_t H5O__attr_update_shared(H5F_t *f, H5O_t *oh, H5A_t *attr,
|
||||
H5O_shared_t *sh_mesg);
|
||||
H5_DLL herr_t H5O__attr_write(const H5O_loc_t *loc, H5A_t *attr);
|
||||
H5_DLL herr_t H5O__attr_rename(const H5O_loc_t *loc, const char *old_name,
|
||||
const char *new_name);
|
||||
H5_DLL herr_t H5O__attr_iterate(hid_t loc_id, H5_index_t idx_type,
|
||||
H5_iter_order_t order, hsize_t skip, hsize_t *last_attr,
|
||||
const H5A_attr_iter_op_t *op, void *op_data);
|
||||
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, hid_t dxpl_id);
|
||||
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, hid_t dxpl_id);
|
||||
H5_DLL herr_t H5A_attr_post_copy_file(const H5O_loc_t *src_oloc, const H5A_t *mesg_src,
|
||||
H5O_loc_t *dst_oloc, const H5A_t *mesg_dst, hid_t dxpl_id, H5O_copy_t *cpy_info);
|
||||
H5_DLL herr_t H5A_dense_post_copy_file_all(const H5O_loc_t *src_oloc, const H5O_ainfo_t * ainfo_src,
|
||||
H5O_loc_t *dst_oloc, H5O_ainfo_t *ainfo_dst, hid_t dxpl_id, H5O_copy_t *cpy_info);
|
||||
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,
|
||||
H5O_loc_t *dst_oloc, const H5A_t *mesg_dst, H5O_copy_t *cpy_info);
|
||||
H5_DLL herr_t H5A__dense_post_copy_file_all(const H5O_loc_t *src_oloc, const H5O_ainfo_t * ainfo_src,
|
||||
H5O_loc_t *dst_oloc, H5O_ainfo_t *ainfo_dst, H5O_copy_t *cpy_info);
|
||||
|
||||
/* Testing functions */
|
||||
#ifdef H5A_TESTING
|
||||
H5_DLL htri_t H5A_is_shared_test(hid_t aid);
|
||||
H5_DLL herr_t H5A_get_shared_rc_test(hid_t attr_id, hsize_t *ref_count);
|
||||
H5_DLL htri_t H5A__is_shared_test(hid_t aid);
|
||||
H5_DLL herr_t H5A__get_shared_rc_test(hid_t attr_id, hsize_t *ref_count);
|
||||
#endif /* H5A_TESTING */
|
||||
|
||||
#endif /* _H5Apkg_H */
|
||||
|
@ -76,14 +76,10 @@ typedef struct H5A_attr_iter_op_t {
|
||||
H5_DLL struct H5O_loc_t *H5A_oloc(H5A_t *attr);
|
||||
H5_DLL H5G_name_t *H5A_nameof(H5A_t *attr);
|
||||
H5_DLL H5T_t *H5A_type(const H5A_t *attr);
|
||||
H5_DLL hid_t H5A_get_type(H5A_t *attr);
|
||||
H5_DLL hid_t H5A_get_space(H5A_t *attr);
|
||||
H5_DLL herr_t H5O_attr_iterate_real(hid_t loc_id, const H5O_loc_t *loc,
|
||||
hid_t dxpl_id, H5_index_t idx_type, H5_iter_order_t order, hsize_t skip,
|
||||
H5_index_t idx_type, H5_iter_order_t order, hsize_t skip,
|
||||
hsize_t *last_attr, const H5A_attr_iter_op_t *attr_op, void *op_data);
|
||||
H5_DLL herr_t H5O_attr_iterate(hid_t loc_id, hid_t dxpl_id, H5_index_t idx_type,
|
||||
H5_iter_order_t order, hsize_t skip, hsize_t *last_attr,
|
||||
const H5A_attr_iter_op_t *op, void *op_data);
|
||||
|
||||
#endif /* _H5Aprivate_H */
|
||||
|
||||
|
@ -36,6 +36,7 @@
|
||||
#include "H5private.h" /* Generic Functions */
|
||||
#include "H5Apkg.h" /* Attributes */
|
||||
#include "H5ACprivate.h" /* Metadata cache */
|
||||
#include "H5CXprivate.h" /* API Contexts */
|
||||
#include "H5Eprivate.h" /* Error handling */
|
||||
#include "H5Iprivate.h" /* IDs */
|
||||
#include "H5SMprivate.h" /* Shared object header messages */
|
||||
@ -77,7 +78,7 @@
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5A_is_shared_test
|
||||
* Function: H5A__is_shared_test
|
||||
*
|
||||
* Purpose: Check if an attribute is shared
|
||||
*
|
||||
@ -90,12 +91,12 @@
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
htri_t
|
||||
H5A_is_shared_test(hid_t attr_id)
|
||||
H5A__is_shared_test(hid_t attr_id)
|
||||
{
|
||||
H5A_t *attr; /* Attribute object for ID */
|
||||
htri_t ret_value = FAIL; /* Return value */
|
||||
|
||||
FUNC_ENTER_NOAPI_NOINIT
|
||||
FUNC_ENTER_PACKAGE
|
||||
|
||||
/* Check arguments */
|
||||
if(NULL == (attr = (H5A_t *)H5I_object_verify(attr_id, H5I_ATTR)))
|
||||
@ -106,11 +107,11 @@ H5A_is_shared_test(hid_t attr_id)
|
||||
|
||||
done:
|
||||
FUNC_LEAVE_NOAPI(ret_value)
|
||||
} /* end H5A_is_shared_test() */
|
||||
} /* end H5A__is_shared_test() */
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5A_get_shared_rc_test
|
||||
* Function: H5A__get_shared_rc_test
|
||||
*
|
||||
* Purpose: Retrieve the refcount for a shared attribute
|
||||
*
|
||||
@ -123,26 +124,34 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
herr_t
|
||||
H5A_get_shared_rc_test(hid_t attr_id, hsize_t *ref_count)
|
||||
H5A__get_shared_rc_test(hid_t attr_id, hsize_t *ref_count)
|
||||
{
|
||||
H5A_t *attr; /* Attribute object for ID */
|
||||
hbool_t api_ctx_pushed = FALSE; /* Whether API context pushed */
|
||||
herr_t ret_value = SUCCEED; /* Return value */
|
||||
|
||||
FUNC_ENTER_NOAPI_NOINIT
|
||||
FUNC_ENTER_PACKAGE
|
||||
|
||||
/* Check arguments */
|
||||
if(NULL == (attr = (H5A_t *)H5I_object_verify(attr_id, H5I_ATTR)))
|
||||
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not an attribute")
|
||||
|
||||
/* Push API context */
|
||||
if(H5CX_push() < 0)
|
||||
HGOTO_ERROR(H5E_ATTR, H5E_CANTSET, FAIL, "can't set API context")
|
||||
api_ctx_pushed = TRUE;
|
||||
|
||||
/* Sanity check */
|
||||
HDassert(H5O_msg_is_shared(H5O_ATTR_ID, attr));
|
||||
|
||||
/* Retrieve ref count for shared or shareable attribute */
|
||||
if(H5SM_get_refcount(attr->oloc.file, H5AC_ind_read_dxpl_id, H5O_ATTR_ID,
|
||||
&attr->sh_loc, ref_count) < 0)
|
||||
if(H5SM_get_refcount(attr->oloc.file, H5O_ATTR_ID, &attr->sh_loc, ref_count) < 0)
|
||||
HGOTO_ERROR(H5E_ATTR, H5E_CANTGET, FAIL, "can't retrieve shared message ref count")
|
||||
|
||||
done:
|
||||
FUNC_LEAVE_NOAPI(ret_value)
|
||||
} /* end H5A_get_shared_rc_test() */
|
||||
if(api_ctx_pushed && H5CX_pop() < 0)
|
||||
HDONE_ERROR(H5E_ATTR, H5E_CANTRESET, FAIL, "can't reset API context")
|
||||
|
||||
FUNC_LEAVE_NOAPI(ret_value)
|
||||
} /* end H5A__get_shared_rc_test() */
|
||||
|
||||
|
224
src/H5B.c
224
src/H5B.c
@ -103,7 +103,7 @@
|
||||
/***********/
|
||||
#include "H5private.h" /* Generic Functions */
|
||||
#include "H5Bpkg.h" /* B-link trees */
|
||||
#include "H5Dprivate.h" /* Datasets */
|
||||
#include "H5CXprivate.h" /* API Contexts */
|
||||
#include "H5Eprivate.h" /* Error handling */
|
||||
#include "H5Iprivate.h" /* IDs */
|
||||
#include "H5MFprivate.h" /* File memory management */
|
||||
@ -143,20 +143,15 @@ typedef struct H5B_ins_ud_t {
|
||||
/********************/
|
||||
/* Local Prototypes */
|
||||
/********************/
|
||||
static H5B_ins_t H5B__insert_helper(H5F_t *f, hid_t dxpl_id, H5B_ins_ud_t *bt_ud,
|
||||
const H5B_class_t *type,
|
||||
uint8_t *lt_key,
|
||||
hbool_t *lt_key_changed,
|
||||
uint8_t *md_key, void *udata,
|
||||
uint8_t *rt_key,
|
||||
hbool_t *rt_key_changed,
|
||||
H5B_ins_ud_t *split_bt_ud/*out*/);
|
||||
static H5B_ins_t H5B__insert_helper(H5F_t *f, H5B_ins_ud_t *bt_ud,
|
||||
const H5B_class_t *type, uint8_t *lt_key, hbool_t *lt_key_changed,
|
||||
uint8_t *md_key, void *udata, uint8_t *rt_key, hbool_t *rt_key_changed,
|
||||
H5B_ins_ud_t *split_bt_ud/*out*/);
|
||||
static herr_t H5B__insert_child(H5B_t *bt, unsigned *bt_flags,
|
||||
unsigned idx, haddr_t child,
|
||||
H5B_ins_t anchor, const void *md_key);
|
||||
static herr_t H5B__split(H5F_t *f, hid_t dxpl_id, H5B_ins_ud_t *bt_ud,
|
||||
unsigned idx, void *udata,
|
||||
H5B_ins_ud_t *split_bt_ud/*out*/);
|
||||
static herr_t H5B__split(H5F_t *f, H5B_ins_ud_t *bt_ud, unsigned idx,
|
||||
void *udata, H5B_ins_ud_t *split_bt_ud/*out*/);
|
||||
static H5B_t * H5B__copy(const H5B_t *old_bt);
|
||||
|
||||
|
||||
@ -216,8 +211,7 @@ H5FL_SEQ_DEFINE_STATIC(size_t);
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
herr_t
|
||||
H5B_create(H5F_t *f, hid_t dxpl_id, const H5B_class_t *type, void *udata,
|
||||
haddr_t *addr_p/*out*/)
|
||||
H5B_create(H5F_t *f, const H5B_class_t *type, void *udata, haddr_t *addr_p/*out*/)
|
||||
{
|
||||
H5B_t *bt = NULL;
|
||||
H5B_shared_t *shared=NULL; /* Pointer to shared B-tree info */
|
||||
@ -250,23 +244,23 @@ H5B_create(H5F_t *f, hid_t dxpl_id, const H5B_class_t *type, void *udata,
|
||||
if(NULL == (bt->native = H5FL_BLK_MALLOC(native_block, shared->sizeof_keys)) ||
|
||||
NULL == (bt->child = H5FL_SEQ_MALLOC(haddr_t, (size_t)shared->two_k)))
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTALLOC, FAIL, "memory allocation failed for B-tree root node")
|
||||
if(HADDR_UNDEF == (*addr_p = H5MF_alloc(f, H5FD_MEM_BTREE, dxpl_id, (hsize_t)shared->sizeof_rnode)))
|
||||
if(HADDR_UNDEF == (*addr_p = H5MF_alloc(f, H5FD_MEM_BTREE, (hsize_t)shared->sizeof_rnode)))
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTALLOC, FAIL, "file allocation failed for B-tree root node")
|
||||
|
||||
/*
|
||||
* Cache the new B-tree node.
|
||||
*/
|
||||
if(H5AC_insert_entry(f, dxpl_id, H5AC_BT, *addr_p, bt, H5AC__NO_FLAGS_SET) < 0)
|
||||
if(H5AC_insert_entry(f, H5AC_BT, *addr_p, bt, H5AC__NO_FLAGS_SET) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTINIT, FAIL, "can't add B-tree root node to cache")
|
||||
#ifdef H5B_DEBUG
|
||||
H5B__assert(f, dxpl_id, *addr_p, shared->type, udata);
|
||||
H5B__assert(f, *addr_p, shared->type, udata);
|
||||
#endif
|
||||
|
||||
done:
|
||||
if(ret_value < 0) {
|
||||
if(shared && shared->sizeof_rnode>0) {
|
||||
H5_CHECK_OVERFLOW(shared->sizeof_rnode,size_t,hsize_t);
|
||||
(void)H5MF_xfree(f, H5FD_MEM_BTREE, dxpl_id, *addr_p, (hsize_t)shared->sizeof_rnode);
|
||||
(void)H5MF_xfree(f, H5FD_MEM_BTREE, *addr_p, (hsize_t)shared->sizeof_rnode);
|
||||
} /* end if */
|
||||
if(bt)
|
||||
/* Destroy B-tree node */
|
||||
@ -302,7 +296,7 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
htri_t
|
||||
H5B_find(H5F_t *f, hid_t dxpl_id, const H5B_class_t *type, haddr_t addr, void *udata)
|
||||
H5B_find(H5F_t *f, const H5B_class_t *type, haddr_t addr, void *udata)
|
||||
{
|
||||
H5B_t *bt = NULL;
|
||||
H5UC_t *rc_shared; /* Ref-counted shared info */
|
||||
@ -337,7 +331,7 @@ H5B_find(H5F_t *f, hid_t dxpl_id, const H5B_class_t *type, haddr_t addr, void *u
|
||||
cache_udata.f = f;
|
||||
cache_udata.type = type;
|
||||
cache_udata.rc_shared = rc_shared;
|
||||
if(NULL == (bt = (H5B_t *)H5AC_protect(f, dxpl_id, H5AC_BT, addr, &cache_udata, H5AC__READ_ONLY_FLAG)))
|
||||
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")
|
||||
|
||||
rt = bt->nchildren;
|
||||
@ -359,16 +353,16 @@ H5B_find(H5F_t *f, hid_t dxpl_id, const H5B_class_t *type, haddr_t addr, void *u
|
||||
HDassert(idx < bt->nchildren);
|
||||
|
||||
if(bt->level > 0) {
|
||||
if((ret_value = H5B_find(f, dxpl_id, type, bt->child[idx], udata)) < 0)
|
||||
if((ret_value = H5B_find(f, type, bt->child[idx], udata)) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_NOTFOUND, FAIL, "can't lookup key in subtree")
|
||||
} /* end if */
|
||||
else {
|
||||
if((ret_value = (type->found)(f, dxpl_id, bt->child[idx], H5B_NKEY(bt, shared, idx), udata)) < 0)
|
||||
if((ret_value = (type->found)(f, bt->child[idx], H5B_NKEY(bt, shared, idx), udata)) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_NOTFOUND, FAIL, "can't lookup key in leaf node")
|
||||
} /* end else */
|
||||
|
||||
done:
|
||||
if(bt && H5AC_unprotect(f, dxpl_id, H5AC_BT, addr, bt, H5AC__NO_FLAGS_SET) < 0)
|
||||
if(bt && H5AC_unprotect(f, H5AC_BT, addr, bt, H5AC__NO_FLAGS_SET) < 0)
|
||||
HDONE_ERROR(H5E_BTREE, H5E_CANTUNPROTECT, FAIL, "unable to release node")
|
||||
|
||||
FUNC_LEAVE_NOAPI(ret_value)
|
||||
@ -398,10 +392,9 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static herr_t
|
||||
H5B__split(H5F_t *f, hid_t dxpl_id, H5B_ins_ud_t *bt_ud, unsigned idx,
|
||||
H5B__split(H5F_t *f, H5B_ins_ud_t *bt_ud, unsigned idx,
|
||||
void *udata, H5B_ins_ud_t *split_bt_ud/*out*/)
|
||||
{
|
||||
H5P_genplist_t *dx_plist; /* Data transfer property list */
|
||||
H5B_shared_t *shared; /* Pointer to shared B-tree info */
|
||||
H5B_cache_ud_t cache_udata; /* User-data for metadata cache callback */
|
||||
unsigned nleft, nright; /* Number of keys in left & right halves */
|
||||
@ -427,12 +420,8 @@ H5B__split(H5F_t *f, hid_t dxpl_id, H5B_ins_ud_t *bt_ud, unsigned idx,
|
||||
HDassert(shared);
|
||||
HDassert(bt_ud->bt->nchildren == shared->two_k);
|
||||
|
||||
/* Get the dataset transfer property list */
|
||||
if(NULL == (dx_plist = (H5P_genplist_t *)H5I_object(dxpl_id)))
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_BADTYPE, FAIL, "not a dataset transfer property list")
|
||||
|
||||
/* Get B-tree split ratios */
|
||||
if(H5P_get(dx_plist, H5D_XFER_BTREE_SPLIT_RATIO_NAME, &split_ratios[0]) < 0)
|
||||
if(H5CX_get_btree_split_ratios(split_ratios) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTGET, FAIL, "can't retrieve B-tree split ratios")
|
||||
|
||||
#ifdef H5B_DEBUG
|
||||
@ -481,12 +470,12 @@ H5B__split(H5F_t *f, hid_t dxpl_id, H5B_ins_ud_t *bt_ud, unsigned idx,
|
||||
/*
|
||||
* Create the new B-tree node.
|
||||
*/
|
||||
if(H5B_create(f, dxpl_id, shared->type, udata, &split_bt_ud->addr/*out*/) < 0)
|
||||
if(H5B_create(f, shared->type, udata, &split_bt_ud->addr/*out*/) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTINIT, FAIL, "unable to create B-tree")
|
||||
cache_udata.f = f;
|
||||
cache_udata.type = shared->type;
|
||||
cache_udata.rc_shared = bt_ud->bt->rc_shared;
|
||||
if(NULL == (split_bt_ud->bt = (H5B_t *)H5AC_protect(f, dxpl_id, H5AC_BT, split_bt_ud->addr, &cache_udata, H5AC__NO_FLAGS_SET)))
|
||||
if(NULL == (split_bt_ud->bt = (H5B_t *)H5AC_protect(f, H5AC_BT, split_bt_ud->addr, &cache_udata, H5AC__NO_FLAGS_SET)))
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to protect B-tree")
|
||||
split_bt_ud->bt->level = bt_ud->bt->level;
|
||||
|
||||
@ -519,12 +508,12 @@ H5B__split(H5F_t *f, hid_t dxpl_id, H5B_ins_ud_t *bt_ud, unsigned idx,
|
||||
if(H5F_addr_defined(bt_ud->bt->right)) {
|
||||
H5B_t *tmp_bt;
|
||||
|
||||
if(NULL == (tmp_bt = (H5B_t *)H5AC_protect(f, dxpl_id, H5AC_BT, bt_ud->bt->right, &cache_udata, H5AC__NO_FLAGS_SET)))
|
||||
if(NULL == (tmp_bt = (H5B_t *)H5AC_protect(f, H5AC_BT, bt_ud->bt->right, &cache_udata, H5AC__NO_FLAGS_SET)))
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to load right sibling")
|
||||
|
||||
tmp_bt->left = split_bt_ud->addr;
|
||||
|
||||
if(H5AC_unprotect(f, dxpl_id, H5AC_BT, bt_ud->bt->right, tmp_bt, H5AC__DIRTIED_FLAG) < 0)
|
||||
if(H5AC_unprotect(f, H5AC_BT, bt_ud->bt->right, tmp_bt, H5AC__DIRTIED_FLAG) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTUNPROTECT, FAIL, "unable to release B-tree node")
|
||||
} /* end if */
|
||||
|
||||
@ -533,7 +522,7 @@ H5B__split(H5F_t *f, hid_t dxpl_id, H5B_ins_ud_t *bt_ud, unsigned idx,
|
||||
|
||||
done:
|
||||
if(ret_value < 0) {
|
||||
if(split_bt_ud->bt && H5AC_unprotect(f, dxpl_id, H5AC_BT, split_bt_ud->addr, split_bt_ud->bt, split_bt_ud->cache_flags) < 0)
|
||||
if(split_bt_ud->bt && H5AC_unprotect(f, H5AC_BT, split_bt_ud->addr, split_bt_ud->bt, split_bt_ud->cache_flags) < 0)
|
||||
HDONE_ERROR(H5E_BTREE, H5E_CANTUNPROTECT, FAIL, "unable to release B-tree node")
|
||||
split_bt_ud->bt = NULL;
|
||||
split_bt_ud->addr = HADDR_UNDEF;
|
||||
@ -558,7 +547,7 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
herr_t
|
||||
H5B_insert(H5F_t *f, hid_t dxpl_id, const H5B_class_t *type, haddr_t addr, void *udata)
|
||||
H5B_insert(H5F_t *f, const H5B_class_t *type, haddr_t addr, void *udata)
|
||||
{
|
||||
/*
|
||||
* These are defined this way to satisfy alignment constraints.
|
||||
@ -599,11 +588,11 @@ H5B_insert(H5F_t *f, hid_t dxpl_id, const H5B_class_t *type, haddr_t addr, void
|
||||
cache_udata.type = type;
|
||||
cache_udata.rc_shared = rc_shared;
|
||||
bt_ud.addr = addr;
|
||||
if(NULL == (bt_ud.bt = (H5B_t *)H5AC_protect(f, dxpl_id, H5AC_BT, addr, &cache_udata, H5AC__NO_FLAGS_SET)))
|
||||
if(NULL == (bt_ud.bt = (H5B_t *)H5AC_protect(f, H5AC_BT, addr, &cache_udata, H5AC__NO_FLAGS_SET)))
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to locate root of B-tree")
|
||||
|
||||
/* Insert the object */
|
||||
if((int)(my_ins = H5B__insert_helper(f, dxpl_id, &bt_ud, type, lt_key,
|
||||
if((int)(my_ins = H5B__insert_helper(f, &bt_ud, type, lt_key,
|
||||
<_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")
|
||||
@ -633,7 +622,7 @@ H5B_insert(H5F_t *f, hid_t dxpl_id, const H5B_class_t *type, haddr_t addr, void
|
||||
* "moving".
|
||||
*/
|
||||
H5_CHECK_OVERFLOW(shared->sizeof_rnode,size_t,hsize_t);
|
||||
if(HADDR_UNDEF == (old_root_addr = H5MF_alloc(f, H5FD_MEM_BTREE, dxpl_id, (hsize_t)shared->sizeof_rnode)))
|
||||
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")
|
||||
|
||||
/*
|
||||
@ -646,12 +635,12 @@ H5B_insert(H5F_t *f, hid_t dxpl_id, const H5B_class_t *type, haddr_t addr, void
|
||||
|
||||
/* 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, dxpl_id, H5AC_BT, bt_ud.addr, bt_ud.bt, H5AC__DIRTIED_FLAG) < 0)
|
||||
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")
|
||||
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, dxpl_id) < 0)
|
||||
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")
|
||||
bt_ud.addr = old_root_addr;
|
||||
|
||||
@ -675,7 +664,7 @@ H5B_insert(H5F_t *f, hid_t dxpl_id, const H5B_class_t *type, haddr_t addr, void
|
||||
HDmemcpy(H5B_NKEY(new_root_bt, shared, 2), rt_key, shared->type->sizeof_nkey);
|
||||
|
||||
/* Insert the modified copy of the old root into the file again */
|
||||
if(H5AC_insert_entry(f, dxpl_id, H5AC_BT, addr, new_root_bt, H5AC__NO_FLAGS_SET) < 0)
|
||||
if(H5AC_insert_entry(f, H5AC_BT, addr, new_root_bt, H5AC__NO_FLAGS_SET) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTFLUSH, FAIL, "unable to add old B-tree root node to cache")
|
||||
|
||||
done:
|
||||
@ -684,16 +673,16 @@ done:
|
||||
HDONE_ERROR(H5E_BTREE, H5E_CANTRELEASE, FAIL, "unable to free B-tree root node");
|
||||
|
||||
if(bt_ud.bt)
|
||||
if(H5AC_unprotect(f, dxpl_id, H5AC_BT, bt_ud.addr, bt_ud.bt, bt_ud.cache_flags) < 0)
|
||||
if(H5AC_unprotect(f, H5AC_BT, bt_ud.addr, bt_ud.bt, bt_ud.cache_flags) < 0)
|
||||
HDONE_ERROR(H5E_BTREE, H5E_CANTUNPROTECT, FAIL, "unable to unprotect old root")
|
||||
|
||||
if(split_bt_ud.bt)
|
||||
if(H5AC_unprotect(f, dxpl_id, H5AC_BT, split_bt_ud.addr, split_bt_ud.bt, split_bt_ud.cache_flags) < 0)
|
||||
if(H5AC_unprotect(f, H5AC_BT, split_bt_ud.addr, split_bt_ud.bt, split_bt_ud.cache_flags) < 0)
|
||||
HDONE_ERROR(H5E_BTREE, H5E_CANTUNPROTECT, FAIL, "unable to unprotect new child")
|
||||
|
||||
#ifdef H5B_DEBUG
|
||||
if(ret_value >= 0)
|
||||
H5B__assert(f, dxpl_id, addr, type, udata);
|
||||
H5B__assert(f, addr, type, udata);
|
||||
#endif
|
||||
|
||||
FUNC_LEAVE_NOAPI(ret_value)
|
||||
@ -805,12 +794,9 @@ H5B__insert_child(H5B_t *bt, unsigned *bt_flags, unsigned idx,
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static H5B_ins_t
|
||||
H5B__insert_helper(H5F_t *f, hid_t dxpl_id, H5B_ins_ud_t *bt_ud,
|
||||
const H5B_class_t *type,
|
||||
uint8_t *lt_key, hbool_t *lt_key_changed,
|
||||
uint8_t *md_key, void *udata,
|
||||
uint8_t *rt_key, hbool_t *rt_key_changed,
|
||||
H5B_ins_ud_t *split_bt_ud/*out*/)
|
||||
H5B__insert_helper(H5F_t *f, H5B_ins_ud_t *bt_ud, const H5B_class_t *type,
|
||||
uint8_t *lt_key, hbool_t *lt_key_changed, uint8_t *md_key, void *udata,
|
||||
uint8_t *rt_key, hbool_t *rt_key_changed, H5B_ins_ud_t *split_bt_ud/*out*/)
|
||||
{
|
||||
H5B_t *bt; /* Convenience pointer to B-tree */
|
||||
H5UC_t *rc_shared; /* Ref-counted shared info */
|
||||
@ -882,7 +868,7 @@ H5B__insert_helper(H5F_t *f, hid_t dxpl_id, H5B_ins_ud_t *bt_ud,
|
||||
* must necessarily be at level zero.
|
||||
*/
|
||||
HDassert(0 == bt->level);
|
||||
if((type->new_node)(f, dxpl_id, H5B_INS_FIRST, H5B_NKEY(bt, shared, 0), udata,
|
||||
if((type->new_node)(f, H5B_INS_FIRST, H5B_NKEY(bt, shared, 0), udata,
|
||||
H5B_NKEY(bt, shared, 1), bt->child + 0/*out*/) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTINIT, H5B_INS_ERROR, "unable to create leaf node")
|
||||
bt->nchildren = 1;
|
||||
@ -890,7 +876,7 @@ H5B__insert_helper(H5F_t *f, hid_t dxpl_id, H5B_ins_ud_t *bt_ud,
|
||||
idx = 0;
|
||||
|
||||
if(type->follow_min) {
|
||||
if((int)(my_ins = (type->insert)(f, dxpl_id, bt->child[idx], H5B_NKEY(bt, shared, idx),
|
||||
if((int)(my_ins = (type->insert)(f, bt->child[idx], H5B_NKEY(bt, shared, idx),
|
||||
lt_key_changed, md_key, udata, H5B_NKEY(bt, shared, idx + 1),
|
||||
rt_key_changed, &new_child_bt_ud.addr/*out*/)) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTINSERT, H5B_INS_ERROR, "unable to insert first leaf node")
|
||||
@ -904,10 +890,10 @@ H5B__insert_helper(H5F_t *f, hid_t dxpl_id, H5B_ins_ud_t *bt_ud,
|
||||
* Follow the minimum branch out of this node to a subtree.
|
||||
*/
|
||||
child_bt_ud.addr = bt->child[idx];
|
||||
if(NULL == (child_bt_ud.bt = (H5B_t *)H5AC_protect(f, dxpl_id, H5AC_BT, child_bt_ud.addr, &cache_udata, H5AC__NO_FLAGS_SET)))
|
||||
if(NULL == (child_bt_ud.bt = (H5B_t *)H5AC_protect(f, H5AC_BT, child_bt_ud.addr, &cache_udata, H5AC__NO_FLAGS_SET)))
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, H5B_INS_ERROR, "unable to load node")
|
||||
|
||||
if((int)(my_ins = H5B__insert_helper(f, dxpl_id, &child_bt_ud, type,
|
||||
if((int)(my_ins = H5B__insert_helper(f, &child_bt_ud, type,
|
||||
H5B_NKEY(bt,shared,idx), lt_key_changed, md_key,
|
||||
udata, H5B_NKEY(bt, shared, idx + 1), rt_key_changed,
|
||||
&new_child_bt_ud/*out*/)) < 0)
|
||||
@ -918,7 +904,7 @@ H5B__insert_helper(H5F_t *f, hid_t dxpl_id, H5B_ins_ud_t *bt_ud,
|
||||
* current node. Follow the minimum branch to a leaf node and let
|
||||
* the subclass handle the problem.
|
||||
*/
|
||||
if((int)(my_ins = (type->insert)(f, dxpl_id, bt->child[idx], H5B_NKEY(bt, shared, idx),
|
||||
if((int)(my_ins = (type->insert)(f, bt->child[idx], H5B_NKEY(bt, shared, idx),
|
||||
lt_key_changed, md_key, udata, H5B_NKEY(bt, shared, idx + 1),
|
||||
rt_key_changed, &new_child_bt_ud.addr/*out*/)) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTINSERT, H5B_INS_ERROR, "can't insert minimum leaf node")
|
||||
@ -930,7 +916,7 @@ H5B__insert_helper(H5F_t *f, hid_t dxpl_id, H5B_ins_ud_t *bt_ud,
|
||||
*/
|
||||
my_ins = H5B_INS_LEFT;
|
||||
HDmemcpy(md_key, H5B_NKEY(bt,shared,idx), type->sizeof_nkey);
|
||||
if((type->new_node)(f, dxpl_id, H5B_INS_LEFT, H5B_NKEY(bt, shared, idx), udata,
|
||||
if((type->new_node)(f, H5B_INS_LEFT, H5B_NKEY(bt, shared, idx), udata,
|
||||
md_key, &new_child_bt_ud.addr/*out*/) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTINSERT, H5B_INS_ERROR, "can't insert minimum leaf node")
|
||||
*lt_key_changed = TRUE;
|
||||
@ -950,10 +936,10 @@ H5B__insert_helper(H5F_t *f, hid_t dxpl_id, H5B_ins_ud_t *bt_ud,
|
||||
*/
|
||||
idx = bt->nchildren - 1;
|
||||
child_bt_ud.addr = bt->child[idx];
|
||||
if(NULL == (child_bt_ud.bt = (H5B_t *)H5AC_protect(f, dxpl_id, H5AC_BT, child_bt_ud.addr, &cache_udata, H5AC__NO_FLAGS_SET)))
|
||||
if(NULL == (child_bt_ud.bt = (H5B_t *)H5AC_protect(f, H5AC_BT, child_bt_ud.addr, &cache_udata, H5AC__NO_FLAGS_SET)))
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, H5B_INS_ERROR, "unable to load node")
|
||||
|
||||
if((int)(my_ins = H5B__insert_helper(f, dxpl_id, &child_bt_ud, type,
|
||||
if((int)(my_ins = H5B__insert_helper(f, &child_bt_ud, type,
|
||||
H5B_NKEY(bt, shared, idx), lt_key_changed, md_key, udata,
|
||||
H5B_NKEY(bt, shared, idx + 1), rt_key_changed,
|
||||
&new_child_bt_ud/*out*/)) < 0)
|
||||
@ -965,7 +951,7 @@ H5B__insert_helper(H5F_t *f, hid_t dxpl_id, H5B_ins_ud_t *bt_ud,
|
||||
* the subclass handle the problem.
|
||||
*/
|
||||
idx = bt->nchildren - 1;
|
||||
if((int)(my_ins = (type->insert)(f, dxpl_id, bt->child[idx], H5B_NKEY(bt, shared, idx),
|
||||
if((int)(my_ins = (type->insert)(f, bt->child[idx], H5B_NKEY(bt, shared, idx),
|
||||
lt_key_changed, md_key, udata, H5B_NKEY(bt, shared, idx + 1),
|
||||
rt_key_changed, &new_child_bt_ud.addr/*out*/)) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTINSERT, H5B_INS_ERROR, "can't insert maximum leaf node")
|
||||
@ -978,7 +964,7 @@ H5B__insert_helper(H5F_t *f, hid_t dxpl_id, H5B_ins_ud_t *bt_ud,
|
||||
idx = bt->nchildren - 1;
|
||||
my_ins = H5B_INS_RIGHT;
|
||||
HDmemcpy(md_key, H5B_NKEY(bt, shared, idx + 1), type->sizeof_nkey);
|
||||
if((type->new_node)(f, dxpl_id, H5B_INS_RIGHT, md_key, udata,
|
||||
if((type->new_node)(f, H5B_INS_RIGHT, md_key, udata,
|
||||
H5B_NKEY(bt, shared, idx + 1), &new_child_bt_ud.addr/*out*/) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTINSERT, H5B_INS_ERROR, "can't insert maximum leaf node")
|
||||
*rt_key_changed = TRUE;
|
||||
@ -1005,10 +991,10 @@ H5B__insert_helper(H5F_t *f, hid_t dxpl_id, H5B_ins_ud_t *bt_ud,
|
||||
*/
|
||||
HDassert(idx < bt->nchildren);
|
||||
child_bt_ud.addr = bt->child[idx];
|
||||
if(NULL == (child_bt_ud.bt = (H5B_t *)H5AC_protect(f, dxpl_id, H5AC_BT, child_bt_ud.addr, &cache_udata, H5AC__NO_FLAGS_SET)))
|
||||
if(NULL == (child_bt_ud.bt = (H5B_t *)H5AC_protect(f, H5AC_BT, child_bt_ud.addr, &cache_udata, H5AC__NO_FLAGS_SET)))
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, H5B_INS_ERROR, "unable to load node")
|
||||
|
||||
if((int)(my_ins = H5B__insert_helper(f, dxpl_id, &child_bt_ud, type,
|
||||
if((int)(my_ins = H5B__insert_helper(f, &child_bt_ud, type,
|
||||
H5B_NKEY(bt, shared, idx), lt_key_changed, md_key, udata,
|
||||
H5B_NKEY(bt, shared, idx + 1), rt_key_changed, &new_child_bt_ud/*out*/)) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTINSERT, H5B_INS_ERROR, "can't insert subtree")
|
||||
@ -1017,7 +1003,7 @@ H5B__insert_helper(H5F_t *f, hid_t dxpl_id, H5B_ins_ud_t *bt_ud,
|
||||
* Follow a branch out of this node to a leaf node of some other type.
|
||||
*/
|
||||
HDassert(idx < bt->nchildren);
|
||||
if((int)(my_ins = (type->insert)(f, dxpl_id, bt->child[idx], H5B_NKEY(bt, shared, idx),
|
||||
if((int)(my_ins = (type->insert)(f, bt->child[idx], H5B_NKEY(bt, shared, idx),
|
||||
lt_key_changed, md_key, udata, H5B_NKEY(bt, shared, idx + 1),
|
||||
rt_key_changed, &new_child_bt_ud.addr/*out*/)) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTINSERT, H5B_INS_ERROR, "can't insert leaf node")
|
||||
@ -1068,7 +1054,7 @@ H5B__insert_helper(H5F_t *f, hid_t dxpl_id, H5B_ins_ud_t *bt_ud,
|
||||
* If this node is full then split it before inserting the new child.
|
||||
*/
|
||||
if(bt->nchildren == shared->two_k) {
|
||||
if(H5B__split(f, dxpl_id, bt_ud, idx, udata, split_bt_ud/*out*/) < 0)
|
||||
if(H5B__split(f, bt_ud, idx, udata, split_bt_ud/*out*/) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTSPLIT, H5B_INS_ERROR, "unable to split node")
|
||||
if(idx < bt->nchildren) {
|
||||
tmp_bt = bt;
|
||||
@ -1111,11 +1097,11 @@ H5B__insert_helper(H5F_t *f, hid_t dxpl_id, H5B_ins_ud_t *bt_ud,
|
||||
|
||||
done:
|
||||
if(child_bt_ud.bt)
|
||||
if(H5AC_unprotect(f, dxpl_id, H5AC_BT, child_bt_ud.addr, child_bt_ud.bt, child_bt_ud.cache_flags) < 0)
|
||||
if(H5AC_unprotect(f, H5AC_BT, child_bt_ud.addr, child_bt_ud.bt, child_bt_ud.cache_flags) < 0)
|
||||
HDONE_ERROR(H5E_BTREE, H5E_CANTUNPROTECT, H5B_INS_ERROR, "unable to unprotect child")
|
||||
|
||||
if(new_child_bt_ud.bt)
|
||||
if(H5AC_unprotect(f, dxpl_id, H5AC_BT, new_child_bt_ud.addr, new_child_bt_ud.bt, new_child_bt_ud.cache_flags) < 0)
|
||||
if(H5AC_unprotect(f, H5AC_BT, new_child_bt_ud.addr, new_child_bt_ud.bt, new_child_bt_ud.cache_flags) < 0)
|
||||
HDONE_ERROR(H5E_BTREE, H5E_CANTUNPROTECT, H5B_INS_ERROR, "unable to unprotect new child")
|
||||
|
||||
FUNC_LEAVE_NOAPI(ret_value)
|
||||
@ -1137,7 +1123,7 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static herr_t
|
||||
H5B__iterate_helper(H5F_t *f, hid_t dxpl_id, const H5B_class_t *type, haddr_t addr,
|
||||
H5B__iterate_helper(H5F_t *f, const H5B_class_t *type, haddr_t addr,
|
||||
H5B_operator_t op, void *udata)
|
||||
{
|
||||
H5B_t *bt = NULL; /* Pointer to current B-tree node */
|
||||
@ -1168,21 +1154,21 @@ H5B__iterate_helper(H5F_t *f, hid_t dxpl_id, const H5B_class_t *type, haddr_t ad
|
||||
cache_udata.f = f;
|
||||
cache_udata.type = type;
|
||||
cache_udata.rc_shared = rc_shared;
|
||||
if(NULL == (bt = (H5B_t *)H5AC_protect(f, dxpl_id, H5AC_BT, addr, &cache_udata, H5AC__READ_ONLY_FLAG)))
|
||||
if(NULL == (bt = (H5B_t *)H5AC_protect(f, H5AC_BT, addr, &cache_udata, H5AC__READ_ONLY_FLAG)))
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, H5_ITER_ERROR, "unable to load B-tree node")
|
||||
|
||||
/* Iterate over node's children */
|
||||
for(u = 0; u < bt->nchildren && ret_value == H5_ITER_CONT; u++) {
|
||||
if(bt->level > 0)
|
||||
ret_value = H5B__iterate_helper(f, dxpl_id, type, bt->child[u], op, udata);
|
||||
ret_value = H5B__iterate_helper(f, type, bt->child[u], op, udata);
|
||||
else
|
||||
ret_value = (*op)(f, dxpl_id, H5B_NKEY(bt, shared, u), bt->child[u], H5B_NKEY(bt, shared, u + 1), udata);
|
||||
ret_value = (*op)(f, H5B_NKEY(bt, shared, u), bt->child[u], H5B_NKEY(bt, shared, u + 1), udata);
|
||||
if(ret_value < 0)
|
||||
HERROR(H5E_BTREE, H5E_BADITER, "B-tree iteration failed");
|
||||
} /* end for */
|
||||
|
||||
done:
|
||||
if(bt && H5AC_unprotect(f, dxpl_id, H5AC_BT, addr, bt, H5AC__NO_FLAGS_SET) < 0)
|
||||
if(bt && H5AC_unprotect(f, H5AC_BT, addr, bt, H5AC__NO_FLAGS_SET) < 0)
|
||||
HDONE_ERROR(H5E_BTREE, H5E_CANTUNPROTECT, H5_ITER_ERROR, "unable to release B-tree node")
|
||||
|
||||
FUNC_LEAVE_NOAPI(ret_value)
|
||||
@ -1204,7 +1190,7 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
herr_t
|
||||
H5B_iterate(H5F_t *f, hid_t dxpl_id, const H5B_class_t *type, haddr_t addr,
|
||||
H5B_iterate(H5F_t *f, const H5B_class_t *type, haddr_t addr,
|
||||
H5B_operator_t op, void *udata)
|
||||
{
|
||||
herr_t ret_value = FAIL; /* Return value */
|
||||
@ -1221,7 +1207,7 @@ H5B_iterate(H5F_t *f, hid_t dxpl_id, const H5B_class_t *type, haddr_t addr,
|
||||
HDassert(udata);
|
||||
|
||||
/* Iterate over the B-tree records */
|
||||
if((ret_value = H5B__iterate_helper(f, dxpl_id, type, addr, op, udata)) < 0)
|
||||
if((ret_value = H5B__iterate_helper(f, type, addr, op, udata)) < 0)
|
||||
HERROR(H5E_BTREE, H5E_BADITER, "B-tree iteration failed");
|
||||
|
||||
FUNC_LEAVE_NOAPI(ret_value)
|
||||
@ -1253,10 +1239,9 @@ H5B_iterate(H5F_t *f, hid_t dxpl_id, const H5B_class_t *type, haddr_t addr,
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static H5B_ins_t
|
||||
H5B__remove_helper(H5F_t *f, hid_t dxpl_id, haddr_t addr, const H5B_class_t *type,
|
||||
int level, uint8_t *lt_key/*out*/,
|
||||
hbool_t *lt_key_changed/*out*/, void *udata,
|
||||
uint8_t *rt_key/*out*/, hbool_t *rt_key_changed/*out*/)
|
||||
H5B__remove_helper(H5F_t *f, haddr_t addr, const H5B_class_t *type, int level,
|
||||
uint8_t *lt_key/*out*/, hbool_t *lt_key_changed/*out*/, void *udata,
|
||||
uint8_t *rt_key/*out*/, hbool_t *rt_key_changed/*out*/)
|
||||
{
|
||||
H5B_t *bt = NULL, *sibling = NULL;
|
||||
unsigned bt_flags = H5AC__NO_FLAGS_SET;
|
||||
@ -1291,7 +1276,7 @@ H5B__remove_helper(H5F_t *f, hid_t dxpl_id, haddr_t addr, const H5B_class_t *typ
|
||||
cache_udata.f = f;
|
||||
cache_udata.type = type;
|
||||
cache_udata.rc_shared = rc_shared;
|
||||
if(NULL == (bt = (H5B_t *)H5AC_protect(f, dxpl_id, H5AC_BT, addr, &cache_udata, H5AC__NO_FLAGS_SET)))
|
||||
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")
|
||||
|
||||
rt = bt->nchildren;
|
||||
@ -1312,9 +1297,9 @@ H5B__remove_helper(H5F_t *f, hid_t dxpl_id, haddr_t addr, const H5B_class_t *typ
|
||||
HDassert(idx < bt->nchildren);
|
||||
if(bt->level > 0) {
|
||||
/* We're at an internal node -- call recursively */
|
||||
if((int)(ret_value = H5B__remove_helper(f, dxpl_id,
|
||||
bt->child[idx], type, level + 1, H5B_NKEY(bt, shared, idx)/*out*/,
|
||||
lt_key_changed/*out*/, udata, H5B_NKEY(bt, shared, idx + 1)/*out*/,
|
||||
if((int)(ret_value = H5B__remove_helper(f, bt->child[idx], type,
|
||||
level + 1, H5B_NKEY(bt, shared, idx)/*out*/,
|
||||
lt_key_changed/*out*/, udata, H5B_NKEY(bt, shared, idx + 1)/*out*/,
|
||||
rt_key_changed/*out*/)) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_NOTFOUND, H5B_INS_ERROR, "key not found in subtree")
|
||||
} else if(type->remove) {
|
||||
@ -1323,9 +1308,9 @@ H5B__remove_helper(H5F_t *f, hid_t dxpl_id, haddr_t addr, const H5B_class_t *typ
|
||||
* has a removal method. Pass the removal request to the pointed-to
|
||||
* object and let it decide how to progress.
|
||||
*/
|
||||
if((int)(ret_value = (type->remove)(f, dxpl_id,
|
||||
bt->child[idx], H5B_NKEY(bt, shared, idx), lt_key_changed, udata,
|
||||
H5B_NKEY(bt, shared, idx + 1), rt_key_changed)) < 0)
|
||||
if((int)(ret_value = (type->remove)(f, bt->child[idx],
|
||||
H5B_NKEY(bt, shared, idx), lt_key_changed, udata,
|
||||
H5B_NKEY(bt, shared, idx + 1), rt_key_changed)) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_NOTFOUND, H5B_INS_ERROR, "key not found in leaf node")
|
||||
} else {
|
||||
/*
|
||||
@ -1391,7 +1376,7 @@ H5B__remove_helper(H5F_t *f, hid_t dxpl_id, haddr_t addr, const H5B_class_t *typ
|
||||
* "critical" for any child in its node to maintain this
|
||||
* consistency (and avoid breaking key/child consistency) */
|
||||
if(H5F_addr_defined(bt->left)) {
|
||||
if(NULL == (sibling = (H5B_t *)H5AC_protect(f, dxpl_id, H5AC_BT, bt->left, &cache_udata, H5AC__NO_FLAGS_SET)))
|
||||
if(NULL == (sibling = (H5B_t *)H5AC_protect(f, H5AC_BT, bt->left, &cache_udata, H5AC__NO_FLAGS_SET)))
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, H5B_INS_ERROR, "unable to load node from tree")
|
||||
|
||||
/* Copy right-most key from deleted node to right-most key
|
||||
@ -1403,12 +1388,12 @@ H5B__remove_helper(H5F_t *f, hid_t dxpl_id, haddr_t addr, const H5B_class_t *typ
|
||||
|
||||
sibling->right = bt->right;
|
||||
|
||||
if(H5AC_unprotect(f, dxpl_id, H5AC_BT, bt->left, sibling, H5AC__DIRTIED_FLAG) < 0)
|
||||
if(H5AC_unprotect(f, H5AC_BT, bt->left, sibling, H5AC__DIRTIED_FLAG) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTUNPROTECT, H5B_INS_ERROR, "unable to release node from tree")
|
||||
sibling = NULL; /* Make certain future references will be caught */
|
||||
} /* end if */
|
||||
if(H5F_addr_defined(bt->right)) {
|
||||
if(NULL == (sibling = (H5B_t *)H5AC_protect(f, dxpl_id, H5AC_BT, bt->right, &cache_udata, H5AC__NO_FLAGS_SET)))
|
||||
if(NULL == (sibling = (H5B_t *)H5AC_protect(f, H5AC_BT, bt->right, &cache_udata, H5AC__NO_FLAGS_SET)))
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, H5B_INS_ERROR, "unable to unlink node from tree")
|
||||
|
||||
/* Copy left-most key from deleted node to left-most key in
|
||||
@ -1420,7 +1405,7 @@ H5B__remove_helper(H5F_t *f, hid_t dxpl_id, haddr_t addr, const H5B_class_t *typ
|
||||
|
||||
sibling->left = bt->left;
|
||||
|
||||
if(H5AC_unprotect(f, dxpl_id, H5AC_BT, bt->right, sibling, H5AC__DIRTIED_FLAG) < 0)
|
||||
if(H5AC_unprotect(f, H5AC_BT, bt->right, sibling, H5AC__DIRTIED_FLAG) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTUNPROTECT, H5B_INS_ERROR, "unable to release node from tree")
|
||||
sibling = NULL; /* Make certain future references will be caught */
|
||||
} /* end if */
|
||||
@ -1433,7 +1418,7 @@ H5B__remove_helper(H5F_t *f, hid_t dxpl_id, haddr_t addr, const H5B_class_t *typ
|
||||
/* Delete the node from disk (via the metadata cache) */
|
||||
bt_flags |= H5AC__DIRTIED_FLAG | H5AC__FREE_FILE_SPACE_FLAG;
|
||||
H5_CHECK_OVERFLOW(shared->sizeof_rnode, size_t, hsize_t);
|
||||
if(H5AC_unprotect(f, dxpl_id, H5AC_BT, addr, bt, bt_flags | H5AC__DELETED_FLAG) < 0) {
|
||||
if(H5AC_unprotect(f, H5AC_BT, addr, bt, bt_flags | H5AC__DELETED_FLAG) < 0) {
|
||||
bt = NULL;
|
||||
bt_flags = H5AC__NO_FLAGS_SET;
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTUNPROTECT, H5B_INS_ERROR, "unable to free B-tree node")
|
||||
@ -1528,13 +1513,13 @@ H5B__remove_helper(H5F_t *f, hid_t dxpl_id, haddr_t addr, const H5B_class_t *typ
|
||||
HDassert(level > 0);
|
||||
|
||||
/* Update the rightmost key in the left sibling */
|
||||
if(NULL == (sibling = (H5B_t *)H5AC_protect(f, dxpl_id, H5AC_BT, bt->left, &cache_udata, H5AC__NO_FLAGS_SET)))
|
||||
if(NULL == (sibling = (H5B_t *)H5AC_protect(f, H5AC_BT, bt->left, &cache_udata, H5AC__NO_FLAGS_SET)))
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, H5B_INS_ERROR, "unable to protect node")
|
||||
|
||||
HDmemcpy(H5B_NKEY(sibling, shared, sibling->nchildren),
|
||||
H5B_NKEY(bt, shared, 0), type->sizeof_nkey);
|
||||
|
||||
if(H5AC_unprotect(f, dxpl_id, H5AC_BT, bt->left, sibling, H5AC__DIRTIED_FLAG) < 0)
|
||||
if(H5AC_unprotect(f, H5AC_BT, bt->left, sibling, H5AC__DIRTIED_FLAG) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTUNPROTECT, H5B_INS_ERROR, "unable to release node from tree")
|
||||
sibling = NULL; /* Make certain future references will be caught */
|
||||
} /* end if */
|
||||
@ -1543,19 +1528,19 @@ H5B__remove_helper(H5F_t *f, hid_t dxpl_id, haddr_t addr, const H5B_class_t *typ
|
||||
HDassert(level > 0);
|
||||
|
||||
/* Update the lefttmost key in the right sibling */
|
||||
if(NULL == (sibling = (H5B_t *)H5AC_protect(f, dxpl_id, H5AC_BT, bt->right, &cache_udata, H5AC__NO_FLAGS_SET)))
|
||||
if(NULL == (sibling = (H5B_t *)H5AC_protect(f, H5AC_BT, bt->right, &cache_udata, H5AC__NO_FLAGS_SET)))
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, H5B_INS_ERROR, "unable to protect node")
|
||||
|
||||
HDmemcpy(H5B_NKEY(sibling, shared, 0),
|
||||
H5B_NKEY(bt, shared, bt->nchildren), type->sizeof_nkey);
|
||||
|
||||
if(H5AC_unprotect(f, dxpl_id, H5AC_BT, bt->right, sibling, H5AC__DIRTIED_FLAG) < 0)
|
||||
if(H5AC_unprotect(f, H5AC_BT, bt->right, sibling, H5AC__DIRTIED_FLAG) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTUNPROTECT, H5B_INS_ERROR, "unable to release node from tree")
|
||||
sibling = NULL; /* Make certain future references will be caught */
|
||||
} /* end else */
|
||||
|
||||
done:
|
||||
if(bt && H5AC_unprotect(f, dxpl_id, H5AC_BT, addr, bt, bt_flags) < 0)
|
||||
if(bt && H5AC_unprotect(f, H5AC_BT, addr, bt, bt_flags) < 0)
|
||||
HDONE_ERROR(H5E_BTREE, H5E_CANTUNPROTECT, H5B_INS_ERROR, "unable to release node")
|
||||
|
||||
FUNC_LEAVE_NOAPI(ret_value)
|
||||
@ -1579,7 +1564,7 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
herr_t
|
||||
H5B_remove(H5F_t *f, hid_t dxpl_id, const H5B_class_t *type, haddr_t addr, void *udata)
|
||||
H5B_remove(H5F_t *f, const H5B_class_t *type, haddr_t addr, void *udata)
|
||||
{
|
||||
/* These are defined this way to satisfy alignment constraints */
|
||||
uint64_t _lt_key[128], _rt_key[128];
|
||||
@ -1598,16 +1583,15 @@ H5B_remove(H5F_t *f, hid_t dxpl_id, const H5B_class_t *type, haddr_t addr, void
|
||||
HDassert(H5F_addr_defined(addr));
|
||||
|
||||
/* The actual removal */
|
||||
if(H5B__remove_helper(f, dxpl_id, addr, type, 0, lt_key, <_key_changed,
|
||||
udata, rt_key, &rt_key_changed) == H5B_INS_ERROR)
|
||||
if(H5B_INS_ERROR == H5B__remove_helper(f, addr, type, 0, lt_key, <_key_changed, udata, rt_key, &rt_key_changed))
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTINIT, FAIL, "unable to remove entry from B-tree")
|
||||
|
||||
#ifdef H5B_DEBUG
|
||||
H5B__assert(f, dxpl_id, addr, type, udata);
|
||||
H5B__assert(f, addr, type, udata);
|
||||
#endif
|
||||
done:
|
||||
FUNC_LEAVE_NOAPI(ret_value)
|
||||
}
|
||||
} /* end H5B_remove() */
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
@ -1624,7 +1608,7 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
herr_t
|
||||
H5B_delete(H5F_t *f, hid_t dxpl_id, const H5B_class_t *type, haddr_t addr, void *udata)
|
||||
H5B_delete(H5F_t *f, const H5B_class_t *type, haddr_t addr, void *udata)
|
||||
{
|
||||
H5B_t *bt = NULL; /* B-tree node being operated on */
|
||||
H5UC_t *rc_shared; /* Ref-counted shared info */
|
||||
@ -1650,14 +1634,14 @@ H5B_delete(H5F_t *f, hid_t dxpl_id, const H5B_class_t *type, haddr_t addr, void
|
||||
cache_udata.f = f;
|
||||
cache_udata.type = type;
|
||||
cache_udata.rc_shared = rc_shared;
|
||||
if(NULL == (bt = (H5B_t *)H5AC_protect(f, dxpl_id, H5AC_BT, addr, &cache_udata, H5AC__NO_FLAGS_SET)))
|
||||
if(NULL == (bt = (H5B_t *)H5AC_protect(f, H5AC_BT, addr, &cache_udata, H5AC__NO_FLAGS_SET)))
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to load B-tree node")
|
||||
|
||||
/* Iterate over all children in tree, deleting them */
|
||||
if(bt->level > 0) {
|
||||
/* Iterate over all children in node, deleting them */
|
||||
for(u = 0; u < bt->nchildren; u++)
|
||||
if(H5B_delete(f, dxpl_id, type, bt->child[u], udata) < 0)
|
||||
if(H5B_delete(f, type, bt->child[u], udata) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTLIST, FAIL, "unable to delete B-tree node")
|
||||
|
||||
} /* end if */
|
||||
@ -1669,16 +1653,16 @@ H5B_delete(H5F_t *f, hid_t dxpl_id, const H5B_class_t *type, haddr_t addr, void
|
||||
/* Iterate over all entries in node, calling callback */
|
||||
for(u = 0; u < bt->nchildren; u++) {
|
||||
/* Call user's callback for each entry */
|
||||
if((type->remove)(f, dxpl_id,
|
||||
bt->child[u], H5B_NKEY(bt, shared, u), <_key_changed, udata,
|
||||
H5B_NKEY(bt, shared, u + 1), &rt_key_changed) < H5B_INS_NOOP)
|
||||
if((type->remove)(f, bt->child[u], H5B_NKEY(bt, shared, u),
|
||||
<_key_changed, udata, H5B_NKEY(bt, shared, u + 1),
|
||||
&rt_key_changed) < H5B_INS_NOOP)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_NOTFOUND, FAIL, "can't remove B-tree node")
|
||||
} /* end for */
|
||||
} /* end if */
|
||||
} /* end else */
|
||||
|
||||
done:
|
||||
if(bt && H5AC_unprotect(f, dxpl_id, H5AC_BT, addr, bt, H5AC__DELETED_FLAG | H5AC__FREE_FILE_SPACE_FLAG) < 0)
|
||||
if(bt && H5AC_unprotect(f, H5AC_BT, addr, bt, H5AC__DELETED_FLAG | H5AC__FREE_FILE_SPACE_FLAG) < 0)
|
||||
HDONE_ERROR(H5E_BTREE, H5E_CANTUNPROTECT, FAIL, "unable to release B-tree node in cache")
|
||||
|
||||
FUNC_LEAVE_NOAPI(ret_value)
|
||||
@ -1873,7 +1857,7 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static herr_t
|
||||
H5B__get_info_helper(H5F_t *f, hid_t dxpl_id, const H5B_class_t *type, haddr_t addr,
|
||||
H5B__get_info_helper(H5F_t *f, const H5B_class_t *type, haddr_t addr,
|
||||
const H5B_info_ud_t *info_udata)
|
||||
{
|
||||
H5B_t *bt = NULL; /* Pointer to current B-tree node */
|
||||
@ -1911,7 +1895,7 @@ H5B__get_info_helper(H5F_t *f, hid_t dxpl_id, const H5B_class_t *type, haddr_t a
|
||||
cache_udata.f = f;
|
||||
cache_udata.type = type;
|
||||
cache_udata.rc_shared = rc_shared;
|
||||
if(NULL == (bt = (H5B_t *)H5AC_protect(f, dxpl_id, H5AC_BT, addr, &cache_udata, H5AC__READ_ONLY_FLAG)))
|
||||
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")
|
||||
|
||||
/* Cache information from this node */
|
||||
@ -1924,7 +1908,7 @@ H5B__get_info_helper(H5F_t *f, hid_t dxpl_id, const H5B_class_t *type, haddr_t a
|
||||
info_udata->bt_info->num_nodes++;
|
||||
|
||||
/* Release current node */
|
||||
if(H5AC_unprotect(f, dxpl_id, H5AC_BT, addr, bt, H5AC__NO_FLAGS_SET) < 0)
|
||||
if(H5AC_unprotect(f, H5AC_BT, addr, bt, H5AC__NO_FLAGS_SET) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTUNPROTECT, FAIL, "unable to release B-tree node")
|
||||
bt = NULL;
|
||||
|
||||
@ -1935,7 +1919,7 @@ H5B__get_info_helper(H5F_t *f, hid_t dxpl_id, const H5B_class_t *type, haddr_t a
|
||||
while(H5F_addr_defined(next_addr)) {
|
||||
/* Protect the next node to the right */
|
||||
addr = next_addr;
|
||||
if(NULL == (bt = (H5B_t *)H5AC_protect(f, dxpl_id, H5AC_BT, addr, &cache_udata, H5AC__READ_ONLY_FLAG)))
|
||||
if(NULL == (bt = (H5B_t *)H5AC_protect(f, H5AC_BT, addr, &cache_udata, H5AC__READ_ONLY_FLAG)))
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "B-tree node")
|
||||
|
||||
/* Cache information from this node */
|
||||
@ -1946,7 +1930,7 @@ H5B__get_info_helper(H5F_t *f, hid_t dxpl_id, const H5B_class_t *type, haddr_t a
|
||||
info_udata->bt_info->num_nodes++;
|
||||
|
||||
/* Unprotect node */
|
||||
if(H5AC_unprotect(f, dxpl_id, H5AC_BT, addr, bt, H5AC__NO_FLAGS_SET) < 0)
|
||||
if(H5AC_unprotect(f, H5AC_BT, addr, bt, H5AC__NO_FLAGS_SET) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTUNPROTECT, FAIL, "unable to release B-tree node")
|
||||
bt = NULL;
|
||||
} /* end while */
|
||||
@ -1954,12 +1938,12 @@ H5B__get_info_helper(H5F_t *f, hid_t dxpl_id, const H5B_class_t *type, haddr_t a
|
||||
/* Check for another "row" of B-tree nodes to iterate over */
|
||||
if(level > 0) {
|
||||
/* Keep following the left-most child until we reach a leaf node. */
|
||||
if(H5B__get_info_helper(f, dxpl_id, type, left_child, info_udata) < 0)
|
||||
if(H5B__get_info_helper(f, type, left_child, info_udata) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTLIST, FAIL, "unable to list B-tree node")
|
||||
} /* end if */
|
||||
|
||||
done:
|
||||
if(bt && H5AC_unprotect(f, dxpl_id, H5AC_BT, addr, bt, H5AC__NO_FLAGS_SET) < 0)
|
||||
if(bt && H5AC_unprotect(f, H5AC_BT, addr, bt, H5AC__NO_FLAGS_SET) < 0)
|
||||
HDONE_ERROR(H5E_BTREE, H5E_CANTUNPROTECT, FAIL, "unable to release B-tree node")
|
||||
|
||||
FUNC_LEAVE_NOAPI(ret_value)
|
||||
@ -1979,7 +1963,7 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
herr_t
|
||||
H5B_get_info(H5F_t *f, hid_t dxpl_id, const H5B_class_t *type, haddr_t addr,
|
||||
H5B_get_info(H5F_t *f, const H5B_class_t *type, haddr_t addr,
|
||||
H5B_info_t *bt_info, H5B_operator_t op, void *udata)
|
||||
{
|
||||
H5B_info_ud_t info_udata; /* User-data for B-tree size iteration */
|
||||
@ -2004,13 +1988,13 @@ H5B_get_info(H5F_t *f, hid_t dxpl_id, const H5B_class_t *type, haddr_t addr,
|
||||
info_udata.udata = udata;
|
||||
|
||||
/* Iterate over the B-tree nodes */
|
||||
if(H5B__get_info_helper(f, dxpl_id, type, addr, &info_udata) < 0)
|
||||
if(H5B__get_info_helper(f, type, addr, &info_udata) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_BADITER, FAIL, "B-tree iteration failed")
|
||||
|
||||
/* Iterate over the B-tree records, making any "leaf" callbacks */
|
||||
/* (Only if operator defined) */
|
||||
if(op)
|
||||
if((ret_value = H5B__iterate_helper(f, dxpl_id, type, addr, op, udata)) < 0)
|
||||
if((ret_value = H5B__iterate_helper(f, type, addr, op, udata)) < 0)
|
||||
HERROR(H5E_BTREE, H5E_BADITER, "B-tree iteration failed");
|
||||
|
||||
done:
|
||||
@ -2031,7 +2015,7 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
htri_t
|
||||
H5B_valid(H5F_t *f, hid_t dxpl_id, const H5B_class_t *type, haddr_t addr)
|
||||
H5B_valid(H5F_t *f, const H5B_class_t *type, haddr_t addr)
|
||||
{
|
||||
H5B_t *bt = NULL; /* The B-tree */
|
||||
H5UC_t *rc_shared; /* Ref-counted shared info */
|
||||
@ -2062,12 +2046,12 @@ H5B_valid(H5F_t *f, hid_t dxpl_id, const H5B_class_t *type, haddr_t addr)
|
||||
cache_udata.f = f;
|
||||
cache_udata.type = type;
|
||||
cache_udata.rc_shared = rc_shared;
|
||||
if(NULL == (bt = (H5B_t *)H5AC_protect(f, dxpl_id, H5AC_BT, addr, &cache_udata, H5AC__READ_ONLY_FLAG)))
|
||||
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 protect B-tree node")
|
||||
|
||||
done:
|
||||
/* Release the node */
|
||||
if(bt && H5AC_unprotect(f, dxpl_id, H5AC_BT, addr, bt, H5AC__NO_FLAGS_SET) < 0)
|
||||
if(bt && H5AC_unprotect(f, H5AC_BT, addr, bt, H5AC__NO_FLAGS_SET) < 0)
|
||||
HDONE_ERROR(H5E_BTREE, H5E_CANTUNPROTECT, FAIL, "unable to release B-tree node")
|
||||
|
||||
FUNC_LEAVE_NOAPI(ret_value)
|
||||
|
146
src/H5B2.c
146
src/H5B2.c
@ -135,7 +135,7 @@ H5FL_DEFINE_STATIC(H5B2_t);
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
H5B2_t *
|
||||
H5B2_create(H5F_t *f, hid_t dxpl_id, const H5B2_create_t *cparam, void *ctx_udata)
|
||||
H5B2_create(H5F_t *f, const H5B2_create_t *cparam, void *ctx_udata)
|
||||
{
|
||||
H5B2_t *bt2 = NULL; /* Pointer to the B-tree */
|
||||
H5B2_hdr_t *hdr = NULL; /* Pointer to the B-tree header */
|
||||
@ -154,7 +154,7 @@ H5B2_create(H5F_t *f, hid_t dxpl_id, const H5B2_create_t *cparam, void *ctx_udat
|
||||
HDcompile_assert(H5B2_NUM_BTREE_ID == NELMTS(H5B2_client_class_g));
|
||||
|
||||
/* Create shared v2 B-tree header */
|
||||
if(HADDR_UNDEF == (hdr_addr = H5B2__hdr_create(f, dxpl_id, cparam, ctx_udata)))
|
||||
if(HADDR_UNDEF == (hdr_addr = H5B2__hdr_create(f, cparam, ctx_udata)))
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTINIT, NULL, "can't create v2 B-tree header")
|
||||
|
||||
/* Create v2 B-tree wrapper */
|
||||
@ -162,7 +162,7 @@ H5B2_create(H5F_t *f, hid_t dxpl_id, const H5B2_create_t *cparam, void *ctx_udat
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTALLOC, NULL, "memory allocation failed for v2 B-tree info")
|
||||
|
||||
/* Look up the B-tree header */
|
||||
if(NULL == (hdr = H5B2__hdr_protect(f, dxpl_id, hdr_addr, ctx_udata, H5AC__NO_FLAGS_SET)))
|
||||
if(NULL == (hdr = H5B2__hdr_protect(f, hdr_addr, ctx_udata, H5AC__NO_FLAGS_SET)))
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, NULL, "unable to protect v2 B-tree header")
|
||||
|
||||
/* Point v2 B-tree wrapper at header and bump it's ref count */
|
||||
@ -181,10 +181,10 @@ H5B2_create(H5F_t *f, hid_t dxpl_id, const H5B2_create_t *cparam, void *ctx_udat
|
||||
ret_value = bt2;
|
||||
|
||||
done:
|
||||
if(hdr && H5B2__hdr_unprotect(hdr, dxpl_id, H5AC__NO_FLAGS_SET) < 0)
|
||||
if(hdr && H5B2__hdr_unprotect(hdr, H5AC__NO_FLAGS_SET) < 0)
|
||||
HDONE_ERROR(H5E_BTREE, H5E_CANTUNPROTECT, NULL, "unable to release v2 B-tree header")
|
||||
if(!ret_value && bt2)
|
||||
if(H5B2_close(bt2, dxpl_id) < 0)
|
||||
if(H5B2_close(bt2) < 0)
|
||||
HDONE_ERROR(H5E_BTREE, H5E_CANTCLOSEOBJ, NULL, "unable to close v2 B-tree")
|
||||
|
||||
FUNC_LEAVE_NOAPI(ret_value)
|
||||
@ -206,7 +206,7 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
H5B2_t *
|
||||
H5B2_open(H5F_t *f, hid_t dxpl_id, haddr_t addr, void *ctx_udata)
|
||||
H5B2_open(H5F_t *f, haddr_t addr, void *ctx_udata)
|
||||
{
|
||||
H5B2_t *bt2 = NULL; /* Pointer to the B-tree */
|
||||
H5B2_hdr_t *hdr = NULL; /* Pointer to the B-tree header */
|
||||
@ -219,7 +219,7 @@ H5B2_open(H5F_t *f, hid_t dxpl_id, haddr_t addr, void *ctx_udata)
|
||||
HDassert(H5F_addr_defined(addr));
|
||||
|
||||
/* Look up the B-tree header */
|
||||
if(NULL == (hdr = H5B2__hdr_protect(f, dxpl_id, addr, ctx_udata, H5AC__READ_ONLY_FLAG)))
|
||||
if(NULL == (hdr = H5B2__hdr_protect(f, addr, ctx_udata, H5AC__READ_ONLY_FLAG)))
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, NULL, "unable to protect v2 B-tree header")
|
||||
|
||||
/* Check for pending heap deletion */
|
||||
@ -246,10 +246,10 @@ H5B2_open(H5F_t *f, hid_t dxpl_id, haddr_t addr, void *ctx_udata)
|
||||
ret_value = bt2;
|
||||
|
||||
done:
|
||||
if(hdr && H5B2__hdr_unprotect(hdr, dxpl_id, H5AC__NO_FLAGS_SET) < 0)
|
||||
if(hdr && H5B2__hdr_unprotect(hdr, H5AC__NO_FLAGS_SET) < 0)
|
||||
HDONE_ERROR(H5E_BTREE, H5E_CANTUNPROTECT, NULL, "unable to release v2 B-tree header")
|
||||
if(!ret_value && bt2)
|
||||
if(H5B2_close(bt2, dxpl_id) < 0)
|
||||
if(H5B2_close(bt2) < 0)
|
||||
HDONE_ERROR(H5E_BTREE, H5E_CANTCLOSEOBJ, NULL, "unable to close v2 B-tree")
|
||||
|
||||
FUNC_LEAVE_NOAPI(ret_value)
|
||||
@ -270,7 +270,7 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
herr_t
|
||||
H5B2_insert(H5B2_t *bt2, hid_t dxpl_id, void *udata)
|
||||
H5B2_insert(H5B2_t *bt2, void *udata)
|
||||
{
|
||||
H5B2_hdr_t *hdr; /* Pointer to the B-tree header */
|
||||
herr_t ret_value = SUCCEED; /* Return value */
|
||||
@ -288,7 +288,7 @@ H5B2_insert(H5B2_t *bt2, hid_t dxpl_id, void *udata)
|
||||
hdr = bt2->hdr;
|
||||
|
||||
/* Insert the record */
|
||||
if(H5B2__insert(hdr, dxpl_id, udata) < 0)
|
||||
if(H5B2__insert(hdr, udata) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTINSERT, FAIL, "unable to insert record into B-tree")
|
||||
|
||||
done:
|
||||
@ -313,7 +313,7 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
herr_t
|
||||
H5B2_update(H5B2_t *bt2, hid_t dxpl_id, void *udata, H5B2_modify_t op, void *op_data)
|
||||
H5B2_update(H5B2_t *bt2, void *udata, H5B2_modify_t op, void *op_data)
|
||||
{
|
||||
H5B2_hdr_t *hdr; /* Pointer to the B-tree header */
|
||||
H5B2_update_status_t status = H5B2_UPDATE_UNKNOWN; /* Whether the record was inserted/modified */
|
||||
@ -334,17 +334,17 @@ H5B2_update(H5B2_t *bt2, hid_t dxpl_id, void *udata, H5B2_modify_t op, void *op_
|
||||
/* Check if the root node is allocated yet */
|
||||
if(!H5F_addr_defined(hdr->root.addr)) {
|
||||
/* Create root node as leaf node in B-tree */
|
||||
if(H5B2__create_leaf(hdr, dxpl_id, hdr, &(hdr->root)) < 0)
|
||||
if(H5B2__create_leaf(hdr, hdr, &(hdr->root)) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTINIT, FAIL, "unable to create root node")
|
||||
} /* end if */
|
||||
|
||||
/* Attempt to insert record into B-tree */
|
||||
if(hdr->depth > 0) {
|
||||
if(H5B2__update_internal(hdr, dxpl_id, hdr->depth, NULL, &hdr->root, &status, H5B2_POS_ROOT, hdr, udata, op, op_data) < 0)
|
||||
if(H5B2__update_internal(hdr, hdr->depth, NULL, &hdr->root, &status, H5B2_POS_ROOT, hdr, udata, op, op_data) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTUPDATE, FAIL, "unable to update record in B-tree internal node")
|
||||
} /* end if */
|
||||
else {
|
||||
if(H5B2__update_leaf(hdr, dxpl_id, &hdr->root, &status, H5B2_POS_ROOT, hdr, udata, op, op_data) < 0)
|
||||
if(H5B2__update_leaf(hdr, &hdr->root, &status, H5B2_POS_ROOT, hdr, udata, op, op_data) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTUPDATE, FAIL, "unable to update record in B-tree leaf node")
|
||||
} /* end else */
|
||||
|
||||
@ -353,7 +353,7 @@ H5B2_update(H5B2_t *bt2, hid_t dxpl_id, void *udata, H5B2_modify_t op, void *op_
|
||||
|
||||
/* Use insert algorithm if nodes to leaf full */
|
||||
if(H5B2_UPDATE_INSERT_CHILD_FULL == status) {
|
||||
if(H5B2__insert(hdr, dxpl_id, udata) < 0)
|
||||
if(H5B2__insert(hdr, udata) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTINSERT, FAIL, "unable to insert record into B-tree")
|
||||
} /* end if */
|
||||
else if(H5B2_UPDATE_SHADOW_DONE == status || H5B2_UPDATE_INSERT_DONE == status) {
|
||||
@ -420,7 +420,7 @@ H5B2_get_addr(const H5B2_t *bt2, haddr_t *addr_p)
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
herr_t
|
||||
H5B2_iterate(H5B2_t *bt2, hid_t dxpl_id, H5B2_operator_t op, void *op_data)
|
||||
H5B2_iterate(H5B2_t *bt2, H5B2_operator_t op, void *op_data)
|
||||
{
|
||||
H5B2_hdr_t *hdr; /* Pointer to the B-tree header */
|
||||
herr_t ret_value = SUCCEED; /* Return value */
|
||||
@ -438,11 +438,10 @@ H5B2_iterate(H5B2_t *bt2, hid_t dxpl_id, H5B2_operator_t op, void *op_data)
|
||||
hdr = bt2->hdr;
|
||||
|
||||
/* Iterate through records */
|
||||
if(hdr->root.node_nrec > 0) {
|
||||
if(hdr->root.node_nrec > 0)
|
||||
/* Iterate through nodes */
|
||||
if((ret_value = H5B2__iterate_node(hdr, dxpl_id, hdr->depth, &hdr->root, hdr, op, op_data)) < 0)
|
||||
if((ret_value = H5B2__iterate_node(hdr, hdr->depth, &hdr->root, hdr, op, op_data)) < 0)
|
||||
HERROR(H5E_BTREE, H5E_CANTLIST, "node iteration failed");
|
||||
} /* end if */
|
||||
|
||||
FUNC_LEAVE_NOAPI(ret_value)
|
||||
} /* H5B2_iterate() */
|
||||
@ -472,8 +471,7 @@ H5B2_iterate(H5B2_t *bt2, hid_t dxpl_id, H5B2_operator_t op, void *op_data)
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
htri_t
|
||||
H5B2_find(H5B2_t *bt2, hid_t dxpl_id, void *udata, H5B2_found_t op,
|
||||
void *op_data)
|
||||
H5B2_find(H5B2_t *bt2, void *udata, H5B2_found_t op, void *op_data)
|
||||
{
|
||||
H5B2_hdr_t *hdr; /* Pointer to the B-tree header */
|
||||
H5B2_node_ptr_t curr_node_ptr; /* Node pointer info for current node */
|
||||
@ -543,7 +541,7 @@ H5B2_find(H5B2_t *bt2, hid_t dxpl_id, void *udata, H5B2_found_t op,
|
||||
H5B2_node_ptr_t next_node_ptr; /* Node pointer info for next node */
|
||||
|
||||
/* Lock B-tree current node */
|
||||
if(NULL == (internal = H5B2__protect_internal(hdr, dxpl_id, parent, &curr_node_ptr, depth, FALSE, H5AC__READ_ONLY_FLAG)))
|
||||
if(NULL == (internal = H5B2__protect_internal(hdr, parent, &curr_node_ptr, depth, FALSE, H5AC__READ_ONLY_FLAG)))
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to load B-tree internal node")
|
||||
|
||||
/* Unpin parent if necessary */
|
||||
@ -556,7 +554,7 @@ H5B2_find(H5B2_t *bt2, hid_t dxpl_id, void *udata, H5B2_found_t op,
|
||||
/* Locate node pointer for child */
|
||||
if(H5B2__locate_record(hdr->cls, internal->nrec, hdr->nat_off, internal->int_native, udata, &idx, &cmp) < 0) {
|
||||
/* Unlock current node before failing */
|
||||
H5AC_unprotect(hdr->f, dxpl_id, H5AC_BT2_INT, curr_node_ptr.addr, internal, H5AC__NO_FLAGS_SET);
|
||||
H5AC_unprotect(hdr->f, H5AC_BT2_INT, curr_node_ptr.addr, internal, H5AC__NO_FLAGS_SET);
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTCOMPARE, FAIL, "can't compare btree2 records")
|
||||
} /* end if */
|
||||
|
||||
@ -585,7 +583,7 @@ H5B2_find(H5B2_t *bt2, hid_t dxpl_id, void *udata, H5B2_found_t op,
|
||||
} /* end if */
|
||||
|
||||
/* Unlock current node */
|
||||
if(H5AC_unprotect(hdr->f, dxpl_id, H5AC_BT2_INT, curr_node_ptr.addr, internal, (unsigned)(hdr->swmr_write ? H5AC__PIN_ENTRY_FLAG : H5AC__NO_FLAGS_SET)) < 0)
|
||||
if(H5AC_unprotect(hdr->f, H5AC_BT2_INT, curr_node_ptr.addr, internal, (unsigned)(hdr->swmr_write ? H5AC__PIN_ENTRY_FLAG : H5AC__NO_FLAGS_SET)) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTUNPROTECT, FAIL, "unable to release B-tree node")
|
||||
|
||||
/* Keep track of parent if necessary */
|
||||
@ -599,14 +597,14 @@ H5B2_find(H5B2_t *bt2, hid_t dxpl_id, void *udata, H5B2_found_t op,
|
||||
/* Make callback for current record */
|
||||
if(op && (op)(H5B2_INT_NREC(internal, hdr, idx), op_data) < 0) {
|
||||
/* Unlock current node */
|
||||
if(H5AC_unprotect(hdr->f, dxpl_id, H5AC_BT2_INT, curr_node_ptr.addr, internal, H5AC__NO_FLAGS_SET) < 0)
|
||||
if(H5AC_unprotect(hdr->f, H5AC_BT2_INT, curr_node_ptr.addr, internal, H5AC__NO_FLAGS_SET) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTUNPROTECT, FAIL, "unable to release B-tree node")
|
||||
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_NOTFOUND, FAIL, "'found' callback failed for B-tree find operation")
|
||||
} /* end if */
|
||||
|
||||
/* Unlock current node */
|
||||
if(H5AC_unprotect(hdr->f, dxpl_id, H5AC_BT2_INT, curr_node_ptr.addr, internal, H5AC__NO_FLAGS_SET) < 0)
|
||||
if(H5AC_unprotect(hdr->f, H5AC_BT2_INT, curr_node_ptr.addr, internal, H5AC__NO_FLAGS_SET) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTUNPROTECT, FAIL, "unable to release B-tree node")
|
||||
|
||||
/* Indicate record found */
|
||||
@ -621,7 +619,7 @@ H5B2_find(H5B2_t *bt2, hid_t dxpl_id, void *udata, H5B2_found_t op,
|
||||
H5B2_leaf_t *leaf; /* Pointer to leaf node in B-tree */
|
||||
|
||||
/* Lock B-tree leaf node */
|
||||
if(NULL == (leaf = H5B2__protect_leaf(hdr, dxpl_id, parent, &curr_node_ptr, FALSE, H5AC__READ_ONLY_FLAG)))
|
||||
if(NULL == (leaf = H5B2__protect_leaf(hdr, parent, &curr_node_ptr, FALSE, H5AC__READ_ONLY_FLAG)))
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to protect B-tree leaf node")
|
||||
|
||||
/* Unpin parent if necessary */
|
||||
@ -634,13 +632,13 @@ H5B2_find(H5B2_t *bt2, hid_t dxpl_id, void *udata, H5B2_found_t op,
|
||||
/* Locate record */
|
||||
if(H5B2__locate_record(hdr->cls, leaf->nrec, hdr->nat_off, leaf->leaf_native, udata, &idx, &cmp) < 0) {
|
||||
/* Unlock current node before failing */
|
||||
H5AC_unprotect(hdr->f, dxpl_id, H5AC_BT2_LEAF, curr_node_ptr.addr, leaf, H5AC__NO_FLAGS_SET);
|
||||
H5AC_unprotect(hdr->f, H5AC_BT2_LEAF, curr_node_ptr.addr, leaf, H5AC__NO_FLAGS_SET);
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTCOMPARE, FAIL, "can't compare btree2 records")
|
||||
} /* end if */
|
||||
|
||||
if(cmp != 0) {
|
||||
/* Unlock leaf node */
|
||||
if(H5AC_unprotect(hdr->f, dxpl_id, H5AC_BT2_LEAF, curr_node_ptr.addr, leaf, H5AC__NO_FLAGS_SET) < 0)
|
||||
if(H5AC_unprotect(hdr->f, H5AC_BT2_LEAF, curr_node_ptr.addr, leaf, H5AC__NO_FLAGS_SET) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTUNPROTECT, FAIL, "unable to release B-tree node")
|
||||
|
||||
/* Record not found */
|
||||
@ -650,7 +648,7 @@ H5B2_find(H5B2_t *bt2, hid_t dxpl_id, void *udata, H5B2_found_t op,
|
||||
/* Make callback for current record */
|
||||
if(op && (op)(H5B2_LEAF_NREC(leaf, hdr, idx), op_data) < 0) {
|
||||
/* Unlock current node */
|
||||
if(H5AC_unprotect(hdr->f, dxpl_id, H5AC_BT2_LEAF, curr_node_ptr.addr, leaf, H5AC__NO_FLAGS_SET) < 0)
|
||||
if(H5AC_unprotect(hdr->f, H5AC_BT2_LEAF, curr_node_ptr.addr, leaf, H5AC__NO_FLAGS_SET) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTUNPROTECT, FAIL, "unable to release B-tree node")
|
||||
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_NOTFOUND, FAIL, "'found' callback failed for B-tree find operation")
|
||||
@ -679,7 +677,7 @@ H5B2_find(H5B2_t *bt2, hid_t dxpl_id, void *udata, H5B2_found_t op,
|
||||
} /* end else */
|
||||
|
||||
/* Unlock current node */
|
||||
if(H5AC_unprotect(hdr->f, dxpl_id, H5AC_BT2_LEAF, curr_node_ptr.addr, leaf, H5AC__NO_FLAGS_SET) < 0)
|
||||
if(H5AC_unprotect(hdr->f, H5AC_BT2_LEAF, curr_node_ptr.addr, leaf, H5AC__NO_FLAGS_SET) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTUNPROTECT, FAIL, "unable to release B-tree node")
|
||||
} /* end block */
|
||||
|
||||
@ -713,8 +711,8 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
herr_t
|
||||
H5B2_index(H5B2_t *bt2, hid_t dxpl_id, H5_iter_order_t order, hsize_t idx,
|
||||
H5B2_found_t op, void *op_data)
|
||||
H5B2_index(H5B2_t *bt2, H5_iter_order_t order, hsize_t idx, H5B2_found_t op,
|
||||
void *op_data)
|
||||
{
|
||||
H5B2_hdr_t *hdr; /* Pointer to the B-tree header */
|
||||
H5B2_node_ptr_t curr_node_ptr; /* Node pointer info for current node */
|
||||
@ -763,7 +761,7 @@ H5B2_index(H5B2_t *bt2, hid_t dxpl_id, H5_iter_order_t order, hsize_t idx,
|
||||
unsigned u; /* Local index variable */
|
||||
|
||||
/* Lock B-tree current node */
|
||||
if(NULL == (internal = H5B2__protect_internal(hdr, dxpl_id, parent, &curr_node_ptr, depth, FALSE, H5AC__READ_ONLY_FLAG)))
|
||||
if(NULL == (internal = H5B2__protect_internal(hdr, parent, &curr_node_ptr, depth, FALSE, H5AC__READ_ONLY_FLAG)))
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to load B-tree internal node")
|
||||
|
||||
/* Unpin parent if necessary */
|
||||
@ -781,7 +779,7 @@ H5B2_index(H5B2_t *bt2, hid_t dxpl_id, H5_iter_order_t order, hsize_t idx,
|
||||
next_node_ptr = internal->node_ptrs[u];
|
||||
|
||||
/* Unlock current node */
|
||||
if(H5AC_unprotect(hdr->f, dxpl_id, H5AC_BT2_INT, curr_node_ptr.addr, internal, (unsigned)(hdr->swmr_write ? H5AC__PIN_ENTRY_FLAG : H5AC__NO_FLAGS_SET)) < 0)
|
||||
if(H5AC_unprotect(hdr->f, H5AC_BT2_INT, curr_node_ptr.addr, internal, (unsigned)(hdr->swmr_write ? H5AC__PIN_ENTRY_FLAG : H5AC__NO_FLAGS_SET)) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTUNPROTECT, FAIL, "unable to release B-tree node")
|
||||
|
||||
/* Keep track of parent if necessary */
|
||||
@ -800,14 +798,14 @@ H5B2_index(H5B2_t *bt2, hid_t dxpl_id, H5_iter_order_t order, hsize_t idx,
|
||||
/* Make callback for current record */
|
||||
if((op)(H5B2_INT_NREC(internal, hdr, u), op_data) < 0) {
|
||||
/* Unlock current node */
|
||||
if(H5AC_unprotect(hdr->f, dxpl_id, H5AC_BT2_INT, curr_node_ptr.addr, internal, H5AC__NO_FLAGS_SET) < 0)
|
||||
if(H5AC_unprotect(hdr->f, H5AC_BT2_INT, curr_node_ptr.addr, internal, H5AC__NO_FLAGS_SET) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTUNPROTECT, FAIL, "unable to release B-tree node")
|
||||
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_NOTFOUND, FAIL, "'found' callback failed for B-tree find operation")
|
||||
} /* end if */
|
||||
|
||||
/* Unlock current node */
|
||||
if(H5AC_unprotect(hdr->f, dxpl_id, H5AC_BT2_INT, curr_node_ptr.addr, internal, H5AC__NO_FLAGS_SET) < 0)
|
||||
if(H5AC_unprotect(hdr->f, H5AC_BT2_INT, curr_node_ptr.addr, internal, H5AC__NO_FLAGS_SET) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTUNPROTECT, FAIL, "unable to release B-tree node")
|
||||
|
||||
HGOTO_DONE(SUCCEED);
|
||||
@ -827,7 +825,7 @@ H5B2_index(H5B2_t *bt2, hid_t dxpl_id, H5_iter_order_t order, hsize_t idx,
|
||||
next_node_ptr = internal->node_ptrs[u];
|
||||
|
||||
/* Unlock current node */
|
||||
if(H5AC_unprotect(hdr->f, dxpl_id, H5AC_BT2_INT, curr_node_ptr.addr, internal, (unsigned)(hdr->swmr_write ? H5AC__PIN_ENTRY_FLAG : H5AC__NO_FLAGS_SET)) < 0)
|
||||
if(H5AC_unprotect(hdr->f, H5AC_BT2_INT, curr_node_ptr.addr, internal, (unsigned)(hdr->swmr_write ? H5AC__PIN_ENTRY_FLAG : H5AC__NO_FLAGS_SET)) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTUNPROTECT, FAIL, "unable to release B-tree node")
|
||||
|
||||
/* Keep track of parent if necessary */
|
||||
@ -850,7 +848,7 @@ H5B2_index(H5B2_t *bt2, hid_t dxpl_id, H5_iter_order_t order, hsize_t idx,
|
||||
H5B2_leaf_t *leaf; /* Pointer to leaf node in B-tree */
|
||||
|
||||
/* Lock B-tree leaf node */
|
||||
if(NULL == (leaf = H5B2__protect_leaf(hdr, dxpl_id, parent, &curr_node_ptr, FALSE, H5AC__READ_ONLY_FLAG)))
|
||||
if(NULL == (leaf = H5B2__protect_leaf(hdr, parent, &curr_node_ptr, FALSE, H5AC__READ_ONLY_FLAG)))
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to protect B-tree leaf node")
|
||||
|
||||
/* Unpin parent if necessary */
|
||||
@ -866,14 +864,14 @@ H5B2_index(H5B2_t *bt2, hid_t dxpl_id, H5_iter_order_t order, hsize_t idx,
|
||||
/* Make callback for correct record */
|
||||
if((op)(H5B2_LEAF_NREC(leaf, hdr, idx), op_data) < 0) {
|
||||
/* Unlock current node */
|
||||
if(H5AC_unprotect(hdr->f, dxpl_id, H5AC_BT2_LEAF, curr_node_ptr.addr, leaf, H5AC__NO_FLAGS_SET) < 0)
|
||||
if(H5AC_unprotect(hdr->f, H5AC_BT2_LEAF, curr_node_ptr.addr, leaf, H5AC__NO_FLAGS_SET) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTUNPROTECT, FAIL, "unable to release B-tree node")
|
||||
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_NOTFOUND, FAIL, "'found' callback failed for B-tree find operation")
|
||||
} /* end if */
|
||||
|
||||
/* Unlock current node */
|
||||
if(H5AC_unprotect(hdr->f, dxpl_id, H5AC_BT2_LEAF, curr_node_ptr.addr, leaf, H5AC__NO_FLAGS_SET) < 0)
|
||||
if(H5AC_unprotect(hdr->f, H5AC_BT2_LEAF, curr_node_ptr.addr, leaf, H5AC__NO_FLAGS_SET) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTUNPROTECT, FAIL, "unable to release B-tree node")
|
||||
} /* end block */
|
||||
|
||||
@ -902,8 +900,7 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
herr_t
|
||||
H5B2_remove(H5B2_t *bt2, hid_t dxpl_id, void *udata, H5B2_remove_t op,
|
||||
void *op_data)
|
||||
H5B2_remove(H5B2_t *bt2, void *udata, H5B2_remove_t op, void *op_data)
|
||||
{
|
||||
H5B2_hdr_t *hdr; /* Pointer to the B-tree header */
|
||||
herr_t ret_value = SUCCEED; /* Return value */
|
||||
@ -927,7 +924,7 @@ H5B2_remove(H5B2_t *bt2, hid_t dxpl_id, void *udata, H5B2_remove_t op,
|
||||
if(hdr->depth > 0) {
|
||||
hbool_t depth_decreased = FALSE; /* Flag to indicate whether the depth of the B-tree decreased */
|
||||
|
||||
if(H5B2__remove_internal(hdr, dxpl_id, &depth_decreased, NULL, NULL,
|
||||
if(H5B2__remove_internal(hdr, &depth_decreased, NULL, NULL,
|
||||
hdr->depth, &(hdr->cache_info), NULL, H5B2_POS_ROOT, &hdr->root,
|
||||
udata, op, op_data) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTDELETE, FAIL, "unable to remove record from B-tree internal node")
|
||||
@ -947,7 +944,7 @@ H5B2_remove(H5B2_t *bt2, hid_t dxpl_id, void *udata, H5B2_remove_t op,
|
||||
} /* end for */
|
||||
} /* end if */
|
||||
else {
|
||||
if(H5B2__remove_leaf(hdr, dxpl_id, &hdr->root, H5B2_POS_ROOT, hdr, udata, op, op_data) < 0)
|
||||
if(H5B2__remove_leaf(hdr, &hdr->root, H5B2_POS_ROOT, hdr, udata, op, op_data) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTDELETE, FAIL, "unable to remove record from B-tree leaf node")
|
||||
} /* end else */
|
||||
|
||||
@ -977,8 +974,8 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
herr_t
|
||||
H5B2_remove_by_idx(H5B2_t *bt2, hid_t dxpl_id, H5_iter_order_t order,
|
||||
hsize_t idx, H5B2_remove_t op, void *op_data)
|
||||
H5B2_remove_by_idx(H5B2_t *bt2, H5_iter_order_t order, hsize_t idx,
|
||||
H5B2_remove_t op, void *op_data)
|
||||
{
|
||||
H5B2_hdr_t *hdr; /* Pointer to the B-tree header */
|
||||
herr_t ret_value = SUCCEED; /* Return value */
|
||||
@ -1010,7 +1007,7 @@ H5B2_remove_by_idx(H5B2_t *bt2, hid_t dxpl_id, H5_iter_order_t order,
|
||||
if(hdr->depth > 0) {
|
||||
hbool_t depth_decreased = FALSE; /* Flag to indicate whether the depth of the B-tree decreased */
|
||||
|
||||
if(H5B2__remove_internal_by_idx(hdr, dxpl_id, &depth_decreased, NULL, NULL,
|
||||
if(H5B2__remove_internal_by_idx(hdr, &depth_decreased, NULL, NULL,
|
||||
hdr->depth, &(hdr->cache_info), NULL, &hdr->root, H5B2_POS_ROOT,
|
||||
idx, op, op_data) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTDELETE, FAIL, "unable to remove record from B-tree internal node")
|
||||
@ -1030,7 +1027,7 @@ H5B2_remove_by_idx(H5B2_t *bt2, hid_t dxpl_id, H5_iter_order_t order,
|
||||
} /* end for */
|
||||
} /* end if */
|
||||
else {
|
||||
if(H5B2__remove_leaf_by_idx(hdr, dxpl_id, &hdr->root, H5B2_POS_ROOT, hdr, (unsigned)idx, op, op_data) < 0)
|
||||
if(H5B2__remove_leaf_by_idx(hdr, &hdr->root, H5B2_POS_ROOT, hdr, (unsigned)idx, op, op_data) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTDELETE, FAIL, "unable to remove record from B-tree leaf node")
|
||||
} /* end else */
|
||||
|
||||
@ -1101,7 +1098,7 @@ H5B2_get_nrec(const H5B2_t *bt2, hsize_t *nrec)
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
herr_t
|
||||
H5B2_neighbor(H5B2_t *bt2, hid_t dxpl_id, H5B2_compare_t range, void *udata,
|
||||
H5B2_neighbor(H5B2_t *bt2, H5B2_compare_t range, void *udata,
|
||||
H5B2_found_t op, void *op_data)
|
||||
{
|
||||
H5B2_hdr_t *hdr; /* Pointer to the B-tree header */
|
||||
@ -1125,11 +1122,11 @@ H5B2_neighbor(H5B2_t *bt2, hid_t dxpl_id, H5B2_compare_t range, void *udata,
|
||||
|
||||
/* Attempt to find neighbor record in B-tree */
|
||||
if(hdr->depth > 0) {
|
||||
if(H5B2__neighbor_internal(hdr, dxpl_id, hdr->depth, &hdr->root, NULL, range, hdr, udata, op, op_data) < 0)
|
||||
if(H5B2__neighbor_internal(hdr, hdr->depth, &hdr->root, NULL, range, hdr, udata, op, op_data) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_NOTFOUND, FAIL, "unable to find neighbor record in B-tree internal node")
|
||||
} /* end if */
|
||||
else {
|
||||
if(H5B2__neighbor_leaf(hdr, dxpl_id, &hdr->root, NULL, range, hdr, udata, op, op_data) < 0)
|
||||
if(H5B2__neighbor_leaf(hdr, &hdr->root, NULL, range, hdr, udata, op, op_data) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_NOTFOUND, FAIL, "unable to find neighbor record in B-tree leaf node")
|
||||
} /* end else */
|
||||
|
||||
@ -1159,8 +1156,7 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
herr_t
|
||||
H5B2_modify(H5B2_t *bt2, hid_t dxpl_id, void *udata, H5B2_modify_t op,
|
||||
void *op_data)
|
||||
H5B2_modify(H5B2_t *bt2, void *udata, H5B2_modify_t op, void *op_data)
|
||||
{
|
||||
H5B2_hdr_t *hdr; /* Pointer to the B-tree header */
|
||||
H5B2_node_ptr_t curr_node_ptr; /* Node pointer info for current node */
|
||||
@ -1206,7 +1202,7 @@ H5B2_modify(H5B2_t *bt2, hid_t dxpl_id, void *udata, H5B2_modify_t op,
|
||||
H5B2_node_ptr_t next_node_ptr; /* Node pointer info for next node */
|
||||
|
||||
/* Lock B-tree current node */
|
||||
if(NULL == (internal = H5B2__protect_internal(hdr, dxpl_id, parent, &curr_node_ptr, depth, FALSE, H5AC__NO_FLAGS_SET)))
|
||||
if(NULL == (internal = H5B2__protect_internal(hdr, parent, &curr_node_ptr, depth, FALSE, H5AC__NO_FLAGS_SET)))
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to load B-tree internal node")
|
||||
|
||||
/* Unpin parent if necessary */
|
||||
@ -1219,7 +1215,7 @@ H5B2_modify(H5B2_t *bt2, hid_t dxpl_id, void *udata, H5B2_modify_t op,
|
||||
/* Locate node pointer for child */
|
||||
if(H5B2__locate_record(hdr->cls, internal->nrec, hdr->nat_off, internal->int_native, udata, &idx, &cmp) < 0) {
|
||||
/* Unlock current node before failing */
|
||||
H5AC_unprotect(hdr->f, dxpl_id, H5AC_BT2_INT, curr_node_ptr.addr, internal, H5AC__NO_FLAGS_SET);
|
||||
H5AC_unprotect(hdr->f, H5AC_BT2_INT, curr_node_ptr.addr, internal, H5AC__NO_FLAGS_SET);
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTCOMPARE, FAIL, "can't compare btree2 records")
|
||||
} /* end if */
|
||||
|
||||
@ -1249,7 +1245,7 @@ H5B2_modify(H5B2_t *bt2, hid_t dxpl_id, void *udata, H5B2_modify_t op,
|
||||
} /* end if */
|
||||
|
||||
/* Unlock current node */
|
||||
if(H5AC_unprotect(hdr->f, dxpl_id, H5AC_BT2_INT, curr_node_ptr.addr, internal, (unsigned)(hdr->swmr_write ? H5AC__PIN_ENTRY_FLAG : H5AC__NO_FLAGS_SET)) < 0)
|
||||
if(H5AC_unprotect(hdr->f, H5AC_BT2_INT, curr_node_ptr.addr, internal, (unsigned)(hdr->swmr_write ? H5AC__PIN_ENTRY_FLAG : H5AC__NO_FLAGS_SET)) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTUNPROTECT, FAIL, "unable to release B-tree node")
|
||||
|
||||
/* Keep track of parent if necessary */
|
||||
@ -1268,7 +1264,7 @@ H5B2_modify(H5B2_t *bt2, hid_t dxpl_id, void *udata, H5B2_modify_t op,
|
||||
HDassert(changed == FALSE);
|
||||
|
||||
/* Unlock current node */
|
||||
if(H5AC_unprotect(hdr->f, dxpl_id, H5AC_BT2_INT, curr_node_ptr.addr, internal, H5AC__NO_FLAGS_SET) < 0)
|
||||
if(H5AC_unprotect(hdr->f, H5AC_BT2_INT, curr_node_ptr.addr, internal, H5AC__NO_FLAGS_SET) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTUNPROTECT, FAIL, "unable to release B-tree node")
|
||||
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTMODIFY, FAIL, "'modify' callback failed for B-tree find operation")
|
||||
@ -1278,7 +1274,7 @@ H5B2_modify(H5B2_t *bt2, hid_t dxpl_id, void *udata, H5B2_modify_t op,
|
||||
internal_flags |= changed ? H5AC__DIRTIED_FLAG : 0;
|
||||
|
||||
/* Unlock current node */
|
||||
if(H5AC_unprotect(hdr->f, dxpl_id, H5AC_BT2_INT, curr_node_ptr.addr, internal, internal_flags) < 0)
|
||||
if(H5AC_unprotect(hdr->f, H5AC_BT2_INT, curr_node_ptr.addr, internal, internal_flags) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTUNPROTECT, FAIL, "unable to release B-tree node")
|
||||
|
||||
HGOTO_DONE(SUCCEED);
|
||||
@ -1294,7 +1290,7 @@ H5B2_modify(H5B2_t *bt2, hid_t dxpl_id, void *udata, H5B2_modify_t op,
|
||||
hbool_t changed = FALSE;/* Whether the 'modify' callback changed the record */
|
||||
|
||||
/* Lock B-tree leaf node */
|
||||
if(NULL == (leaf = H5B2__protect_leaf(hdr, dxpl_id, parent, &curr_node_ptr, FALSE, H5AC__NO_FLAGS_SET)))
|
||||
if(NULL == (leaf = H5B2__protect_leaf(hdr, parent, &curr_node_ptr, FALSE, H5AC__NO_FLAGS_SET)))
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to protect B-tree leaf node")
|
||||
|
||||
/* Unpin parent if necessary */
|
||||
@ -1307,13 +1303,13 @@ H5B2_modify(H5B2_t *bt2, hid_t dxpl_id, void *udata, H5B2_modify_t op,
|
||||
/* Locate record */
|
||||
if(H5B2__locate_record(hdr->cls, leaf->nrec, hdr->nat_off, leaf->leaf_native, udata, &idx, &cmp) < 0) {
|
||||
/* Unlock current node before failing */
|
||||
H5AC_unprotect(hdr->f, dxpl_id, H5AC_BT2_LEAF, curr_node_ptr.addr, leaf, H5AC__NO_FLAGS_SET);
|
||||
H5AC_unprotect(hdr->f, H5AC_BT2_LEAF, curr_node_ptr.addr, leaf, H5AC__NO_FLAGS_SET);
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTCOMPARE, FAIL, "can't compare btree2 records")
|
||||
} /* end if */
|
||||
|
||||
if(cmp != 0) {
|
||||
/* Unlock leaf node */
|
||||
if(H5AC_unprotect(hdr->f, dxpl_id, H5AC_BT2_LEAF, curr_node_ptr.addr, leaf, H5AC__NO_FLAGS_SET) < 0)
|
||||
if(H5AC_unprotect(hdr->f, H5AC_BT2_LEAF, curr_node_ptr.addr, leaf, H5AC__NO_FLAGS_SET) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTUNPROTECT, FAIL, "unable to release B-tree node")
|
||||
|
||||
/* Note: don't push error on stack, leave that to next higher level,
|
||||
@ -1333,7 +1329,7 @@ H5B2_modify(H5B2_t *bt2, hid_t dxpl_id, void *udata, H5B2_modify_t op,
|
||||
HDassert(changed == FALSE);
|
||||
|
||||
/* Unlock current node */
|
||||
if(H5AC_unprotect(hdr->f, dxpl_id, H5AC_BT2_LEAF, curr_node_ptr.addr, leaf, H5AC__NO_FLAGS_SET) < 0)
|
||||
if(H5AC_unprotect(hdr->f, H5AC_BT2_LEAF, curr_node_ptr.addr, leaf, H5AC__NO_FLAGS_SET) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTUNPROTECT, FAIL, "unable to release B-tree node")
|
||||
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTMODIFY, FAIL, "'modify' callback failed for B-tree find operation")
|
||||
@ -1365,7 +1361,7 @@ H5B2_modify(H5B2_t *bt2, hid_t dxpl_id, void *udata, H5B2_modify_t op,
|
||||
leaf_flags |= (changed ? H5AC__DIRTIED_FLAG : 0);
|
||||
|
||||
/* Unlock current node */
|
||||
if(H5AC_unprotect(hdr->f, dxpl_id, H5AC_BT2_LEAF, curr_node_ptr.addr, leaf, leaf_flags) < 0)
|
||||
if(H5AC_unprotect(hdr->f, H5AC_BT2_LEAF, curr_node_ptr.addr, leaf, leaf_flags) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTUNPROTECT, FAIL, "unable to release B-tree node")
|
||||
} /* end block */
|
||||
|
||||
@ -1394,7 +1390,7 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
herr_t
|
||||
H5B2_close(H5B2_t *bt2, hid_t dxpl_id)
|
||||
H5B2_close(H5B2_t *bt2)
|
||||
{
|
||||
haddr_t bt2_addr = HADDR_UNDEF; /* Address of v2 B-tree (for deletion) */
|
||||
hbool_t pending_delete = FALSE; /* Whether the v2 B-tree is pending deletion */
|
||||
@ -1445,7 +1441,7 @@ H5B2_close(H5B2_t *bt2, hid_t dxpl_id)
|
||||
|
||||
/* Lock the v2 B-tree header into memory */
|
||||
/* (OK to pass in NULL for callback context, since we know the header must be in the cache) */
|
||||
if(NULL == (hdr = H5B2__hdr_protect(bt2->f, dxpl_id, bt2_addr, NULL, H5AC__NO_FLAGS_SET)))
|
||||
if(NULL == (hdr = H5B2__hdr_protect(bt2->f, bt2_addr, NULL, H5AC__NO_FLAGS_SET)))
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to protect v2 B-tree header")
|
||||
|
||||
/* Set the shared v2 B-tree header's file context for this operation */
|
||||
@ -1459,7 +1455,7 @@ H5B2_close(H5B2_t *bt2, hid_t dxpl_id)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTDEC, FAIL, "can't decrement reference count on shared v2 B-tree header")
|
||||
|
||||
/* Delete v2 B-tree, starting with header (unprotects header) */
|
||||
if(H5B2__hdr_delete(hdr, dxpl_id) < 0)
|
||||
if(H5B2__hdr_delete(hdr) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTDELETE, FAIL, "unable to delete v2 B-tree")
|
||||
} /* end if */
|
||||
else {
|
||||
@ -1503,8 +1499,8 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
herr_t
|
||||
H5B2_delete(H5F_t *f, hid_t dxpl_id, haddr_t addr, void *ctx_udata,
|
||||
H5B2_remove_t op, void *op_data)
|
||||
H5B2_delete(H5F_t *f, haddr_t addr, void *ctx_udata, H5B2_remove_t op,
|
||||
void *op_data)
|
||||
{
|
||||
H5B2_hdr_t *hdr = NULL; /* Pointer to the B-tree header */
|
||||
herr_t ret_value = SUCCEED; /* Return value */
|
||||
@ -1519,7 +1515,7 @@ H5B2_delete(H5F_t *f, hid_t dxpl_id, haddr_t addr, void *ctx_udata,
|
||||
#ifdef QAK
|
||||
HDfprintf(stderr, "%s: addr = %a\n", FUNC, addr);
|
||||
#endif /* QAK */
|
||||
if(NULL == (hdr = H5B2__hdr_protect(f, dxpl_id, addr, ctx_udata, H5AC__NO_FLAGS_SET)))
|
||||
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")
|
||||
|
||||
/* Remember the callback & context for later */
|
||||
@ -1534,14 +1530,14 @@ HDfprintf(stderr, "%s: addr = %a\n", FUNC, addr);
|
||||
hdr->f = f;
|
||||
|
||||
/* Delete v2 B-tree now, starting with header (unprotects header) */
|
||||
if(H5B2__hdr_delete(hdr, dxpl_id) < 0)
|
||||
if(H5B2__hdr_delete(hdr) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTDELETE, FAIL, "unable to delete v2 B-tree")
|
||||
hdr = NULL;
|
||||
} /* end if */
|
||||
|
||||
done:
|
||||
/* Unprotect the header, if an error occurred */
|
||||
if(hdr && H5B2__hdr_unprotect(hdr, dxpl_id, H5AC__NO_FLAGS_SET) < 0)
|
||||
if(hdr && H5B2__hdr_unprotect(hdr, H5AC__NO_FLAGS_SET) < 0)
|
||||
HDONE_ERROR(H5E_BTREE, H5E_CANTUNPROTECT, FAIL, "unable to release v2 B-tree header")
|
||||
|
||||
FUNC_LEAVE_NOAPI(ret_value)
|
||||
@ -1562,7 +1558,7 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
herr_t
|
||||
H5B2_depend(H5B2_t *bt2, hid_t dxpl_id, H5AC_proxy_entry_t *parent)
|
||||
H5B2_depend(H5B2_t *bt2, H5AC_proxy_entry_t *parent)
|
||||
{
|
||||
/* Local variables */
|
||||
H5B2_hdr_t *hdr = bt2->hdr; /* Header for B-tree */
|
||||
@ -1591,7 +1587,7 @@ H5B2_depend(H5B2_t *bt2, hid_t dxpl_id, H5AC_proxy_entry_t *parent)
|
||||
hdr->f = bt2->f;
|
||||
|
||||
/* Add the v2 B-tree as a child of the parent (proxy) */
|
||||
if(H5AC_proxy_entry_add_child(parent, hdr->f, dxpl_id, hdr->top_proxy) < 0)
|
||||
if(H5AC_proxy_entry_add_child(parent, hdr->f, hdr->top_proxy) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTSET, FAIL, "unable to add v2 B-tree as child of proxy")
|
||||
hdr->parent = parent;
|
||||
} /* end if */
|
||||
|
@ -86,7 +86,7 @@
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
herr_t
|
||||
H5B2__hdr_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr, FILE *stream, int indent, int fwidth,
|
||||
H5B2__hdr_debug(H5F_t *f, haddr_t addr, FILE *stream, int indent, int fwidth,
|
||||
const H5B2_class_t *type, haddr_t obj_addr)
|
||||
{
|
||||
H5B2_hdr_t *hdr = NULL; /* B-tree header info */
|
||||
@ -108,7 +108,7 @@ H5B2__hdr_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr, FILE *stream, int indent,
|
||||
HDassert(type);
|
||||
|
||||
/* Load the B-tree header */
|
||||
if(NULL == (hdr = H5B2__hdr_protect(f, dxpl_id, addr, f, H5AC__READ_ONLY_FLAG)))
|
||||
if(NULL == (hdr = H5B2__hdr_protect(f, addr, f, H5AC__READ_ONLY_FLAG)))
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTLOAD, FAIL, "unable to load B-tree header")
|
||||
|
||||
/* Set file pointer for this B-tree operation */
|
||||
@ -160,7 +160,7 @@ H5B2__hdr_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr, FILE *stream, int indent,
|
||||
} /* end for */
|
||||
|
||||
done:
|
||||
if(hdr && H5B2__hdr_unprotect(hdr, dxpl_id, H5AC__NO_FLAGS_SET) < 0)
|
||||
if(hdr && H5B2__hdr_unprotect(hdr, H5AC__NO_FLAGS_SET) < 0)
|
||||
HDONE_ERROR(H5E_BTREE, H5E_PROTECT, FAIL, "unable to release v2 B-tree header")
|
||||
|
||||
FUNC_LEAVE_NOAPI(ret_value)
|
||||
@ -181,7 +181,7 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
herr_t
|
||||
H5B2__int_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr, FILE *stream, int indent, int fwidth,
|
||||
H5B2__int_debug(H5F_t *f, haddr_t addr, FILE *stream, int indent, int fwidth,
|
||||
const H5B2_class_t *type, haddr_t hdr_addr, unsigned nrec, unsigned depth, haddr_t obj_addr)
|
||||
{
|
||||
H5B2_hdr_t *hdr = NULL; /* B-tree header */
|
||||
@ -207,7 +207,7 @@ H5B2__int_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr, FILE *stream, int indent,
|
||||
HDassert(nrec > 0);
|
||||
|
||||
/* Load the B-tree header */
|
||||
if(NULL == (hdr = H5B2__hdr_protect(f, dxpl_id, hdr_addr, f, H5AC__READ_ONLY_FLAG)))
|
||||
if(NULL == (hdr = H5B2__hdr_protect(f, hdr_addr, f, H5AC__READ_ONLY_FLAG)))
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTLOAD, FAIL, "unable to load v2 B-tree header")
|
||||
|
||||
/* Set file pointer for this B-tree operation */
|
||||
@ -218,8 +218,8 @@ H5B2__int_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr, FILE *stream, int indent,
|
||||
*/
|
||||
H5_CHECK_OVERFLOW(depth, unsigned, uint16_t);
|
||||
node_ptr.addr = addr;
|
||||
H5_CHECKED_ASSIGN(node_ptr.node_nrec, unsigned, nrec, uint16_t)
|
||||
if(NULL == (internal = H5B2__protect_internal(hdr, dxpl_id, NULL, &node_ptr, (uint16_t)depth, FALSE, H5AC__READ_ONLY_FLAG)))
|
||||
H5_CHECKED_ASSIGN(node_ptr.node_nrec, uint16_t, nrec, unsigned)
|
||||
if(NULL == (internal = H5B2__protect_internal(hdr, NULL, &node_ptr, (uint16_t)depth, FALSE, H5AC__READ_ONLY_FLAG)))
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTLOAD, FAIL, "unable to load B-tree internal node")
|
||||
|
||||
/* Print opening message */
|
||||
@ -270,9 +270,9 @@ H5B2__int_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr, FILE *stream, int indent,
|
||||
internal->node_ptrs[u].addr);
|
||||
|
||||
done:
|
||||
if(hdr && H5B2__hdr_unprotect(hdr, dxpl_id, H5AC__NO_FLAGS_SET) < 0)
|
||||
if(hdr && H5B2__hdr_unprotect(hdr, H5AC__NO_FLAGS_SET) < 0)
|
||||
HDONE_ERROR(H5E_BTREE, H5E_PROTECT, FAIL, "unable to release v2 B-tree header")
|
||||
if(internal && H5AC_unprotect(f, dxpl_id, H5AC_BT2_INT, addr, internal, H5AC__NO_FLAGS_SET) < 0)
|
||||
if(internal && H5AC_unprotect(f, H5AC_BT2_INT, addr, internal, H5AC__NO_FLAGS_SET) < 0)
|
||||
HDONE_ERROR(H5E_BTREE, H5E_PROTECT, FAIL, "unable to release B-tree internal node")
|
||||
|
||||
FUNC_LEAVE_NOAPI(ret_value)
|
||||
@ -293,7 +293,7 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
herr_t
|
||||
H5B2__leaf_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr, FILE *stream, int indent, int fwidth,
|
||||
H5B2__leaf_debug(H5F_t *f, haddr_t addr, FILE *stream, int indent, int fwidth,
|
||||
const H5B2_class_t *type, haddr_t hdr_addr, unsigned nrec, haddr_t obj_addr)
|
||||
{
|
||||
H5B2_hdr_t *hdr = NULL; /* B-tree header */
|
||||
@ -319,7 +319,7 @@ H5B2__leaf_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr, FILE *stream, int indent
|
||||
HDassert(nrec > 0);
|
||||
|
||||
/* Load the B-tree header */
|
||||
if(NULL == (hdr = H5B2__hdr_protect(f, dxpl_id, hdr_addr, f, H5AC__READ_ONLY_FLAG)))
|
||||
if(NULL == (hdr = H5B2__hdr_protect(f, hdr_addr, f, H5AC__READ_ONLY_FLAG)))
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to protect v2 B-tree header")
|
||||
|
||||
/* Set file pointer for this B-tree operation */
|
||||
@ -330,8 +330,8 @@ H5B2__leaf_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr, FILE *stream, int indent
|
||||
*/
|
||||
H5_CHECK_OVERFLOW(nrec, unsigned, uint16_t);
|
||||
node_ptr.addr = addr;
|
||||
H5_CHECKED_ASSIGN(node_ptr.node_nrec, unsigned, nrec, uint16_t)
|
||||
if(NULL == (leaf = H5B2__protect_leaf(hdr, dxpl_id, NULL, &node_ptr, FALSE, H5AC__READ_ONLY_FLAG)))
|
||||
H5_CHECKED_ASSIGN(node_ptr.node_nrec, uint16_t, nrec, unsigned)
|
||||
if(NULL == (leaf = H5B2__protect_leaf(hdr, NULL, &node_ptr, FALSE, H5AC__READ_ONLY_FLAG)))
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to protect B-tree leaf node")
|
||||
|
||||
/* Print opening message */
|
||||
@ -366,9 +366,9 @@ H5B2__leaf_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr, FILE *stream, int indent
|
||||
} /* end for */
|
||||
|
||||
done:
|
||||
if(hdr && H5B2__hdr_unprotect(hdr, dxpl_id, H5AC__NO_FLAGS_SET) < 0)
|
||||
if(hdr && H5B2__hdr_unprotect(hdr, H5AC__NO_FLAGS_SET) < 0)
|
||||
HDONE_ERROR(H5E_BTREE, H5E_PROTECT, FAIL, "unable to release B-tree header")
|
||||
if(leaf && H5AC_unprotect(f, dxpl_id, H5AC_BT2_LEAF, addr, leaf, H5AC__NO_FLAGS_SET) < 0)
|
||||
if(leaf && H5AC_unprotect(f, H5AC_BT2_LEAF, addr, leaf, H5AC__NO_FLAGS_SET) < 0)
|
||||
HDONE_ERROR(H5E_BTREE, H5E_PROTECT, FAIL, "unable to release B-tree leaf node")
|
||||
|
||||
FUNC_LEAVE_NOAPI(ret_value)
|
||||
|
@ -282,8 +282,7 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
haddr_t
|
||||
H5B2__hdr_create(H5F_t *f, hid_t dxpl_id, const H5B2_create_t *cparam,
|
||||
void *ctx_udata)
|
||||
H5B2__hdr_create(H5F_t *f, const H5B2_create_t *cparam, void *ctx_udata)
|
||||
{
|
||||
H5B2_hdr_t *hdr = NULL; /* The new v2 B-tree header information */
|
||||
hbool_t inserted = FALSE; /* Whether the header was inserted into cache */
|
||||
@ -306,7 +305,7 @@ H5B2__hdr_create(H5F_t *f, hid_t dxpl_id, const H5B2_create_t *cparam,
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTINIT, HADDR_UNDEF, "can't create shared B-tree info")
|
||||
|
||||
/* Allocate space for the header on disk */
|
||||
if(HADDR_UNDEF == (hdr->addr = H5MF_alloc(f, H5FD_MEM_BTREE, dxpl_id, (hsize_t)hdr->hdr_size)))
|
||||
if(HADDR_UNDEF == (hdr->addr = H5MF_alloc(f, H5FD_MEM_BTREE, (hsize_t)hdr->hdr_size)))
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTALLOC, HADDR_UNDEF, "file allocation failed for B-tree header")
|
||||
|
||||
/* Create 'top' proxy for extensible array entries */
|
||||
@ -315,13 +314,13 @@ H5B2__hdr_create(H5F_t *f, hid_t dxpl_id, const H5B2_create_t *cparam,
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTCREATE, HADDR_UNDEF, "can't create v2 B-tree proxy")
|
||||
|
||||
/* Cache the new B-tree node */
|
||||
if(H5AC_insert_entry(f, dxpl_id, H5AC_BT2_HDR, hdr->addr, hdr, H5AC__NO_FLAGS_SET) < 0)
|
||||
if(H5AC_insert_entry(f, H5AC_BT2_HDR, hdr->addr, hdr, H5AC__NO_FLAGS_SET) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTINSERT, HADDR_UNDEF, "can't add B-tree header to cache")
|
||||
inserted = TRUE;
|
||||
|
||||
/* Add header as child of 'top' proxy */
|
||||
if(hdr->top_proxy)
|
||||
if(H5AC_proxy_entry_add_child(hdr->top_proxy, f, dxpl_id, hdr) < 0)
|
||||
if(H5AC_proxy_entry_add_child(hdr->top_proxy, f, hdr) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTSET, HADDR_UNDEF, "unable to add v2 B-tree header as child of array proxy")
|
||||
|
||||
/* Set address of v2 B-tree header to return */
|
||||
@ -336,7 +335,7 @@ done:
|
||||
HDONE_ERROR(H5E_BTREE, H5E_CANTREMOVE, HADDR_UNDEF, "unable to remove v2 B-tree header from cache")
|
||||
|
||||
/* Release header's disk space */
|
||||
if(H5F_addr_defined(hdr->addr) && H5MF_xfree(f, H5FD_MEM_BTREE, dxpl_id, hdr->addr, (hsize_t)hdr->hdr_size) < 0)
|
||||
if(H5F_addr_defined(hdr->addr) && H5MF_xfree(f, H5FD_MEM_BTREE, hdr->addr, (hsize_t)hdr->hdr_size) < 0)
|
||||
HDONE_ERROR(H5E_BTREE, H5E_CANTFREE, HADDR_UNDEF, "unable to free v2 B-tree header")
|
||||
|
||||
/* Destroy header */
|
||||
@ -524,7 +523,7 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
H5B2_hdr_t *
|
||||
H5B2__hdr_protect(H5F_t *f, hid_t dxpl_id, haddr_t hdr_addr, void *ctx_udata,
|
||||
H5B2__hdr_protect(H5F_t *f, haddr_t hdr_addr, void *ctx_udata,
|
||||
unsigned flags)
|
||||
{
|
||||
H5B2_hdr_cache_ud_t udata; /* User data for cache callbacks */
|
||||
@ -546,7 +545,7 @@ H5B2__hdr_protect(H5F_t *f, hid_t dxpl_id, haddr_t hdr_addr, void *ctx_udata,
|
||||
udata.ctx_udata = ctx_udata;
|
||||
|
||||
/* Protect the header */
|
||||
if(NULL == (hdr = (H5B2_hdr_t *)H5AC_protect(f, dxpl_id, H5AC_BT2_HDR, hdr_addr, &udata, flags)))
|
||||
if(NULL == (hdr = (H5B2_hdr_t *)H5AC_protect(f, H5AC_BT2_HDR, hdr_addr, &udata, flags)))
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, NULL, "unable to load v2 B-tree header, address = %llu", (unsigned long long)hdr_addr)
|
||||
hdr->f = f; /* (Must be set again here, in case the header was already in the cache -QAK) */
|
||||
|
||||
@ -557,7 +556,7 @@ H5B2__hdr_protect(H5F_t *f, hid_t dxpl_id, haddr_t hdr_addr, void *ctx_udata,
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTCREATE, NULL, "can't create v2 B-tree proxy")
|
||||
|
||||
/* Add header as child of 'top' proxy */
|
||||
if(H5AC_proxy_entry_add_child(hdr->top_proxy, f, dxpl_id, hdr) < 0)
|
||||
if(H5AC_proxy_entry_add_child(hdr->top_proxy, f, hdr) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTSET, NULL, "unable to add v2 B-tree header as child of proxy")
|
||||
} /* end if */
|
||||
|
||||
@ -568,7 +567,7 @@ done:
|
||||
/* Clean up on error */
|
||||
if(!ret_value) {
|
||||
/* Release the header, if it was protected */
|
||||
if(hdr && H5AC_unprotect(hdr->f, dxpl_id, H5AC_BT2_HDR, hdr_addr, hdr, H5AC__NO_FLAGS_SET) < 0)
|
||||
if(hdr && H5AC_unprotect(hdr->f, H5AC_BT2_HDR, hdr_addr, hdr, H5AC__NO_FLAGS_SET) < 0)
|
||||
HDONE_ERROR(H5E_BTREE, H5E_CANTUNPROTECT, NULL, "unable to unprotect v2 B-tree header, address = %llu", (unsigned long long)hdr_addr)
|
||||
} /* end if */
|
||||
|
||||
@ -590,7 +589,7 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
herr_t
|
||||
H5B2__hdr_unprotect(H5B2_hdr_t *hdr, hid_t dxpl_id, unsigned cache_flags)
|
||||
H5B2__hdr_unprotect(H5B2_hdr_t *hdr, unsigned cache_flags)
|
||||
{
|
||||
herr_t ret_value = SUCCEED; /* Return value */
|
||||
|
||||
@ -600,7 +599,7 @@ H5B2__hdr_unprotect(H5B2_hdr_t *hdr, hid_t dxpl_id, unsigned cache_flags)
|
||||
HDassert(hdr);
|
||||
|
||||
/* Unprotect the header */
|
||||
if(H5AC_unprotect(hdr->f, dxpl_id, H5AC_BT2_HDR, hdr->addr, hdr, cache_flags) < 0)
|
||||
if(H5AC_unprotect(hdr->f, H5AC_BT2_HDR, hdr->addr, hdr, cache_flags) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTUNPROTECT, FAIL, "unable to unprotect v2 B-tree header, address = %llu", (unsigned long long)hdr->addr)
|
||||
|
||||
done:
|
||||
@ -699,7 +698,7 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
herr_t
|
||||
H5B2__hdr_delete(H5B2_hdr_t *hdr, hid_t dxpl_id)
|
||||
H5B2__hdr_delete(H5B2_hdr_t *hdr)
|
||||
{
|
||||
unsigned cache_flags = H5AC__NO_FLAGS_SET; /* Flags for unprotecting v2 B-tree header */
|
||||
herr_t ret_value = SUCCEED; /* Return value */
|
||||
@ -725,7 +724,7 @@ H5B2__hdr_delete(H5B2_hdr_t *hdr, hid_t dxpl_id)
|
||||
|
||||
/* Delete all nodes in B-tree */
|
||||
if(H5F_addr_defined(hdr->root.addr))
|
||||
if(H5B2__delete_node(hdr, dxpl_id, hdr->depth, &hdr->root, hdr, hdr->remove_op, hdr->remove_op_data) < 0)
|
||||
if(H5B2__delete_node(hdr, hdr->depth, &hdr->root, hdr, hdr->remove_op, hdr->remove_op_data) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTDELETE, FAIL, "unable to delete B-tree nodes")
|
||||
|
||||
/* Indicate that the heap header should be deleted & file space freed */
|
||||
@ -733,7 +732,7 @@ H5B2__hdr_delete(H5B2_hdr_t *hdr, hid_t dxpl_id)
|
||||
|
||||
done:
|
||||
/* Unprotect the header with appropriate flags */
|
||||
if(H5B2__hdr_unprotect(hdr, dxpl_id, cache_flags) < 0)
|
||||
if(H5B2__hdr_unprotect(hdr, cache_flags) < 0)
|
||||
HDONE_ERROR(H5E_BTREE, H5E_CANTUNPROTECT, FAIL, "unable to release v2 B-tree header")
|
||||
|
||||
FUNC_LEAVE_NOAPI(ret_value)
|
||||
|
194
src/H5B2int.c
194
src/H5B2int.c
@ -56,7 +56,7 @@
|
||||
/********************/
|
||||
/* Local Prototypes */
|
||||
/********************/
|
||||
static herr_t H5B2__update_child_flush_depends(H5B2_hdr_t *hdr, hid_t dxpl_id,
|
||||
static herr_t H5B2__update_child_flush_depends(H5B2_hdr_t *hdr,
|
||||
unsigned depth, const H5B2_node_ptr_t *node_ptrs, unsigned start_idx,
|
||||
unsigned end_idx, void *old_parent, void *new_parent);
|
||||
|
||||
@ -146,9 +146,9 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
herr_t
|
||||
H5B2__split1(H5B2_hdr_t *hdr, hid_t dxpl_id, uint16_t depth,
|
||||
H5B2_node_ptr_t *curr_node_ptr, unsigned *parent_cache_info_flags_ptr,
|
||||
H5B2_internal_t *internal, unsigned *internal_flags_ptr, unsigned idx)
|
||||
H5B2__split1(H5B2_hdr_t *hdr, uint16_t depth, H5B2_node_ptr_t *curr_node_ptr,
|
||||
unsigned *parent_cache_info_flags_ptr, H5B2_internal_t *internal,
|
||||
unsigned *internal_flags_ptr, unsigned idx)
|
||||
{
|
||||
const H5AC_class_t *child_class; /* Pointer to child node's class info */
|
||||
haddr_t left_addr, right_addr; /* Addresses of left & right child nodes */
|
||||
@ -180,7 +180,7 @@ H5B2__split1(H5B2_hdr_t *hdr, hid_t dxpl_id, uint16_t depth,
|
||||
|
||||
/* Create new internal node */
|
||||
internal->node_ptrs[idx + 1].all_nrec = internal->node_ptrs[idx + 1].node_nrec = 0;
|
||||
if(H5B2__create_internal(hdr, dxpl_id, internal, &(internal->node_ptrs[idx + 1]), (uint16_t)(depth - 1)) < 0)
|
||||
if(H5B2__create_internal(hdr, internal, &(internal->node_ptrs[idx + 1]), (uint16_t)(depth - 1)) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTINIT, FAIL, "unable to create new internal node")
|
||||
|
||||
/* Setup information for unlocking child nodes */
|
||||
@ -188,10 +188,10 @@ H5B2__split1(H5B2_hdr_t *hdr, hid_t dxpl_id, uint16_t depth,
|
||||
|
||||
/* Protect both leaves */
|
||||
/* (Shadow left node if doing SWMR writes) */
|
||||
if(NULL == (left_int = H5B2__protect_internal(hdr, dxpl_id, internal, &internal->node_ptrs[idx], (uint16_t)(depth - 1), hdr->swmr_write, H5AC__NO_FLAGS_SET)))
|
||||
if(NULL == (left_int = H5B2__protect_internal(hdr, internal, &internal->node_ptrs[idx], (uint16_t)(depth - 1), hdr->swmr_write, H5AC__NO_FLAGS_SET)))
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to protect B-tree internal node")
|
||||
left_addr = internal->node_ptrs[idx].addr;
|
||||
if(NULL == (right_int = H5B2__protect_internal(hdr, dxpl_id, internal, &internal->node_ptrs[idx + 1], (uint16_t)(depth - 1), FALSE, H5AC__NO_FLAGS_SET)))
|
||||
if(NULL == (right_int = H5B2__protect_internal(hdr, internal, &internal->node_ptrs[idx + 1], (uint16_t)(depth - 1), FALSE, H5AC__NO_FLAGS_SET)))
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to protect B-tree internal node")
|
||||
right_addr = internal->node_ptrs[idx + 1].addr;
|
||||
|
||||
@ -210,7 +210,7 @@ H5B2__split1(H5B2_hdr_t *hdr, hid_t dxpl_id, uint16_t depth,
|
||||
|
||||
/* Create new leaf node */
|
||||
internal->node_ptrs[idx + 1].all_nrec = internal->node_ptrs[idx + 1].node_nrec = 0;
|
||||
if(H5B2__create_leaf(hdr, dxpl_id, internal, &(internal->node_ptrs[idx + 1])) < 0)
|
||||
if(H5B2__create_leaf(hdr, internal, &(internal->node_ptrs[idx + 1])) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTINIT, FAIL, "unable to create new leaf node")
|
||||
|
||||
/* Setup information for unlocking child nodes */
|
||||
@ -218,10 +218,10 @@ H5B2__split1(H5B2_hdr_t *hdr, hid_t dxpl_id, uint16_t depth,
|
||||
|
||||
/* Protect both leaves */
|
||||
/* (Shadow the left node if doing SWMR writes) */
|
||||
if(NULL == (left_leaf = H5B2__protect_leaf(hdr, dxpl_id, internal, &internal->node_ptrs[idx], hdr->swmr_write, H5AC__NO_FLAGS_SET)))
|
||||
if(NULL == (left_leaf = H5B2__protect_leaf(hdr, internal, &internal->node_ptrs[idx], hdr->swmr_write, H5AC__NO_FLAGS_SET)))
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to protect B-tree leaf node")
|
||||
left_addr = internal->node_ptrs[idx].addr;
|
||||
if(NULL == (right_leaf = H5B2__protect_leaf(hdr, dxpl_id, internal, &internal->node_ptrs[idx + 1], FALSE, H5AC__NO_FLAGS_SET)))
|
||||
if(NULL == (right_leaf = H5B2__protect_leaf(hdr, internal, &internal->node_ptrs[idx + 1], FALSE, H5AC__NO_FLAGS_SET)))
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to protect B-tree leaf node")
|
||||
right_addr = internal->node_ptrs[idx + 1].addr;
|
||||
|
||||
@ -299,7 +299,7 @@ H5B2__split1(H5B2_hdr_t *hdr, hid_t dxpl_id, uint16_t depth,
|
||||
|
||||
/* Update flush dependencies for grandchildren, if using SWMR */
|
||||
if(hdr->swmr_write && depth > 1)
|
||||
if(H5B2__update_child_flush_depends(hdr, dxpl_id, depth, right_node_ptrs,
|
||||
if(H5B2__update_child_flush_depends(hdr, depth, right_node_ptrs,
|
||||
0, (unsigned)(*right_nrec + 1), left_child, right_child) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTUPDATE, FAIL, "unable to update child nodes to new parent")
|
||||
|
||||
@ -317,9 +317,9 @@ H5B2__split1(H5B2_hdr_t *hdr, hid_t dxpl_id, uint16_t depth,
|
||||
|
||||
done:
|
||||
/* Release child nodes (marked as dirty) */
|
||||
if(left_child && H5AC_unprotect(hdr->f, dxpl_id, child_class, left_addr, left_child, left_child_flags) < 0)
|
||||
if(left_child && H5AC_unprotect(hdr->f, child_class, left_addr, left_child, left_child_flags) < 0)
|
||||
HDONE_ERROR(H5E_BTREE, H5E_CANTUNPROTECT, FAIL, "unable to release B-tree leaf node")
|
||||
if(right_child && H5AC_unprotect(hdr->f, dxpl_id, child_class, right_addr, right_child, right_child_flags) < 0)
|
||||
if(right_child && H5AC_unprotect(hdr->f, child_class, right_addr, right_child, right_child_flags) < 0)
|
||||
HDONE_ERROR(H5E_BTREE, H5E_CANTUNPROTECT, FAIL, "unable to release B-tree leaf node")
|
||||
|
||||
FUNC_LEAVE_NOAPI(ret_value)
|
||||
@ -341,7 +341,7 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
herr_t
|
||||
H5B2__split_root(H5B2_hdr_t *hdr, hid_t dxpl_id)
|
||||
H5B2__split_root(H5B2_hdr_t *hdr)
|
||||
{
|
||||
H5B2_internal_t *new_root = NULL; /* Pointer to new root node */
|
||||
unsigned new_root_flags = H5AC__NO_FLAGS_SET; /* Cache flags for new root node */
|
||||
@ -381,23 +381,23 @@ H5B2__split_root(H5B2_hdr_t *hdr, hid_t dxpl_id)
|
||||
|
||||
/* Create new internal node to use as root */
|
||||
hdr->root.node_nrec = 0;
|
||||
if(H5B2__create_internal(hdr, dxpl_id, hdr, &(hdr->root), hdr->depth) < 0)
|
||||
if(H5B2__create_internal(hdr, hdr, &(hdr->root), hdr->depth) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTINIT, FAIL, "unable to create new internal node")
|
||||
|
||||
/* Protect new root node */
|
||||
if(NULL == (new_root = H5B2__protect_internal(hdr, dxpl_id, hdr, &hdr->root, hdr->depth, FALSE, H5AC__NO_FLAGS_SET)))
|
||||
if(NULL == (new_root = H5B2__protect_internal(hdr, hdr, &hdr->root, hdr->depth, FALSE, H5AC__NO_FLAGS_SET)))
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to protect B-tree internal node")
|
||||
|
||||
/* Set first node pointer in root node to old root node pointer info */
|
||||
new_root->node_ptrs[0] = old_root_ptr;
|
||||
|
||||
/* Split original root node */
|
||||
if(H5B2__split1(hdr, dxpl_id, hdr->depth, &(hdr->root), NULL, new_root, &new_root_flags, 0) < 0)
|
||||
if(H5B2__split1(hdr, hdr->depth, &(hdr->root), NULL, new_root, &new_root_flags, 0) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTSPLIT, FAIL, "unable to split old root node")
|
||||
|
||||
done:
|
||||
/* Release new root node (marked as dirty) */
|
||||
if(new_root && H5AC_unprotect(hdr->f, dxpl_id, H5AC_BT2_INT, hdr->root.addr, new_root, new_root_flags) < 0)
|
||||
if(new_root && H5AC_unprotect(hdr->f, H5AC_BT2_INT, hdr->root.addr, new_root, new_root_flags) < 0)
|
||||
HDONE_ERROR(H5E_BTREE, H5E_CANTUNPROTECT, FAIL, "unable to release B-tree internal node")
|
||||
|
||||
FUNC_LEAVE_NOAPI(ret_value)
|
||||
@ -419,8 +419,8 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
herr_t
|
||||
H5B2__redistribute2(H5B2_hdr_t *hdr, hid_t dxpl_id, uint16_t depth,
|
||||
H5B2_internal_t *internal, unsigned idx)
|
||||
H5B2__redistribute2(H5B2_hdr_t *hdr, uint16_t depth, H5B2_internal_t *internal,
|
||||
unsigned idx)
|
||||
{
|
||||
const H5AC_class_t *child_class; /* Pointer to child node's class info */
|
||||
haddr_t left_addr, right_addr; /* Addresses of left & right child nodes */
|
||||
@ -448,10 +448,10 @@ H5B2__redistribute2(H5B2_hdr_t *hdr, hid_t dxpl_id, uint16_t depth,
|
||||
|
||||
/* Lock left & right B-tree child nodes */
|
||||
/* (Shadow both nodes if doing SWMR writes) */
|
||||
if(NULL == (left_internal = H5B2__protect_internal(hdr, dxpl_id, internal, &internal->node_ptrs[idx], (uint16_t)(depth - 1), hdr->swmr_write, H5AC__NO_FLAGS_SET)))
|
||||
if(NULL == (left_internal = H5B2__protect_internal(hdr, internal, &internal->node_ptrs[idx], (uint16_t)(depth - 1), hdr->swmr_write, H5AC__NO_FLAGS_SET)))
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to protect B-tree leaf node")
|
||||
left_addr = internal->node_ptrs[idx].addr;
|
||||
if(NULL == (right_internal = H5B2__protect_internal(hdr, dxpl_id, internal, &internal->node_ptrs[idx + 1], (uint16_t)(depth - 1), hdr->swmr_write, H5AC__NO_FLAGS_SET)))
|
||||
if(NULL == (right_internal = H5B2__protect_internal(hdr, internal, &internal->node_ptrs[idx + 1], (uint16_t)(depth - 1), hdr->swmr_write, H5AC__NO_FLAGS_SET)))
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to protect B-tree leaf node")
|
||||
right_addr = internal->node_ptrs[idx + 1].addr;
|
||||
|
||||
@ -474,10 +474,10 @@ H5B2__redistribute2(H5B2_hdr_t *hdr, hid_t dxpl_id, uint16_t depth,
|
||||
|
||||
/* Lock left & right B-tree child nodes */
|
||||
/* (Shadow both nodes if doing SWMR writes) */
|
||||
if(NULL == (left_leaf = H5B2__protect_leaf(hdr, dxpl_id, internal, &internal->node_ptrs[idx], hdr->swmr_write, H5AC__NO_FLAGS_SET)))
|
||||
if(NULL == (left_leaf = H5B2__protect_leaf(hdr, internal, &internal->node_ptrs[idx], hdr->swmr_write, H5AC__NO_FLAGS_SET)))
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to protect B-tree leaf node")
|
||||
left_addr = internal->node_ptrs[idx].addr;
|
||||
if(NULL == (right_leaf = H5B2__protect_leaf(hdr, dxpl_id, internal, &internal->node_ptrs[idx + 1], hdr->swmr_write, H5AC__NO_FLAGS_SET)))
|
||||
if(NULL == (right_leaf = H5B2__protect_leaf(hdr, internal, &internal->node_ptrs[idx + 1], hdr->swmr_write, H5AC__NO_FLAGS_SET)))
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to protect B-tree leaf node")
|
||||
right_addr = internal->node_ptrs[idx + 1].addr;
|
||||
|
||||
@ -542,7 +542,7 @@ H5B2__redistribute2(H5B2_hdr_t *hdr, hid_t dxpl_id, uint16_t depth,
|
||||
|
||||
/* Update flush dependencies for grandchildren, if using SWMR */
|
||||
if(hdr->swmr_write && depth > 1)
|
||||
if(H5B2__update_child_flush_depends(hdr, dxpl_id, depth, left_node_ptrs,
|
||||
if(H5B2__update_child_flush_depends(hdr, depth, left_node_ptrs,
|
||||
(unsigned)(*left_nrec + 1), (unsigned)(*left_nrec + move_nrec + 1), right_child, left_child) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTUPDATE, FAIL, "unable to update child nodes to new parent")
|
||||
|
||||
@ -598,7 +598,7 @@ H5B2__redistribute2(H5B2_hdr_t *hdr, hid_t dxpl_id, uint16_t depth,
|
||||
|
||||
/* Update flush dependencies for grandchildren, if using SWMR */
|
||||
if(hdr->swmr_write && depth > 1)
|
||||
if(H5B2__update_child_flush_depends(hdr, dxpl_id, depth, right_node_ptrs,
|
||||
if(H5B2__update_child_flush_depends(hdr, depth, right_node_ptrs,
|
||||
0, (unsigned)move_nrec, left_child, right_child) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTUPDATE, FAIL, "unable to update child nodes to new parent")
|
||||
|
||||
@ -639,9 +639,9 @@ H5B2__redistribute2(H5B2_hdr_t *hdr, hid_t dxpl_id, uint16_t depth,
|
||||
|
||||
done:
|
||||
/* Release child nodes (marked as dirty) */
|
||||
if(left_child && H5AC_unprotect(hdr->f, dxpl_id, child_class, left_addr, left_child, left_child_flags) < 0)
|
||||
if(left_child && H5AC_unprotect(hdr->f, child_class, left_addr, left_child, left_child_flags) < 0)
|
||||
HDONE_ERROR(H5E_BTREE, H5E_CANTUNPROTECT, FAIL, "unable to release B-tree child node")
|
||||
if(right_child && H5AC_unprotect(hdr->f, dxpl_id, child_class, right_addr, right_child, right_child_flags) < 0)
|
||||
if(right_child && H5AC_unprotect(hdr->f, child_class, right_addr, right_child, right_child_flags) < 0)
|
||||
HDONE_ERROR(H5E_BTREE, H5E_CANTUNPROTECT, FAIL, "unable to release B-tree child node")
|
||||
|
||||
FUNC_LEAVE_NOAPI(ret_value)
|
||||
@ -663,8 +663,8 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
herr_t
|
||||
H5B2__redistribute3(H5B2_hdr_t *hdr, hid_t dxpl_id, uint16_t depth,
|
||||
H5B2_internal_t *internal, unsigned *internal_flags_ptr, unsigned idx)
|
||||
H5B2__redistribute3(H5B2_hdr_t *hdr, uint16_t depth, H5B2_internal_t *internal,
|
||||
unsigned *internal_flags_ptr, unsigned idx)
|
||||
{
|
||||
H5B2_node_ptr_t *left_node_ptrs = NULL, *right_node_ptrs = NULL; /* Pointers to childs' node pointer info */
|
||||
H5B2_node_ptr_t *middle_node_ptrs = NULL; /* Pointers to childs' node pointer info */
|
||||
@ -701,13 +701,13 @@ H5B2__redistribute3(H5B2_hdr_t *hdr, hid_t dxpl_id, uint16_t depth,
|
||||
|
||||
/* Lock B-tree child nodes */
|
||||
/* (Shadow all nodes if doing SWMR writes) */
|
||||
if(NULL == (left_internal = H5B2__protect_internal(hdr, dxpl_id, internal, &internal->node_ptrs[idx - 1], (uint16_t)(depth - 1), hdr->swmr_write, H5AC__NO_FLAGS_SET)))
|
||||
if(NULL == (left_internal = H5B2__protect_internal(hdr, internal, &internal->node_ptrs[idx - 1], (uint16_t)(depth - 1), hdr->swmr_write, H5AC__NO_FLAGS_SET)))
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to protect B-tree internal node")
|
||||
left_addr = internal->node_ptrs[idx - 1].addr;
|
||||
if(NULL == (middle_internal = H5B2__protect_internal(hdr, dxpl_id, internal, &internal->node_ptrs[idx], (uint16_t)(depth - 1), hdr->swmr_write, H5AC__NO_FLAGS_SET)))
|
||||
if(NULL == (middle_internal = H5B2__protect_internal(hdr, internal, &internal->node_ptrs[idx], (uint16_t)(depth - 1), hdr->swmr_write, H5AC__NO_FLAGS_SET)))
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to protect B-tree internal node")
|
||||
middle_addr = internal->node_ptrs[idx].addr;
|
||||
if(NULL == (right_internal = H5B2__protect_internal(hdr, dxpl_id, internal, &internal->node_ptrs[idx + 1], (uint16_t)(depth - 1), hdr->swmr_write, H5AC__NO_FLAGS_SET)))
|
||||
if(NULL == (right_internal = H5B2__protect_internal(hdr, internal, &internal->node_ptrs[idx + 1], (uint16_t)(depth - 1), hdr->swmr_write, H5AC__NO_FLAGS_SET)))
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to protect B-tree internal node")
|
||||
right_addr = internal->node_ptrs[idx + 1].addr;
|
||||
|
||||
@ -735,13 +735,13 @@ H5B2__redistribute3(H5B2_hdr_t *hdr, hid_t dxpl_id, uint16_t depth,
|
||||
|
||||
/* Lock B-tree child nodes */
|
||||
/* (Shadow all nodes if doing SWMR writes) */
|
||||
if(NULL == (left_leaf = H5B2__protect_leaf(hdr, dxpl_id, internal, &internal->node_ptrs[idx - 1], hdr->swmr_write, H5AC__NO_FLAGS_SET)))
|
||||
if(NULL == (left_leaf = H5B2__protect_leaf(hdr, internal, &internal->node_ptrs[idx - 1], hdr->swmr_write, H5AC__NO_FLAGS_SET)))
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to protect B-tree leaf node")
|
||||
left_addr = internal->node_ptrs[idx - 1].addr;
|
||||
if(NULL == (middle_leaf = H5B2__protect_leaf(hdr, dxpl_id, internal, &internal->node_ptrs[idx], hdr->swmr_write, H5AC__NO_FLAGS_SET)))
|
||||
if(NULL == (middle_leaf = H5B2__protect_leaf(hdr, internal, &internal->node_ptrs[idx], hdr->swmr_write, H5AC__NO_FLAGS_SET)))
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to protect B-tree leaf node")
|
||||
middle_addr = internal->node_ptrs[idx].addr;
|
||||
if(NULL == (right_leaf = H5B2__protect_leaf(hdr, dxpl_id, internal, &internal->node_ptrs[idx + 1], hdr->swmr_write, H5AC__NO_FLAGS_SET)))
|
||||
if(NULL == (right_leaf = H5B2__protect_leaf(hdr, internal, &internal->node_ptrs[idx + 1], hdr->swmr_write, H5AC__NO_FLAGS_SET)))
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to protect B-tree leaf node")
|
||||
right_addr = internal->node_ptrs[idx + 1].addr;
|
||||
|
||||
@ -812,7 +812,7 @@ H5B2__redistribute3(H5B2_hdr_t *hdr, hid_t dxpl_id, uint16_t depth,
|
||||
|
||||
/* Update flush dependencies for grandchildren, if using SWMR */
|
||||
if(hdr->swmr_write && depth > 1)
|
||||
if(H5B2__update_child_flush_depends(hdr, dxpl_id, depth, left_node_ptrs,
|
||||
if(H5B2__update_child_flush_depends(hdr, depth, left_node_ptrs,
|
||||
(unsigned)(*left_nrec + 1), (unsigned)(*left_nrec + moved_middle_nrec + 1), middle_child, left_child) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTUPDATE, FAIL, "unable to update child nodes to new parent")
|
||||
|
||||
@ -861,7 +861,7 @@ H5B2__redistribute3(H5B2_hdr_t *hdr, hid_t dxpl_id, uint16_t depth,
|
||||
|
||||
/* Update flush dependencies for grandchildren, if using SWMR */
|
||||
if(hdr->swmr_write && depth > 1)
|
||||
if(H5B2__update_child_flush_depends(hdr, dxpl_id, depth, right_node_ptrs,
|
||||
if(H5B2__update_child_flush_depends(hdr, depth, right_node_ptrs,
|
||||
0, (unsigned)right_nrec_move, middle_child, right_child) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTUPDATE, FAIL, "unable to update child nodes to new parent")
|
||||
|
||||
@ -910,7 +910,7 @@ H5B2__redistribute3(H5B2_hdr_t *hdr, hid_t dxpl_id, uint16_t depth,
|
||||
|
||||
/* Update flush dependencies for grandchildren, if using SWMR */
|
||||
if(hdr->swmr_write && depth > 1)
|
||||
if(H5B2__update_child_flush_depends(hdr, dxpl_id, depth, middle_node_ptrs,
|
||||
if(H5B2__update_child_flush_depends(hdr, depth, middle_node_ptrs,
|
||||
0, (unsigned)left_nrec_move, left_child, middle_child) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTUPDATE, FAIL, "unable to update child nodes to new parent")
|
||||
|
||||
@ -958,7 +958,7 @@ H5B2__redistribute3(H5B2_hdr_t *hdr, hid_t dxpl_id, uint16_t depth,
|
||||
|
||||
/* Update flush dependencies for grandchildren, if using SWMR */
|
||||
if(hdr->swmr_write && depth > 1)
|
||||
if(H5B2__update_child_flush_depends(hdr, dxpl_id, depth, middle_node_ptrs,
|
||||
if(H5B2__update_child_flush_depends(hdr, depth, middle_node_ptrs,
|
||||
(unsigned)(curr_middle_nrec + 1), (unsigned)(curr_middle_nrec + right_nrec_move + 1), right_child, middle_child) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTUPDATE, FAIL, "unable to update child nodes to new parent")
|
||||
|
||||
@ -1010,11 +1010,11 @@ H5B2__redistribute3(H5B2_hdr_t *hdr, hid_t dxpl_id, uint16_t depth,
|
||||
|
||||
done:
|
||||
/* Unlock child nodes (marked as dirty) */
|
||||
if(left_child && H5AC_unprotect(hdr->f, dxpl_id, child_class, left_addr, left_child, left_child_flags) < 0)
|
||||
if(left_child && H5AC_unprotect(hdr->f, child_class, left_addr, left_child, left_child_flags) < 0)
|
||||
HDONE_ERROR(H5E_BTREE, H5E_CANTUNPROTECT, FAIL, "unable to release B-tree child node")
|
||||
if(middle_child && H5AC_unprotect(hdr->f, dxpl_id, child_class, middle_addr, middle_child, middle_child_flags) < 0)
|
||||
if(middle_child && H5AC_unprotect(hdr->f, child_class, middle_addr, middle_child, middle_child_flags) < 0)
|
||||
HDONE_ERROR(H5E_BTREE, H5E_CANTUNPROTECT, FAIL, "unable to release B-tree child node")
|
||||
if(right_child && H5AC_unprotect(hdr->f, dxpl_id, child_class, right_addr, right_child, right_child_flags) < 0)
|
||||
if(right_child && H5AC_unprotect(hdr->f, child_class, right_addr, right_child, right_child_flags) < 0)
|
||||
HDONE_ERROR(H5E_BTREE, H5E_CANTUNPROTECT, FAIL, "unable to release B-tree child node")
|
||||
|
||||
FUNC_LEAVE_NOAPI(ret_value)
|
||||
@ -1037,9 +1037,9 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
herr_t
|
||||
H5B2__merge2(H5B2_hdr_t *hdr, hid_t dxpl_id, uint16_t depth,
|
||||
H5B2_node_ptr_t *curr_node_ptr, unsigned *parent_cache_info_flags_ptr,
|
||||
H5B2_internal_t *internal, unsigned *internal_flags_ptr, unsigned idx)
|
||||
H5B2__merge2(H5B2_hdr_t *hdr, uint16_t depth, H5B2_node_ptr_t *curr_node_ptr,
|
||||
unsigned *parent_cache_info_flags_ptr, H5B2_internal_t *internal,
|
||||
unsigned *internal_flags_ptr, unsigned idx)
|
||||
{
|
||||
const H5AC_class_t *child_class; /* Pointer to child node's class info */
|
||||
haddr_t left_addr, right_addr; /* Addresses of left & right child nodes */
|
||||
@ -1068,10 +1068,10 @@ H5B2__merge2(H5B2_hdr_t *hdr, hid_t dxpl_id, uint16_t depth,
|
||||
|
||||
/* Lock left & right B-tree child nodes */
|
||||
/* (Shadow the left node if doing SWMR writes) */
|
||||
if(NULL == (left_internal = H5B2__protect_internal(hdr, dxpl_id, internal, &internal->node_ptrs[idx], (uint16_t)(depth - 1), hdr->swmr_write, H5AC__NO_FLAGS_SET)))
|
||||
if(NULL == (left_internal = H5B2__protect_internal(hdr, internal, &internal->node_ptrs[idx], (uint16_t)(depth - 1), hdr->swmr_write, H5AC__NO_FLAGS_SET)))
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to protect B-tree internal node")
|
||||
left_addr = internal->node_ptrs[idx].addr;
|
||||
if(NULL == (right_internal = H5B2__protect_internal(hdr, dxpl_id, internal, &internal->node_ptrs[idx + 1], (uint16_t)(depth - 1), FALSE, H5AC__NO_FLAGS_SET)))
|
||||
if(NULL == (right_internal = H5B2__protect_internal(hdr, internal, &internal->node_ptrs[idx + 1], (uint16_t)(depth - 1), FALSE, H5AC__NO_FLAGS_SET)))
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to protect B-tree internal node")
|
||||
right_addr = internal->node_ptrs[idx + 1].addr;
|
||||
|
||||
@ -1094,10 +1094,10 @@ H5B2__merge2(H5B2_hdr_t *hdr, hid_t dxpl_id, uint16_t depth,
|
||||
|
||||
/* Lock left & right B-tree child nodes */
|
||||
/* (Shadow the left node if doing SWMR writes) */
|
||||
if(NULL == (left_leaf = H5B2__protect_leaf(hdr, dxpl_id, internal, &internal->node_ptrs[idx], hdr->swmr_write, H5AC__NO_FLAGS_SET)))
|
||||
if(NULL == (left_leaf = H5B2__protect_leaf(hdr, internal, &internal->node_ptrs[idx], hdr->swmr_write, H5AC__NO_FLAGS_SET)))
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to protect B-tree leaf node")
|
||||
left_addr = internal->node_ptrs[idx].addr;
|
||||
if(NULL == (right_leaf = H5B2__protect_leaf(hdr, dxpl_id, internal, &internal->node_ptrs[idx + 1], FALSE, H5AC__NO_FLAGS_SET)))
|
||||
if(NULL == (right_leaf = H5B2__protect_leaf(hdr, internal, &internal->node_ptrs[idx + 1], FALSE, H5AC__NO_FLAGS_SET)))
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to protect B-tree leaf node")
|
||||
right_addr = internal->node_ptrs[idx + 1].addr;
|
||||
|
||||
@ -1124,7 +1124,7 @@ H5B2__merge2(H5B2_hdr_t *hdr, hid_t dxpl_id, uint16_t depth,
|
||||
|
||||
/* Update flush dependencies for grandchildren, if using SWMR */
|
||||
if(hdr->swmr_write && depth > 1)
|
||||
if(H5B2__update_child_flush_depends(hdr, dxpl_id, depth, left_node_ptrs,
|
||||
if(H5B2__update_child_flush_depends(hdr, depth, left_node_ptrs,
|
||||
(unsigned)(*left_nrec + 1), (unsigned)(*left_nrec + *right_nrec + 2), right_child, left_child) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTUPDATE, FAIL, "unable to update child nodes to new parent")
|
||||
|
||||
@ -1173,11 +1173,11 @@ H5B2__merge2(H5B2_hdr_t *hdr, hid_t dxpl_id, uint16_t depth,
|
||||
|
||||
done:
|
||||
/* Unlock left node (marked as dirty) */
|
||||
if(left_child && H5AC_unprotect(hdr->f, dxpl_id, child_class, left_addr, left_child, left_child_flags) < 0)
|
||||
if(left_child && H5AC_unprotect(hdr->f, child_class, left_addr, left_child, left_child_flags) < 0)
|
||||
HDONE_ERROR(H5E_BTREE, H5E_CANTUNPROTECT, FAIL, "unable to release B-tree child node")
|
||||
|
||||
/* Delete right node & remove from cache (marked as dirty) */
|
||||
if(right_child && H5AC_unprotect(hdr->f, dxpl_id, child_class, right_addr, right_child, right_child_flags) < 0)
|
||||
if(right_child && H5AC_unprotect(hdr->f, child_class, right_addr, right_child, right_child_flags) < 0)
|
||||
HDONE_ERROR(H5E_BTREE, H5E_CANTUNPROTECT, FAIL, "unable to release B-tree child node")
|
||||
|
||||
FUNC_LEAVE_NOAPI(ret_value)
|
||||
@ -1200,9 +1200,9 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
herr_t
|
||||
H5B2__merge3(H5B2_hdr_t *hdr, hid_t dxpl_id, uint16_t depth,
|
||||
H5B2_node_ptr_t *curr_node_ptr, unsigned *parent_cache_info_flags_ptr,
|
||||
H5B2_internal_t *internal, unsigned *internal_flags_ptr, unsigned idx)
|
||||
H5B2__merge3(H5B2_hdr_t *hdr, uint16_t depth, H5B2_node_ptr_t *curr_node_ptr,
|
||||
unsigned *parent_cache_info_flags_ptr, H5B2_internal_t *internal,
|
||||
unsigned *internal_flags_ptr, unsigned idx)
|
||||
{
|
||||
const H5AC_class_t *child_class; /* Pointer to child node's class info */
|
||||
haddr_t left_addr, right_addr; /* Addresses of left & right child nodes */
|
||||
@ -1239,13 +1239,13 @@ H5B2__merge3(H5B2_hdr_t *hdr, hid_t dxpl_id, uint16_t depth,
|
||||
|
||||
/* Lock B-tree child nodes */
|
||||
/* (Shadow left and middle nodes if doing SWMR writes) */
|
||||
if(NULL == (left_internal = H5B2__protect_internal(hdr, dxpl_id, internal, &internal->node_ptrs[idx - 1], (uint16_t)(depth - 1), hdr->swmr_write, H5AC__NO_FLAGS_SET)))
|
||||
if(NULL == (left_internal = H5B2__protect_internal(hdr, internal, &internal->node_ptrs[idx - 1], (uint16_t)(depth - 1), hdr->swmr_write, H5AC__NO_FLAGS_SET)))
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to protect B-tree internal node")
|
||||
left_addr = internal->node_ptrs[idx - 1].addr;
|
||||
if(NULL == (middle_internal = H5B2__protect_internal(hdr, dxpl_id, internal, &internal->node_ptrs[idx], (uint16_t)(depth - 1), hdr->swmr_write, H5AC__NO_FLAGS_SET)))
|
||||
if(NULL == (middle_internal = H5B2__protect_internal(hdr, internal, &internal->node_ptrs[idx], (uint16_t)(depth - 1), hdr->swmr_write, H5AC__NO_FLAGS_SET)))
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to protect B-tree internal node")
|
||||
middle_addr = internal->node_ptrs[idx].addr;
|
||||
if(NULL == (right_internal = H5B2__protect_internal(hdr, dxpl_id, internal, &internal->node_ptrs[idx + 1], (uint16_t)(depth - 1), FALSE, H5AC__NO_FLAGS_SET)))
|
||||
if(NULL == (right_internal = H5B2__protect_internal(hdr, internal, &internal->node_ptrs[idx + 1], (uint16_t)(depth - 1), FALSE, H5AC__NO_FLAGS_SET)))
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to protect B-tree internal node")
|
||||
right_addr = internal->node_ptrs[idx + 1].addr;
|
||||
|
||||
@ -1273,13 +1273,13 @@ H5B2__merge3(H5B2_hdr_t *hdr, hid_t dxpl_id, uint16_t depth,
|
||||
|
||||
/* Lock B-tree child nodes */
|
||||
/* (Shadow left and middle nodes if doing SWMR writes) */
|
||||
if(NULL == (left_leaf = H5B2__protect_leaf(hdr, dxpl_id, internal, &internal->node_ptrs[idx - 1], hdr->swmr_write, H5AC__NO_FLAGS_SET)))
|
||||
if(NULL == (left_leaf = H5B2__protect_leaf(hdr, internal, &internal->node_ptrs[idx - 1], hdr->swmr_write, H5AC__NO_FLAGS_SET)))
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to protect B-tree leaf node")
|
||||
left_addr = internal->node_ptrs[idx - 1].addr;
|
||||
if(NULL == (middle_leaf = H5B2__protect_leaf(hdr, dxpl_id, internal, &internal->node_ptrs[idx], hdr->swmr_write, H5AC__NO_FLAGS_SET)))
|
||||
if(NULL == (middle_leaf = H5B2__protect_leaf(hdr, internal, &internal->node_ptrs[idx], hdr->swmr_write, H5AC__NO_FLAGS_SET)))
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to protect B-tree leaf node")
|
||||
middle_addr = internal->node_ptrs[idx].addr;
|
||||
if(NULL == (right_leaf = H5B2__protect_leaf(hdr, dxpl_id, internal, &internal->node_ptrs[idx + 1], FALSE, H5AC__NO_FLAGS_SET)))
|
||||
if(NULL == (right_leaf = H5B2__protect_leaf(hdr, internal, &internal->node_ptrs[idx + 1], FALSE, H5AC__NO_FLAGS_SET)))
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to protect B-tree leaf node")
|
||||
right_addr = internal->node_ptrs[idx + 1].addr;
|
||||
|
||||
@ -1332,7 +1332,7 @@ H5B2__merge3(H5B2_hdr_t *hdr, hid_t dxpl_id, uint16_t depth,
|
||||
|
||||
/* Update flush dependencies for grandchildren, if using SWMR */
|
||||
if(hdr->swmr_write && depth > 1)
|
||||
if(H5B2__update_child_flush_depends(hdr, dxpl_id, depth, left_node_ptrs,
|
||||
if(H5B2__update_child_flush_depends(hdr, depth, left_node_ptrs,
|
||||
(unsigned)(*left_nrec + 1), (unsigned)(*left_nrec + middle_nrec_move + 1), middle_child, left_child) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTUPDATE, FAIL, "unable to update child nodes to new parent")
|
||||
|
||||
@ -1360,7 +1360,7 @@ H5B2__merge3(H5B2_hdr_t *hdr, hid_t dxpl_id, uint16_t depth,
|
||||
|
||||
/* Update flush dependencies for grandchildren, if using SWMR */
|
||||
if(hdr->swmr_write && depth > 1)
|
||||
if(H5B2__update_child_flush_depends(hdr, dxpl_id, depth, middle_node_ptrs,
|
||||
if(H5B2__update_child_flush_depends(hdr, depth, middle_node_ptrs,
|
||||
(unsigned)(*middle_nrec + 1), (unsigned)(*middle_nrec + *right_nrec + 2), right_child, middle_child) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTUPDATE, FAIL, "unable to update child nodes to new parent")
|
||||
|
||||
@ -1415,13 +1415,13 @@ H5B2__merge3(H5B2_hdr_t *hdr, hid_t dxpl_id, uint16_t depth,
|
||||
|
||||
done:
|
||||
/* Unlock left & middle nodes (marked as dirty) */
|
||||
if(left_child && H5AC_unprotect(hdr->f, dxpl_id, child_class, left_addr, left_child, left_child_flags) < 0)
|
||||
if(left_child && H5AC_unprotect(hdr->f, child_class, left_addr, left_child, left_child_flags) < 0)
|
||||
HDONE_ERROR(H5E_BTREE, H5E_CANTUNPROTECT, FAIL, "unable to release B-tree child node")
|
||||
if(middle_child && H5AC_unprotect(hdr->f, dxpl_id, child_class, middle_addr, middle_child, middle_child_flags) < 0)
|
||||
if(middle_child && H5AC_unprotect(hdr->f, child_class, middle_addr, middle_child, middle_child_flags) < 0)
|
||||
HDONE_ERROR(H5E_BTREE, H5E_CANTUNPROTECT, FAIL, "unable to release B-tree child node")
|
||||
|
||||
/* Delete right node & remove from cache (marked as dirty) */
|
||||
if(right_child && H5AC_unprotect(hdr->f, dxpl_id, child_class, right_addr, right_child, right_child_flags) < 0)
|
||||
if(right_child && H5AC_unprotect(hdr->f, child_class, right_addr, right_child, right_child_flags) < 0)
|
||||
HDONE_ERROR(H5E_BTREE, H5E_CANTUNPROTECT, FAIL, "unable to release B-tree child node")
|
||||
|
||||
FUNC_LEAVE_NOAPI(ret_value)
|
||||
@ -1442,7 +1442,7 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
herr_t
|
||||
H5B2__insert(H5B2_hdr_t *hdr, hid_t dxpl_id, void *udata)
|
||||
H5B2__insert(H5B2_hdr_t *hdr, void *udata)
|
||||
{
|
||||
herr_t ret_value = SUCCEED; /* Return value */
|
||||
|
||||
@ -1455,23 +1455,23 @@ H5B2__insert(H5B2_hdr_t *hdr, hid_t dxpl_id, void *udata)
|
||||
/* Check if the root node is allocated yet */
|
||||
if(!H5F_addr_defined(hdr->root.addr)) {
|
||||
/* Create root node as leaf node in B-tree */
|
||||
if(H5B2__create_leaf(hdr, dxpl_id, hdr, &(hdr->root)) < 0)
|
||||
if(H5B2__create_leaf(hdr, hdr, &(hdr->root)) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTINIT, FAIL, "unable to create root node")
|
||||
} /* end if */
|
||||
/* Check if we need to split the root node (equiv. to a 1->2 node split) */
|
||||
else if(hdr->root.node_nrec == hdr->node_info[hdr->depth].split_nrec) {
|
||||
/* Split root node */
|
||||
if(H5B2__split_root(hdr, dxpl_id) < 0)
|
||||
if(H5B2__split_root(hdr) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTSPLIT, FAIL, "unable to split root node")
|
||||
} /* end if */
|
||||
|
||||
/* Attempt to insert record into B-tree */
|
||||
if(hdr->depth > 0) {
|
||||
if(H5B2__insert_internal(hdr, dxpl_id, hdr->depth, NULL, &hdr->root, H5B2_POS_ROOT, hdr, udata) < 0)
|
||||
if(H5B2__insert_internal(hdr, hdr->depth, NULL, &hdr->root, H5B2_POS_ROOT, hdr, udata) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTINSERT, FAIL, "unable to insert record into B-tree internal node")
|
||||
} /* end if */
|
||||
else {
|
||||
if(H5B2__insert_leaf(hdr, dxpl_id, &hdr->root, H5B2_POS_ROOT, hdr, udata) < 0)
|
||||
if(H5B2__insert_leaf(hdr, &hdr->root, H5B2_POS_ROOT, hdr, udata) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTINSERT, FAIL, "unable to insert record into B-tree leaf node")
|
||||
} /* end else */
|
||||
|
||||
@ -1502,9 +1502,8 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
herr_t
|
||||
H5B2__iterate_node(H5B2_hdr_t *hdr, hid_t dxpl_id, uint16_t depth,
|
||||
const H5B2_node_ptr_t *curr_node, void *parent, H5B2_operator_t op,
|
||||
void *op_data)
|
||||
H5B2__iterate_node(H5B2_hdr_t *hdr, uint16_t depth, const H5B2_node_ptr_t *curr_node,
|
||||
void *parent, H5B2_operator_t op, void *op_data)
|
||||
{
|
||||
const H5AC_class_t *curr_node_class = NULL; /* Pointer to current node's class info */
|
||||
void *node = NULL; /* Pointers to current node */
|
||||
@ -1527,7 +1526,7 @@ H5B2__iterate_node(H5B2_hdr_t *hdr, hid_t dxpl_id, uint16_t depth,
|
||||
H5B2_internal_t *internal; /* Pointer to internal node */
|
||||
|
||||
/* Lock the current B-tree node */
|
||||
if(NULL == (internal = H5B2__protect_internal(hdr, dxpl_id, parent, (H5B2_node_ptr_t *)curr_node, depth, FALSE, H5AC__READ_ONLY_FLAG))) /* Casting away const OK -QAK */
|
||||
if(NULL == (internal = H5B2__protect_internal(hdr, parent, (H5B2_node_ptr_t *)curr_node, depth, FALSE, H5AC__READ_ONLY_FLAG))) /* Casting away const OK -QAK */
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to protect B-tree internal node")
|
||||
|
||||
/* Set up information about current node */
|
||||
@ -1546,7 +1545,7 @@ H5B2__iterate_node(H5B2_hdr_t *hdr, hid_t dxpl_id, uint16_t depth,
|
||||
H5B2_leaf_t *leaf; /* Pointer to leaf node */
|
||||
|
||||
/* Lock the current B-tree node */
|
||||
if(NULL == (leaf = H5B2__protect_leaf(hdr, dxpl_id, parent, (H5B2_node_ptr_t *)curr_node, FALSE, H5AC__READ_ONLY_FLAG))) /* Casting away const OK -QAK */
|
||||
if(NULL == (leaf = H5B2__protect_leaf(hdr, parent, (H5B2_node_ptr_t *)curr_node, FALSE, H5AC__READ_ONLY_FLAG))) /* Casting away const OK -QAK */
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to protect B-tree leaf node")
|
||||
|
||||
/* Set up information about current node */
|
||||
@ -1563,7 +1562,7 @@ H5B2__iterate_node(H5B2_hdr_t *hdr, hid_t dxpl_id, uint16_t depth,
|
||||
HDmemcpy(native, node_native, (hdr->cls->nrec_size * curr_node->node_nrec));
|
||||
|
||||
/* Unlock the node */
|
||||
if(H5AC_unprotect(hdr->f, dxpl_id, curr_node_class, curr_node->addr, node, (unsigned)(hdr->swmr_write ? H5AC__PIN_ENTRY_FLAG : H5AC__NO_FLAGS_SET)) < 0)
|
||||
if(H5AC_unprotect(hdr->f, curr_node_class, curr_node->addr, node, (unsigned)(hdr->swmr_write ? H5AC__PIN_ENTRY_FLAG : H5AC__NO_FLAGS_SET)) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTUNPROTECT, FAIL, "unable to release B-tree node")
|
||||
if(hdr->swmr_write)
|
||||
node_pinned = TRUE;
|
||||
@ -1574,7 +1573,7 @@ H5B2__iterate_node(H5B2_hdr_t *hdr, hid_t dxpl_id, uint16_t depth,
|
||||
for(u = 0; u < curr_node->node_nrec && !ret_value; u++) {
|
||||
/* Descend into child node, if current node is an internal node */
|
||||
if(depth > 0) {
|
||||
if((ret_value = H5B2__iterate_node(hdr, dxpl_id, (uint16_t)(depth - 1), &(node_ptrs[u]), node, op, op_data)) < 0)
|
||||
if((ret_value = H5B2__iterate_node(hdr, (uint16_t)(depth - 1), &(node_ptrs[u]), node, op, op_data)) < 0)
|
||||
HERROR(H5E_BTREE, H5E_CANTLIST, "node iteration failed");
|
||||
} /* end if */
|
||||
|
||||
@ -1587,7 +1586,7 @@ H5B2__iterate_node(H5B2_hdr_t *hdr, hid_t dxpl_id, uint16_t depth,
|
||||
|
||||
/* Descend into last child node, if current node is an internal node */
|
||||
if(!ret_value && depth > 0) {
|
||||
if((ret_value = H5B2__iterate_node(hdr, dxpl_id, (uint16_t)(depth - 1), &(node_ptrs[u]), node, op, op_data)) < 0)
|
||||
if((ret_value = H5B2__iterate_node(hdr, (uint16_t)(depth - 1), &(node_ptrs[u]), node, op, op_data)) < 0)
|
||||
HERROR(H5E_BTREE, H5E_CANTLIST, "node iteration failed");
|
||||
} /* end if */
|
||||
|
||||
@ -1621,9 +1620,8 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
herr_t
|
||||
H5B2__delete_node(H5B2_hdr_t *hdr, hid_t dxpl_id, uint16_t depth,
|
||||
const H5B2_node_ptr_t *curr_node, void *parent, H5B2_remove_t op,
|
||||
void *op_data)
|
||||
H5B2__delete_node(H5B2_hdr_t *hdr, uint16_t depth, const H5B2_node_ptr_t *curr_node,
|
||||
void *parent, H5B2_remove_t op, void *op_data)
|
||||
{
|
||||
const H5AC_class_t *curr_node_class = NULL; /* Pointer to current node's class info */
|
||||
void *node = NULL; /* Pointers to current node */
|
||||
@ -1641,7 +1639,7 @@ H5B2__delete_node(H5B2_hdr_t *hdr, hid_t dxpl_id, uint16_t depth,
|
||||
unsigned u; /* Local index */
|
||||
|
||||
/* Lock the current B-tree node */
|
||||
if(NULL == (internal = H5B2__protect_internal(hdr, dxpl_id, parent, (H5B2_node_ptr_t *)curr_node, depth, FALSE, H5AC__NO_FLAGS_SET))) /* Casting away const OK -QAK */
|
||||
if(NULL == (internal = H5B2__protect_internal(hdr, parent, (H5B2_node_ptr_t *)curr_node, depth, FALSE, H5AC__NO_FLAGS_SET))) /* Casting away const OK -QAK */
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to protect B-tree internal node")
|
||||
|
||||
/* Set up information about current node */
|
||||
@ -1651,14 +1649,14 @@ H5B2__delete_node(H5B2_hdr_t *hdr, hid_t dxpl_id, uint16_t depth,
|
||||
|
||||
/* Descend into children */
|
||||
for(u = 0; u < internal->nrec + (unsigned)1; u++)
|
||||
if(H5B2__delete_node(hdr, dxpl_id, (uint16_t)(depth - 1), &(internal->node_ptrs[u]), internal, op, op_data) < 0)
|
||||
if(H5B2__delete_node(hdr, (uint16_t)(depth - 1), &(internal->node_ptrs[u]), internal, op, op_data) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTLIST, FAIL, "node descent failed")
|
||||
} /* end if */
|
||||
else {
|
||||
H5B2_leaf_t *leaf; /* Pointer to leaf node */
|
||||
|
||||
/* Lock the current B-tree node */
|
||||
if(NULL == (leaf = H5B2__protect_leaf(hdr, dxpl_id, parent, (H5B2_node_ptr_t *)curr_node, FALSE, H5AC__NO_FLAGS_SET))) /* Casting away const OK -QAK */
|
||||
if(NULL == (leaf = H5B2__protect_leaf(hdr, parent, (H5B2_node_ptr_t *)curr_node, FALSE, H5AC__NO_FLAGS_SET))) /* Casting away const OK -QAK */
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to protect B-tree leaf node")
|
||||
|
||||
/* Set up information about current node */
|
||||
@ -1681,7 +1679,7 @@ H5B2__delete_node(H5B2_hdr_t *hdr, hid_t dxpl_id, uint16_t depth,
|
||||
|
||||
done:
|
||||
/* Unlock & delete current node */
|
||||
if(node && H5AC_unprotect(hdr->f, dxpl_id, curr_node_class, curr_node->addr, node, (unsigned)(H5AC__DELETED_FLAG | (hdr->swmr_write ? 0 : H5AC__FREE_FILE_SPACE_FLAG))) < 0)
|
||||
if(node && H5AC_unprotect(hdr->f, curr_node_class, curr_node->addr, node, (unsigned)(H5AC__DELETED_FLAG | (hdr->swmr_write ? 0 : H5AC__FREE_FILE_SPACE_FLAG))) < 0)
|
||||
HDONE_ERROR(H5E_BTREE, H5E_CANTUNPROTECT, FAIL, "unable to release B-tree node")
|
||||
|
||||
FUNC_LEAVE_NOAPI(ret_value)
|
||||
@ -1702,8 +1700,8 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
herr_t
|
||||
H5B2__node_size(H5B2_hdr_t *hdr, hid_t dxpl_id, uint16_t depth,
|
||||
const H5B2_node_ptr_t *curr_node, void *parent, hsize_t *btree_size)
|
||||
H5B2__node_size(H5B2_hdr_t *hdr, uint16_t depth, const H5B2_node_ptr_t *curr_node,
|
||||
void *parent, hsize_t *btree_size)
|
||||
{
|
||||
H5B2_internal_t *internal = NULL; /* Pointer to internal node */
|
||||
herr_t ret_value = SUCCEED; /* Iterator return value */
|
||||
@ -1717,7 +1715,7 @@ H5B2__node_size(H5B2_hdr_t *hdr, hid_t dxpl_id, uint16_t depth,
|
||||
HDassert(depth > 0);
|
||||
|
||||
/* Lock the current B-tree node */
|
||||
if(NULL == (internal = H5B2__protect_internal(hdr, dxpl_id, parent, (H5B2_node_ptr_t *)curr_node, depth, FALSE, H5AC__READ_ONLY_FLAG))) /* Casting away const OK -QAK */
|
||||
if(NULL == (internal = H5B2__protect_internal(hdr, parent, (H5B2_node_ptr_t *)curr_node, depth, FALSE, H5AC__READ_ONLY_FLAG))) /* Casting away const OK -QAK */
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to protect B-tree internal node")
|
||||
|
||||
/* Recursively descend into child nodes, if we are above the "twig" level in the B-tree */
|
||||
@ -1726,7 +1724,7 @@ H5B2__node_size(H5B2_hdr_t *hdr, hid_t dxpl_id, uint16_t depth,
|
||||
|
||||
/* Descend into children */
|
||||
for(u = 0; u < internal->nrec + (unsigned)1; u++)
|
||||
if(H5B2__node_size(hdr, dxpl_id, (uint16_t)(depth - 1), &(internal->node_ptrs[u]), internal, btree_size) < 0)
|
||||
if(H5B2__node_size(hdr, (uint16_t)(depth - 1), &(internal->node_ptrs[u]), internal, btree_size) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTLIST, FAIL, "node iteration failed")
|
||||
} /* end if */
|
||||
else /* depth is 1: count all the leaf nodes from this node */
|
||||
@ -1736,7 +1734,7 @@ H5B2__node_size(H5B2_hdr_t *hdr, hid_t dxpl_id, uint16_t depth,
|
||||
*btree_size += hdr->node_size;
|
||||
|
||||
done:
|
||||
if(internal && H5AC_unprotect(hdr->f, dxpl_id, H5AC_BT2_INT, curr_node->addr, internal, H5AC__NO_FLAGS_SET) < 0)
|
||||
if(internal && H5AC_unprotect(hdr->f, H5AC_BT2_INT, curr_node->addr, internal, H5AC__NO_FLAGS_SET) < 0)
|
||||
HDONE_ERROR(H5E_BTREE, H5E_CANTUNPROTECT, FAIL, "unable to release B-tree node")
|
||||
|
||||
FUNC_LEAVE_NOAPI(ret_value)
|
||||
@ -1789,7 +1787,7 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
herr_t
|
||||
H5B2__update_flush_depend(H5B2_hdr_t *hdr, hid_t dxpl_id, unsigned depth,
|
||||
H5B2__update_flush_depend(H5B2_hdr_t *hdr, unsigned depth,
|
||||
const H5B2_node_ptr_t *node_ptr, void *old_parent, void *new_parent)
|
||||
{
|
||||
const H5AC_class_t *child_class; /* Pointer to child node's class info */
|
||||
@ -1820,7 +1818,7 @@ H5B2__update_flush_depend(H5B2_hdr_t *hdr, hid_t dxpl_id, unsigned depth,
|
||||
H5B2_internal_t *child_int;
|
||||
|
||||
/* Protect child */
|
||||
if(NULL == (child_int = H5B2__protect_internal(hdr, dxpl_id, new_parent, (H5B2_node_ptr_t *)node_ptr, (uint16_t)(depth - 1), FALSE, H5AC__NO_FLAGS_SET))) /* Casting away const OK -QAK */
|
||||
if(NULL == (child_int = H5B2__protect_internal(hdr, new_parent, (H5B2_node_ptr_t *)node_ptr, (uint16_t)(depth - 1), FALSE, H5AC__NO_FLAGS_SET))) /* Casting away const OK -QAK */
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to protect B-tree internal node")
|
||||
child_class = H5AC_BT2_INT;
|
||||
child = child_int;
|
||||
@ -1836,7 +1834,7 @@ H5B2__update_flush_depend(H5B2_hdr_t *hdr, hid_t dxpl_id, unsigned depth,
|
||||
H5B2_leaf_t *child_leaf;
|
||||
|
||||
/* Protect child */
|
||||
if(NULL == (child_leaf = H5B2__protect_leaf(hdr, dxpl_id, new_parent, (H5B2_node_ptr_t *)node_ptr, FALSE, H5AC__NO_FLAGS_SET))) /* Casting away const OK -QAK */
|
||||
if(NULL == (child_leaf = H5B2__protect_leaf(hdr, new_parent, (H5B2_node_ptr_t *)node_ptr, FALSE, H5AC__NO_FLAGS_SET))) /* Casting away const OK -QAK */
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to protect B-tree leaf node")
|
||||
child_class = H5AC_BT2_LEAF;
|
||||
child = child_leaf;
|
||||
@ -1866,7 +1864,7 @@ H5B2__update_flush_depend(H5B2_hdr_t *hdr, hid_t dxpl_id, unsigned depth,
|
||||
done:
|
||||
/* Unprotect the child */
|
||||
if(child)
|
||||
if(H5AC_unprotect(hdr->f, dxpl_id, child_class, node_ptr->addr, child, H5AC__NO_FLAGS_SET) < 0)
|
||||
if(H5AC_unprotect(hdr->f, child_class, node_ptr->addr, child, H5AC__NO_FLAGS_SET) < 0)
|
||||
HDONE_ERROR(H5E_BTREE, H5E_CANTUNPROTECT, FAIL, "unable to release B-tree node")
|
||||
|
||||
FUNC_LEAVE_NOAPI(ret_value)
|
||||
@ -1887,7 +1885,7 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static herr_t
|
||||
H5B2__update_child_flush_depends(H5B2_hdr_t *hdr, hid_t dxpl_id, unsigned depth,
|
||||
H5B2__update_child_flush_depends(H5B2_hdr_t *hdr, unsigned depth,
|
||||
const H5B2_node_ptr_t *node_ptrs, unsigned start_idx, unsigned end_idx,
|
||||
void *old_parent, void *new_parent)
|
||||
{
|
||||
@ -1907,7 +1905,7 @@ H5B2__update_child_flush_depends(H5B2_hdr_t *hdr, hid_t dxpl_id, unsigned depth,
|
||||
/* Loop over children */
|
||||
for(u = start_idx; u < end_idx; u++)
|
||||
/* Update parent for children */
|
||||
if(H5B2__update_flush_depend(hdr, dxpl_id, depth - 1, &node_ptrs[u], old_parent, new_parent) < 0)
|
||||
if(H5B2__update_flush_depend(hdr, depth - 1, &node_ptrs[u], old_parent, new_parent) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTUPDATE, FAIL, "unable to update child node to new parent")
|
||||
|
||||
done:
|
||||
|
@ -56,8 +56,7 @@
|
||||
/********************/
|
||||
/* Local Prototypes */
|
||||
/********************/
|
||||
static herr_t H5B2__shadow_internal(H5B2_internal_t *internal, hid_t dxpl_id,
|
||||
H5B2_node_ptr_t *curr_node_ptr);
|
||||
static herr_t H5B2__shadow_internal(H5B2_internal_t *internal, H5B2_node_ptr_t *curr_node_ptr);
|
||||
|
||||
|
||||
/*********************/
|
||||
@ -94,8 +93,8 @@ H5FL_DEFINE(H5B2_internal_t);
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
herr_t
|
||||
H5B2__create_internal(H5B2_hdr_t *hdr, hid_t dxpl_id, void *parent,
|
||||
H5B2_node_ptr_t *node_ptr, uint16_t depth)
|
||||
H5B2__create_internal(H5B2_hdr_t *hdr, void *parent, H5B2_node_ptr_t *node_ptr,
|
||||
uint16_t depth)
|
||||
{
|
||||
H5B2_internal_t *internal = NULL; /* Pointer to new internal node created */
|
||||
hbool_t inserted = FALSE; /* Whether the internal node was inserted into cache */
|
||||
@ -139,17 +138,17 @@ H5B2__create_internal(H5B2_hdr_t *hdr, hid_t dxpl_id, void *parent,
|
||||
internal->shadow_epoch = hdr->shadow_epoch;
|
||||
|
||||
/* Allocate space on disk for the internal node */
|
||||
if(HADDR_UNDEF == (node_ptr->addr = H5MF_alloc(hdr->f, H5FD_MEM_BTREE, dxpl_id, (hsize_t)hdr->node_size)))
|
||||
if(HADDR_UNDEF == (node_ptr->addr = H5MF_alloc(hdr->f, H5FD_MEM_BTREE, (hsize_t)hdr->node_size)))
|
||||
HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "file allocation failed for B-tree internal node")
|
||||
|
||||
/* Cache the new B-tree node */
|
||||
if(H5AC_insert_entry(hdr->f, dxpl_id, H5AC_BT2_INT, node_ptr->addr, internal, H5AC__NO_FLAGS_SET) < 0)
|
||||
if(H5AC_insert_entry(hdr->f, H5AC_BT2_INT, node_ptr->addr, internal, H5AC__NO_FLAGS_SET) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTINIT, FAIL, "can't add B-tree internal node to cache")
|
||||
inserted = TRUE;
|
||||
|
||||
/* Add internal node as child of 'top' proxy */
|
||||
if(hdr->top_proxy) {
|
||||
if(H5AC_proxy_entry_add_child(hdr->top_proxy, hdr->f, dxpl_id, internal) < 0)
|
||||
if(H5AC_proxy_entry_add_child(hdr->top_proxy, hdr->f, internal) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTSET, FAIL, "unable to add v2 B-tree node as child of proxy")
|
||||
internal->top_proxy = hdr->top_proxy;
|
||||
} /* end if */
|
||||
@ -163,7 +162,7 @@ done:
|
||||
HDONE_ERROR(H5E_BTREE, H5E_CANTREMOVE, FAIL, "unable to remove v2 B-tree internal node from cache")
|
||||
|
||||
/* Release internal node's disk space */
|
||||
if(H5F_addr_defined(node_ptr->addr) && H5MF_xfree(hdr->f, H5FD_MEM_BTREE, dxpl_id, node_ptr->addr, (hsize_t)hdr->node_size) < 0)
|
||||
if(H5F_addr_defined(node_ptr->addr) && H5MF_xfree(hdr->f, H5FD_MEM_BTREE, node_ptr->addr, (hsize_t)hdr->node_size) < 0)
|
||||
HDONE_ERROR(H5E_BTREE, H5E_CANTFREE, FAIL, "unable to release file space for v2 B-tree internal node")
|
||||
|
||||
/* Destroy internal node */
|
||||
@ -190,8 +189,8 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
H5B2_internal_t *
|
||||
H5B2__protect_internal(H5B2_hdr_t *hdr, hid_t dxpl_id, void *parent,
|
||||
H5B2_node_ptr_t *node_ptr, uint16_t depth, hbool_t shadow, unsigned flags)
|
||||
H5B2__protect_internal(H5B2_hdr_t *hdr, void *parent, H5B2_node_ptr_t *node_ptr,
|
||||
uint16_t depth, hbool_t shadow, unsigned flags)
|
||||
{
|
||||
H5B2_internal_cache_ud_t udata; /* User data to pass through to cache 'deserialize' callback */
|
||||
H5B2_internal_t *internal = NULL; /* v2 B-tree internal node */
|
||||
@ -216,20 +215,20 @@ H5B2__protect_internal(H5B2_hdr_t *hdr, hid_t dxpl_id, void *parent,
|
||||
udata.depth = depth;
|
||||
|
||||
/* Protect the internal node */
|
||||
if(NULL == (internal = (H5B2_internal_t *)H5AC_protect(hdr->f, dxpl_id, H5AC_BT2_INT, node_ptr->addr, &udata, flags)))
|
||||
if(NULL == (internal = (H5B2_internal_t *)H5AC_protect(hdr->f, H5AC_BT2_INT, node_ptr->addr, &udata, flags)))
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, NULL, "unable to protect B-tree internal node")
|
||||
|
||||
/* Create top proxy, if it doesn't exist */
|
||||
if(hdr->top_proxy && NULL == internal->top_proxy) {
|
||||
/* Add internal node as child of 'top' proxy */
|
||||
if(H5AC_proxy_entry_add_child(hdr->top_proxy, hdr->f, dxpl_id, internal) < 0)
|
||||
if(H5AC_proxy_entry_add_child(hdr->top_proxy, hdr->f, internal) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTSET, NULL, "unable to add v2 B-tree internal node as child of proxy")
|
||||
internal->top_proxy = hdr->top_proxy;
|
||||
} /* end if */
|
||||
|
||||
/* Shadow the node, if requested */
|
||||
if(shadow)
|
||||
if(H5B2__shadow_internal(internal, dxpl_id, node_ptr) < 0)
|
||||
if(H5B2__shadow_internal(internal, node_ptr) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTCOPY, NULL, "unable to shadow internal node")
|
||||
|
||||
/* Set return value */
|
||||
@ -248,7 +247,7 @@ done:
|
||||
} /* end if */
|
||||
|
||||
/* Unprotect internal node */
|
||||
if(H5AC_unprotect(hdr->f, dxpl_id, H5AC_BT2_INT, node_ptr->addr, internal, H5AC__NO_FLAGS_SET) < 0)
|
||||
if(H5AC_unprotect(hdr->f, H5AC_BT2_INT, node_ptr->addr, internal, H5AC__NO_FLAGS_SET) < 0)
|
||||
HDONE_ERROR(H5E_BTREE, H5E_CANTUNPROTECT, NULL, "unable to unprotect v2 B-tree internal node, address = %llu", (unsigned long long)node_ptr->addr)
|
||||
} /* end if */
|
||||
} /* end if */
|
||||
@ -284,9 +283,9 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
herr_t
|
||||
H5B2__neighbor_internal(H5B2_hdr_t *hdr, hid_t dxpl_id, uint16_t depth,
|
||||
H5B2_node_ptr_t *curr_node_ptr, void *neighbor_loc, H5B2_compare_t comp,
|
||||
void *parent, void *udata, H5B2_found_t op, void *op_data)
|
||||
H5B2__neighbor_internal(H5B2_hdr_t *hdr, uint16_t depth, H5B2_node_ptr_t *curr_node_ptr,
|
||||
void *neighbor_loc, H5B2_compare_t comp, void *parent, void *udata,
|
||||
H5B2_found_t op, void *op_data)
|
||||
{
|
||||
H5B2_internal_t *internal; /* Pointer to internal node */
|
||||
unsigned idx = 0; /* Location of record which matches key */
|
||||
@ -303,7 +302,7 @@ H5B2__neighbor_internal(H5B2_hdr_t *hdr, hid_t dxpl_id, uint16_t depth,
|
||||
HDassert(op);
|
||||
|
||||
/* Lock current B-tree node */
|
||||
if(NULL == (internal = H5B2__protect_internal(hdr, dxpl_id, parent, curr_node_ptr, depth, FALSE, H5AC__READ_ONLY_FLAG)))
|
||||
if(NULL == (internal = H5B2__protect_internal(hdr, parent, curr_node_ptr, depth, FALSE, H5AC__READ_ONLY_FLAG)))
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to protect B-tree internal node")
|
||||
|
||||
/* Locate node pointer for child */
|
||||
@ -326,17 +325,17 @@ H5B2__neighbor_internal(H5B2_hdr_t *hdr, hid_t dxpl_id, uint16_t depth,
|
||||
|
||||
/* Attempt to find neighboring record */
|
||||
if(depth > 1) {
|
||||
if(H5B2__neighbor_internal(hdr, dxpl_id, (uint16_t)(depth - 1), &internal->node_ptrs[idx], neighbor_loc, comp, internal, udata, op, op_data) < 0)
|
||||
if(H5B2__neighbor_internal(hdr, (uint16_t)(depth - 1), &internal->node_ptrs[idx], neighbor_loc, comp, internal, udata, op, op_data) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_NOTFOUND, FAIL, "unable to find neighbor record in B-tree internal node")
|
||||
} /* end if */
|
||||
else {
|
||||
if(H5B2__neighbor_leaf(hdr, dxpl_id, &internal->node_ptrs[idx], neighbor_loc, comp, internal, udata, op, op_data) < 0)
|
||||
if(H5B2__neighbor_leaf(hdr, &internal->node_ptrs[idx], neighbor_loc, comp, internal, udata, op, op_data) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_NOTFOUND, FAIL, "unable to find neighbor record in B-tree leaf node")
|
||||
} /* end else */
|
||||
|
||||
done:
|
||||
/* Release the B-tree internal node */
|
||||
if(internal && H5AC_unprotect(hdr->f, dxpl_id, H5AC_BT2_INT, curr_node_ptr->addr, internal, H5AC__NO_FLAGS_SET) < 0)
|
||||
if(internal && H5AC_unprotect(hdr->f, H5AC_BT2_INT, curr_node_ptr->addr, internal, H5AC__NO_FLAGS_SET) < 0)
|
||||
HDONE_ERROR(H5E_BTREE, H5E_CANTUNPROTECT, FAIL, "unable to release internal B-tree node")
|
||||
|
||||
FUNC_LEAVE_NOAPI(ret_value)
|
||||
@ -357,9 +356,9 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
herr_t
|
||||
H5B2__insert_internal(H5B2_hdr_t *hdr, hid_t dxpl_id, uint16_t depth,
|
||||
unsigned *parent_cache_info_flags_ptr, H5B2_node_ptr_t *curr_node_ptr,
|
||||
H5B2_nodepos_t curr_pos, void *parent, void *udata)
|
||||
H5B2__insert_internal(H5B2_hdr_t *hdr, uint16_t depth, unsigned *parent_cache_info_flags_ptr,
|
||||
H5B2_node_ptr_t *curr_node_ptr, H5B2_nodepos_t curr_pos, void *parent,
|
||||
void *udata)
|
||||
{
|
||||
H5B2_internal_t *internal = NULL; /* Pointer to internal node */
|
||||
unsigned internal_flags = H5AC__NO_FLAGS_SET;
|
||||
@ -376,7 +375,7 @@ H5B2__insert_internal(H5B2_hdr_t *hdr, hid_t dxpl_id, uint16_t depth,
|
||||
HDassert(H5F_addr_defined(curr_node_ptr->addr));
|
||||
|
||||
/* Lock current B-tree node */
|
||||
if(NULL == (internal = H5B2__protect_internal(hdr, dxpl_id, parent, curr_node_ptr, depth, FALSE, H5AC__NO_FLAGS_SET)))
|
||||
if(NULL == (internal = H5B2__protect_internal(hdr, parent, curr_node_ptr, depth, FALSE, H5AC__NO_FLAGS_SET)))
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to protect B-tree internal node")
|
||||
|
||||
/* Sanity check number of records */
|
||||
@ -413,35 +412,32 @@ H5B2__insert_internal(H5B2_hdr_t *hdr, hid_t dxpl_id, uint16_t depth,
|
||||
/* Attempt to redistribute records among children */
|
||||
if(idx == 0) { /* Left-most child */
|
||||
if(retries > 0 && (internal->node_ptrs[idx + 1].node_nrec < split_nrec)) {
|
||||
if(H5B2__redistribute2(hdr, dxpl_id, depth, internal, idx) < 0)
|
||||
if(H5B2__redistribute2(hdr, depth, internal, idx) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTREDISTRIBUTE, FAIL, "unable to redistribute child node records")
|
||||
} /* end if */
|
||||
else {
|
||||
if(H5B2__split1(hdr, dxpl_id, depth, curr_node_ptr,
|
||||
parent_cache_info_flags_ptr, internal, &internal_flags, idx) < 0)
|
||||
if(H5B2__split1(hdr, depth, curr_node_ptr, parent_cache_info_flags_ptr, internal, &internal_flags, idx) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTSPLIT, FAIL, "unable to split child node")
|
||||
} /* end else */
|
||||
} /* end if */
|
||||
else if(idx == internal->nrec) { /* Right-most child */
|
||||
if(retries > 0 && (internal->node_ptrs[idx - 1].node_nrec < split_nrec)) {
|
||||
if(H5B2__redistribute2(hdr, dxpl_id, depth, internal, (idx - 1)) < 0)
|
||||
if(H5B2__redistribute2(hdr, depth, internal, (idx - 1)) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTREDISTRIBUTE, FAIL, "unable to redistribute child node records")
|
||||
} /* end if */
|
||||
else {
|
||||
if(H5B2__split1(hdr, dxpl_id, depth, curr_node_ptr,
|
||||
parent_cache_info_flags_ptr, internal, &internal_flags, idx) < 0)
|
||||
if(H5B2__split1(hdr, depth, curr_node_ptr, parent_cache_info_flags_ptr, internal, &internal_flags, idx) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTSPLIT, FAIL, "unable to split child node")
|
||||
} /* end else */
|
||||
} /* end if */
|
||||
else { /* Middle child */
|
||||
if(retries > 0 && ((internal->node_ptrs[idx + 1].node_nrec < split_nrec) ||
|
||||
(internal->node_ptrs[idx - 1].node_nrec < split_nrec))) {
|
||||
if(H5B2__redistribute3(hdr, dxpl_id, depth, internal, &internal_flags, idx) < 0)
|
||||
if(H5B2__redistribute3(hdr, depth, internal, &internal_flags, idx) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTREDISTRIBUTE, FAIL, "unable to redistribute child node records")
|
||||
} /* end if */
|
||||
else {
|
||||
if(H5B2__split1(hdr, dxpl_id, depth, curr_node_ptr,
|
||||
parent_cache_info_flags_ptr, internal, &internal_flags, idx) < 0)
|
||||
if(H5B2__split1(hdr, depth, curr_node_ptr, parent_cache_info_flags_ptr, internal, &internal_flags, idx) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTSPLIT, FAIL, "unable to split child node")
|
||||
} /* end else */
|
||||
} /* end else */
|
||||
@ -475,11 +471,11 @@ H5B2__insert_internal(H5B2_hdr_t *hdr, hid_t dxpl_id, uint16_t depth,
|
||||
|
||||
/* Attempt to insert node */
|
||||
if(depth > 1) {
|
||||
if(H5B2__insert_internal(hdr, dxpl_id, (uint16_t)(depth - 1), &internal_flags, &internal->node_ptrs[idx], next_pos, internal, udata) < 0)
|
||||
if(H5B2__insert_internal(hdr, (uint16_t)(depth - 1), &internal_flags, &internal->node_ptrs[idx], next_pos, internal, udata) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTINSERT, FAIL, "unable to insert record into B-tree internal node")
|
||||
} /* end if */
|
||||
else {
|
||||
if(H5B2__insert_leaf(hdr, dxpl_id, &internal->node_ptrs[idx], next_pos, internal, udata) < 0)
|
||||
if(H5B2__insert_leaf(hdr, &internal->node_ptrs[idx], next_pos, internal, udata) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTINSERT, FAIL, "unable to insert record into B-tree leaf node")
|
||||
} /* end else */
|
||||
|
||||
@ -494,11 +490,11 @@ done:
|
||||
if(internal) {
|
||||
/* Shadow the node if doing SWMR writes */
|
||||
if(hdr->swmr_write && (internal_flags & H5AC__DIRTIED_FLAG))
|
||||
if(H5B2__shadow_internal(internal, dxpl_id, curr_node_ptr) < 0)
|
||||
if(H5B2__shadow_internal(internal, curr_node_ptr) < 0)
|
||||
HDONE_ERROR(H5E_BTREE, H5E_CANTCOPY, FAIL, "unable to shadow internal B-tree node")
|
||||
|
||||
/* Unprotect node */
|
||||
if(H5AC_unprotect(hdr->f, dxpl_id, H5AC_BT2_INT, curr_node_ptr->addr, internal, internal_flags) < 0)
|
||||
if(H5AC_unprotect(hdr->f, H5AC_BT2_INT, curr_node_ptr->addr, internal, internal_flags) < 0)
|
||||
HDONE_ERROR(H5E_BTREE, H5E_CANTUNPROTECT, FAIL, "unable to release internal B-tree node")
|
||||
} /* end if */
|
||||
|
||||
@ -523,7 +519,7 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
herr_t
|
||||
H5B2__update_internal(H5B2_hdr_t *hdr, hid_t dxpl_id, uint16_t depth,
|
||||
H5B2__update_internal(H5B2_hdr_t *hdr, uint16_t depth,
|
||||
unsigned *parent_cache_info_flags_ptr, H5B2_node_ptr_t *curr_node_ptr,
|
||||
H5B2_update_status_t *status, H5B2_nodepos_t curr_pos, void *parent,
|
||||
void *udata, H5B2_modify_t op, void *op_data)
|
||||
@ -544,7 +540,7 @@ H5B2__update_internal(H5B2_hdr_t *hdr, hid_t dxpl_id, uint16_t depth,
|
||||
HDassert(H5F_addr_defined(curr_node_ptr->addr));
|
||||
|
||||
/* Lock current B-tree node */
|
||||
if(NULL == (internal = H5B2__protect_internal(hdr, dxpl_id, parent, curr_node_ptr, depth, FALSE, H5AC__NO_FLAGS_SET)))
|
||||
if(NULL == (internal = H5B2__protect_internal(hdr, parent, curr_node_ptr, depth, FALSE, H5AC__NO_FLAGS_SET)))
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to protect B-tree internal node")
|
||||
|
||||
/* Sanity check number of records */
|
||||
@ -591,11 +587,11 @@ H5B2__update_internal(H5B2_hdr_t *hdr, hid_t dxpl_id, uint16_t depth,
|
||||
|
||||
/* Attempt to update record in child */
|
||||
if(depth > 1) {
|
||||
if(H5B2__update_internal(hdr, dxpl_id, (uint16_t)(depth - 1), &internal_flags, &internal->node_ptrs[idx], status, next_pos, internal, udata, op, op_data) < 0)
|
||||
if(H5B2__update_internal(hdr, (uint16_t)(depth - 1), &internal_flags, &internal->node_ptrs[idx], status, next_pos, internal, udata, op, op_data) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTUPDATE, FAIL, "unable to update record in internal B-tree node")
|
||||
} /* end if */
|
||||
else {
|
||||
if(H5B2__update_leaf(hdr, dxpl_id, &internal->node_ptrs[idx], status, next_pos, internal, udata, op, op_data) < 0)
|
||||
if(H5B2__update_leaf(hdr, &internal->node_ptrs[idx], status, next_pos, internal, udata, op, op_data) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTUPDATE, FAIL, "unable to update record in leaf B-tree node")
|
||||
} /* end else */
|
||||
|
||||
@ -656,7 +652,7 @@ H5B2__update_internal(H5B2_hdr_t *hdr, hid_t dxpl_id, uint16_t depth,
|
||||
*/
|
||||
if(could_split) {
|
||||
/* Release the internal B-tree node */
|
||||
if(H5AC_unprotect(hdr->f, dxpl_id, H5AC_BT2_INT, curr_node_ptr->addr, internal, internal_flags) < 0)
|
||||
if(H5AC_unprotect(hdr->f, H5AC_BT2_INT, curr_node_ptr->addr, internal, internal_flags) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTUNPROTECT, FAIL, "unable to release internal B-tree node")
|
||||
internal = NULL;
|
||||
|
||||
@ -666,7 +662,7 @@ H5B2__update_internal(H5B2_hdr_t *hdr, hid_t dxpl_id, uint16_t depth,
|
||||
} /* end if */
|
||||
|
||||
/* Release the internal B-tree node */
|
||||
if(H5AC_unprotect(hdr->f, dxpl_id, H5AC_BT2_INT, curr_node_ptr->addr, internal, internal_flags) < 0)
|
||||
if(H5AC_unprotect(hdr->f, H5AC_BT2_INT, curr_node_ptr->addr, internal, internal_flags) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTUNPROTECT, FAIL, "unable to release internal B-tree node")
|
||||
internal = NULL;
|
||||
|
||||
@ -674,7 +670,7 @@ H5B2__update_internal(H5B2_hdr_t *hdr, hid_t dxpl_id, uint16_t depth,
|
||||
*status = H5B2_UPDATE_INSERT_DONE;
|
||||
|
||||
/* Dodge sideways into inserting a record into this node */
|
||||
if(H5B2__insert_internal(hdr, dxpl_id, depth, parent_cache_info_flags_ptr, curr_node_ptr, curr_pos, parent, udata) < 0)
|
||||
if(H5B2__insert_internal(hdr, depth, parent_cache_info_flags_ptr, curr_node_ptr, curr_pos, parent, udata) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTINSERT, FAIL, "unable to insert record into internal B-tree node")
|
||||
break;
|
||||
|
||||
@ -691,7 +687,7 @@ done:
|
||||
/* Check if we should shadow this node */
|
||||
if(hdr->swmr_write && (internal_flags & H5AC__DIRTIED_FLAG)) {
|
||||
/* Attempt to shadow the node if doing SWMR writes */
|
||||
if(H5B2__shadow_internal(internal, dxpl_id, curr_node_ptr) < 0)
|
||||
if(H5B2__shadow_internal(internal, curr_node_ptr) < 0)
|
||||
HDONE_ERROR(H5E_BTREE, H5E_CANTCOPY, FAIL, "unable to shadow internal B-tree node")
|
||||
|
||||
/* Change the state to "shadowed" if only modified currently */
|
||||
@ -701,7 +697,7 @@ done:
|
||||
} /* end if */
|
||||
|
||||
/* Unprotect node */
|
||||
if(H5AC_unprotect(hdr->f, dxpl_id, H5AC_BT2_INT, curr_node_ptr->addr, internal, internal_flags) < 0)
|
||||
if(H5AC_unprotect(hdr->f, H5AC_BT2_INT, curr_node_ptr->addr, internal, internal_flags) < 0)
|
||||
HDONE_ERROR(H5E_BTREE, H5E_CANTUNPROTECT, FAIL, "unable to release internal B-tree node")
|
||||
} /* end if */
|
||||
|
||||
@ -726,8 +722,7 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static herr_t
|
||||
H5B2__shadow_internal(H5B2_internal_t *internal, hid_t dxpl_id,
|
||||
H5B2_node_ptr_t *curr_node_ptr)
|
||||
H5B2__shadow_internal(H5B2_internal_t *internal, H5B2_node_ptr_t *curr_node_ptr)
|
||||
{
|
||||
H5B2_hdr_t *hdr; /* B-tree header */
|
||||
herr_t ret_value = SUCCEED; /* Return value */
|
||||
@ -758,11 +753,11 @@ H5B2__shadow_internal(H5B2_internal_t *internal, hid_t dxpl_id,
|
||||
* shadowed node. Remove it from cache but do not mark it free on disk.
|
||||
*/
|
||||
/* Allocate space for the cloned node */
|
||||
if(HADDR_UNDEF == (new_node_addr = H5MF_alloc(hdr->f, H5FD_MEM_BTREE, dxpl_id, (hsize_t)hdr->node_size)))
|
||||
if(HADDR_UNDEF == (new_node_addr = H5MF_alloc(hdr->f, H5FD_MEM_BTREE, (hsize_t)hdr->node_size)))
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTALLOC, FAIL, "unable to allocate file space to move B-tree node")
|
||||
|
||||
/* Move the location of the node on the disk */
|
||||
if(H5AC_move_entry(hdr->f, H5AC_BT2_INT, curr_node_ptr->addr, new_node_addr, dxpl_id) < 0)
|
||||
if(H5AC_move_entry(hdr->f, H5AC_BT2_INT, curr_node_ptr->addr, new_node_addr) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTMOVE, FAIL, "unable to move B-tree node")
|
||||
curr_node_ptr->addr = new_node_addr;
|
||||
|
||||
@ -793,7 +788,7 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
herr_t
|
||||
H5B2__remove_internal(H5B2_hdr_t *hdr, hid_t dxpl_id, hbool_t *depth_decreased,
|
||||
H5B2__remove_internal(H5B2_hdr_t *hdr, hbool_t *depth_decreased,
|
||||
void *swap_loc, void *swap_parent, uint16_t depth, H5AC_info_t *parent_cache_info,
|
||||
unsigned *parent_cache_info_flags_ptr, H5B2_nodepos_t curr_pos,
|
||||
H5B2_node_ptr_t *curr_node_ptr, void *udata, H5B2_remove_t op, void *op_data)
|
||||
@ -819,7 +814,7 @@ H5B2__remove_internal(H5B2_hdr_t *hdr, hid_t dxpl_id, hbool_t *depth_decreased,
|
||||
HDassert(H5F_addr_defined(curr_node_ptr->addr));
|
||||
|
||||
/* Lock current B-tree node */
|
||||
if(NULL == (internal = H5B2__protect_internal(hdr, dxpl_id, parent_cache_info, curr_node_ptr, depth, FALSE, H5AC__NO_FLAGS_SET)))
|
||||
if(NULL == (internal = H5B2__protect_internal(hdr, parent_cache_info, curr_node_ptr, depth, FALSE, H5AC__NO_FLAGS_SET)))
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to protect B-tree internal node")
|
||||
internal_addr = curr_node_ptr->addr;
|
||||
|
||||
@ -832,8 +827,7 @@ H5B2__remove_internal(H5B2_hdr_t *hdr, hid_t dxpl_id, hbool_t *depth_decreased,
|
||||
((internal->node_ptrs[0].node_nrec + internal->node_ptrs[1].node_nrec) <= ((merge_nrec * 2) + 1))) {
|
||||
|
||||
/* Merge children of root node */
|
||||
if(H5B2__merge2(hdr, dxpl_id, depth, curr_node_ptr,
|
||||
parent_cache_info_flags_ptr, internal, &internal_flags, 0) < 0)
|
||||
if(H5B2__merge2(hdr, depth, curr_node_ptr, parent_cache_info_flags_ptr, internal, &internal_flags, 0) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTSPLIT, FAIL, "unable to merge child node")
|
||||
|
||||
/* Let the cache know that the object is deleted */
|
||||
@ -847,7 +841,7 @@ H5B2__remove_internal(H5B2_hdr_t *hdr, hid_t dxpl_id, hbool_t *depth_decreased,
|
||||
|
||||
/* Update flush dependency for child, if using SWMR */
|
||||
if(hdr->swmr_write)
|
||||
if(H5B2__update_flush_depend(hdr, dxpl_id, depth, curr_node_ptr, internal, hdr) < 0)
|
||||
if(H5B2__update_flush_depend(hdr, depth, curr_node_ptr, internal, hdr) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTUPDATE, FAIL, "unable to update child node to new parent")
|
||||
|
||||
/* Indicate that the level of the B-tree decreased */
|
||||
@ -872,7 +866,7 @@ H5B2__remove_internal(H5B2_hdr_t *hdr, hid_t dxpl_id, hbool_t *depth_decreased,
|
||||
|
||||
/* Shadow the node if doing SWMR writes */
|
||||
if(hdr->swmr_write) {
|
||||
if(H5B2__shadow_internal(internal, dxpl_id, curr_node_ptr) < 0)
|
||||
if(H5B2__shadow_internal(internal, curr_node_ptr) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTCOPY, FAIL, "unable to shadow internal node")
|
||||
internal_addr = curr_node_ptr->addr;
|
||||
} /* end if */
|
||||
@ -906,35 +900,32 @@ H5B2__remove_internal(H5B2_hdr_t *hdr, hid_t dxpl_id, hbool_t *depth_decreased,
|
||||
*/
|
||||
if(idx == 0) { /* Left-most child */
|
||||
if(retries > 0 && (internal->node_ptrs[idx + 1].node_nrec > merge_nrec)) {
|
||||
if(H5B2__redistribute2(hdr, dxpl_id, depth, internal, idx) < 0)
|
||||
if(H5B2__redistribute2(hdr, depth, internal, idx) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTREDISTRIBUTE, FAIL, "unable to redistribute child node records")
|
||||
} /* end if */
|
||||
else {
|
||||
if(H5B2__merge2(hdr, dxpl_id, depth, curr_node_ptr,
|
||||
parent_cache_info_flags_ptr, internal, &internal_flags, idx) < 0)
|
||||
if(H5B2__merge2(hdr, depth, curr_node_ptr, parent_cache_info_flags_ptr, internal, &internal_flags, idx) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTSPLIT, FAIL, "unable to merge child node")
|
||||
} /* end else */
|
||||
} /* end if */
|
||||
else if(idx == internal->nrec) { /* Right-most child */
|
||||
if(retries > 0 && (internal->node_ptrs[idx - 1].node_nrec > merge_nrec)) {
|
||||
if(H5B2__redistribute2(hdr, dxpl_id, depth, internal, (idx - 1)) < 0)
|
||||
if(H5B2__redistribute2(hdr, depth, internal, (idx - 1)) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTREDISTRIBUTE, FAIL, "unable to redistribute child node records")
|
||||
} /* end if */
|
||||
else {
|
||||
if(H5B2__merge2(hdr, dxpl_id, depth, curr_node_ptr,
|
||||
parent_cache_info_flags_ptr, internal, &internal_flags, (idx - 1)) < 0)
|
||||
if(H5B2__merge2(hdr, depth, curr_node_ptr, parent_cache_info_flags_ptr, internal, &internal_flags, (idx - 1)) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTSPLIT, FAIL, "unable to merge child node")
|
||||
} /* end else */
|
||||
} /* end if */
|
||||
else { /* Middle child */
|
||||
if(retries > 0 && ((internal->node_ptrs[idx + 1].node_nrec > merge_nrec) ||
|
||||
(internal->node_ptrs[idx - 1].node_nrec > merge_nrec))) {
|
||||
if(H5B2__redistribute3(hdr, dxpl_id, depth, internal, &internal_flags, idx) < 0)
|
||||
if(H5B2__redistribute3(hdr, depth, internal, &internal_flags, idx) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTREDISTRIBUTE, FAIL, "unable to redistribute child node records")
|
||||
} /* end if */
|
||||
else {
|
||||
if(H5B2__merge3(hdr, dxpl_id, depth, curr_node_ptr,
|
||||
parent_cache_info_flags_ptr, internal, &internal_flags, idx) < 0)
|
||||
if(H5B2__merge3(hdr, depth, curr_node_ptr, parent_cache_info_flags_ptr, internal, &internal_flags, idx) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTSPLIT, FAIL, "unable to merge child node")
|
||||
} /* end else */
|
||||
} /* end else */
|
||||
@ -962,7 +953,7 @@ H5B2__remove_internal(H5B2_hdr_t *hdr, hid_t dxpl_id, hbool_t *depth_decreased,
|
||||
|
||||
/* Swap record to delete with record from leaf, if we are the last internal node */
|
||||
if(swap_loc && depth == 1)
|
||||
if(H5B2__swap_leaf(hdr, dxpl_id, depth, internal, &internal_flags, idx, swap_loc) < 0)
|
||||
if(H5B2__swap_leaf(hdr, depth, internal, &internal_flags, idx, swap_loc) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTSWAP, FAIL, "Can't swap records in B-tree")
|
||||
|
||||
/* Set pointers for advancing to child node */
|
||||
@ -985,12 +976,12 @@ H5B2__remove_internal(H5B2_hdr_t *hdr, hid_t dxpl_id, hbool_t *depth_decreased,
|
||||
|
||||
/* Attempt to remove record from child node */
|
||||
if(depth > 1) {
|
||||
if(H5B2__remove_internal(hdr, dxpl_id, depth_decreased, swap_loc, swap_parent, (uint16_t)(depth - 1),
|
||||
if(H5B2__remove_internal(hdr, depth_decreased, swap_loc, swap_parent, (uint16_t)(depth - 1),
|
||||
new_cache_info, new_cache_info_flags_ptr, next_pos, new_node_ptr, udata, op, op_data) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTDELETE, FAIL, "unable to remove record from B-tree internal node")
|
||||
} /* end if */
|
||||
else {
|
||||
if(H5B2__remove_leaf(hdr, dxpl_id, new_node_ptr, next_pos, new_cache_info, udata, op, op_data) < 0)
|
||||
if(H5B2__remove_leaf(hdr, new_node_ptr, next_pos, new_cache_info, udata, op, op_data) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTDELETE, FAIL, "unable to remove record from B-tree leaf node")
|
||||
} /* end else */
|
||||
|
||||
@ -1008,7 +999,7 @@ H5B2__remove_internal(H5B2_hdr_t *hdr, hid_t dxpl_id, hbool_t *depth_decreased,
|
||||
|
||||
done:
|
||||
/* Release the B-tree internal node */
|
||||
if(internal && H5AC_unprotect(hdr->f, dxpl_id, H5AC_BT2_INT, internal_addr, internal, internal_flags) < 0)
|
||||
if(internal && H5AC_unprotect(hdr->f, H5AC_BT2_INT, internal_addr, internal, internal_flags) < 0)
|
||||
HDONE_ERROR(H5E_BTREE, H5E_CANTUNPROTECT, FAIL, "unable to release internal B-tree node")
|
||||
|
||||
FUNC_LEAVE_NOAPI(ret_value)
|
||||
@ -1030,11 +1021,10 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
herr_t
|
||||
H5B2__remove_internal_by_idx(H5B2_hdr_t *hdr, hid_t dxpl_id,
|
||||
hbool_t *depth_decreased, void *swap_loc, void *swap_parent, uint16_t depth,
|
||||
H5AC_info_t *parent_cache_info, unsigned *parent_cache_info_flags_ptr,
|
||||
H5B2_node_ptr_t *curr_node_ptr, H5B2_nodepos_t curr_pos, hsize_t n,
|
||||
H5B2_remove_t op, void *op_data)
|
||||
H5B2__remove_internal_by_idx(H5B2_hdr_t *hdr, hbool_t *depth_decreased,
|
||||
void *swap_loc, void *swap_parent, uint16_t depth, H5AC_info_t *parent_cache_info,
|
||||
unsigned *parent_cache_info_flags_ptr, H5B2_node_ptr_t *curr_node_ptr,
|
||||
H5B2_nodepos_t curr_pos, hsize_t n, H5B2_remove_t op, void *op_data)
|
||||
{
|
||||
H5AC_info_t *new_cache_info; /* Pointer to new cache info */
|
||||
unsigned *new_cache_info_flags_ptr = NULL;
|
||||
@ -1057,7 +1047,7 @@ H5B2__remove_internal_by_idx(H5B2_hdr_t *hdr, hid_t dxpl_id,
|
||||
HDassert(H5F_addr_defined(curr_node_ptr->addr));
|
||||
|
||||
/* Lock current B-tree node */
|
||||
if(NULL == (internal = H5B2__protect_internal(hdr, dxpl_id, parent_cache_info, curr_node_ptr, depth, FALSE, H5AC__NO_FLAGS_SET)))
|
||||
if(NULL == (internal = H5B2__protect_internal(hdr, parent_cache_info, curr_node_ptr, depth, FALSE, H5AC__NO_FLAGS_SET)))
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to protect B-tree internal node")
|
||||
internal_addr = curr_node_ptr->addr;
|
||||
HDassert(internal->nrec == curr_node_ptr->node_nrec);
|
||||
@ -1073,8 +1063,7 @@ H5B2__remove_internal_by_idx(H5B2_hdr_t *hdr, hid_t dxpl_id,
|
||||
HDassert(depth == hdr->depth);
|
||||
|
||||
/* Merge children of root node */
|
||||
if(H5B2__merge2(hdr, dxpl_id, depth, curr_node_ptr,
|
||||
parent_cache_info_flags_ptr, internal, &internal_flags, 0) < 0)
|
||||
if(H5B2__merge2(hdr, depth, curr_node_ptr, parent_cache_info_flags_ptr, internal, &internal_flags, 0) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTSPLIT, FAIL, "unable to merge child node")
|
||||
|
||||
/* Let the cache know that the object is deleted */
|
||||
@ -1088,7 +1077,7 @@ H5B2__remove_internal_by_idx(H5B2_hdr_t *hdr, hid_t dxpl_id,
|
||||
|
||||
/* Update flush dependency for child, if using SWMR */
|
||||
if(hdr->swmr_write)
|
||||
if(H5B2__update_flush_depend(hdr, dxpl_id, depth, curr_node_ptr, internal, hdr) < 0)
|
||||
if(H5B2__update_flush_depend(hdr, depth, curr_node_ptr, internal, hdr) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTUPDATE, FAIL, "unable to update child node to new parent")
|
||||
|
||||
/* Indicate that the level of the B-tree decreased */
|
||||
@ -1114,7 +1103,7 @@ H5B2__remove_internal_by_idx(H5B2_hdr_t *hdr, hid_t dxpl_id,
|
||||
|
||||
/* Shadow the node if doing SWMR writes */
|
||||
if(hdr->swmr_write) {
|
||||
if(H5B2__shadow_internal(internal, dxpl_id, curr_node_ptr) < 0)
|
||||
if(H5B2__shadow_internal(internal, curr_node_ptr) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTCOPY, FAIL, "unable to shadow internal node")
|
||||
internal_addr = curr_node_ptr->addr;
|
||||
} /* end if */
|
||||
@ -1169,35 +1158,32 @@ H5B2__remove_internal_by_idx(H5B2_hdr_t *hdr, hid_t dxpl_id,
|
||||
*/
|
||||
if(idx == 0) { /* Left-most child */
|
||||
if(retries > 0 && (internal->node_ptrs[idx + 1].node_nrec > merge_nrec)) {
|
||||
if(H5B2__redistribute2(hdr, dxpl_id, depth, internal, idx) < 0)
|
||||
if(H5B2__redistribute2(hdr, depth, internal, idx) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTREDISTRIBUTE, FAIL, "unable to redistribute child node records")
|
||||
} /* end if */
|
||||
else {
|
||||
if(H5B2__merge2(hdr, dxpl_id, depth, curr_node_ptr,
|
||||
parent_cache_info_flags_ptr, internal, &internal_flags, idx) < 0)
|
||||
if(H5B2__merge2(hdr, depth, curr_node_ptr, parent_cache_info_flags_ptr, internal, &internal_flags, idx) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTSPLIT, FAIL, "unable to merge child node")
|
||||
} /* end else */
|
||||
} /* end if */
|
||||
else if(idx == internal->nrec) { /* Right-most child */
|
||||
if(retries > 0 && (internal->node_ptrs[idx - 1].node_nrec > merge_nrec)) {
|
||||
if(H5B2__redistribute2(hdr, dxpl_id, depth, internal, (idx - 1)) < 0)
|
||||
if(H5B2__redistribute2(hdr, depth, internal, (idx - 1)) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTREDISTRIBUTE, FAIL, "unable to redistribute child node records")
|
||||
} /* end if */
|
||||
else {
|
||||
if(H5B2__merge2(hdr, dxpl_id, depth, curr_node_ptr,
|
||||
parent_cache_info_flags_ptr, internal, &internal_flags, (idx - 1)) < 0)
|
||||
if(H5B2__merge2(hdr, depth, curr_node_ptr, parent_cache_info_flags_ptr, internal, &internal_flags, (idx - 1)) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTSPLIT, FAIL, "unable to merge child node")
|
||||
} /* end else */
|
||||
} /* end if */
|
||||
else { /* Middle child */
|
||||
if(retries > 0 && ((internal->node_ptrs[idx + 1].node_nrec > merge_nrec) ||
|
||||
(internal->node_ptrs[idx - 1].node_nrec > merge_nrec))) {
|
||||
if(H5B2__redistribute3(hdr, dxpl_id, depth, internal, &internal_flags, idx) < 0)
|
||||
if(H5B2__redistribute3(hdr, depth, internal, &internal_flags, idx) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTREDISTRIBUTE, FAIL, "unable to redistribute child node records")
|
||||
} /* end if */
|
||||
else {
|
||||
if(H5B2__merge3(hdr, dxpl_id, depth, curr_node_ptr,
|
||||
parent_cache_info_flags_ptr, internal, &internal_flags, idx) < 0)
|
||||
if(H5B2__merge3(hdr, depth, curr_node_ptr, parent_cache_info_flags_ptr, internal, &internal_flags, idx) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTSPLIT, FAIL, "unable to merge child node")
|
||||
} /* end else */
|
||||
} /* end else */
|
||||
@ -1253,7 +1239,7 @@ H5B2__remove_internal_by_idx(H5B2_hdr_t *hdr, hid_t dxpl_id,
|
||||
|
||||
/* Swap record to delete with record from leaf, if we are the last internal node */
|
||||
if(swap_loc && depth == 1)
|
||||
if(H5B2__swap_leaf(hdr, dxpl_id, depth, internal, &internal_flags, idx, swap_loc) < 0)
|
||||
if(H5B2__swap_leaf(hdr, depth, internal, &internal_flags, idx, swap_loc) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTSWAP, FAIL, "can't swap records in B-tree")
|
||||
|
||||
/* Set pointers for advancing to child node */
|
||||
@ -1276,12 +1262,12 @@ H5B2__remove_internal_by_idx(H5B2_hdr_t *hdr, hid_t dxpl_id,
|
||||
|
||||
/* Attempt to remove record from child node */
|
||||
if(depth > 1) {
|
||||
if(H5B2__remove_internal_by_idx(hdr, dxpl_id, depth_decreased, swap_loc, swap_parent, (uint16_t)(depth - 1),
|
||||
if(H5B2__remove_internal_by_idx(hdr, depth_decreased, swap_loc, swap_parent, (uint16_t)(depth - 1),
|
||||
new_cache_info, new_cache_info_flags_ptr, new_node_ptr, next_pos, n, op, op_data) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTDELETE, FAIL, "unable to remove record from B-tree internal node")
|
||||
} /* end if */
|
||||
else {
|
||||
if(H5B2__remove_leaf_by_idx(hdr, dxpl_id, new_node_ptr, next_pos, new_cache_info, (unsigned)n, op, op_data) < 0)
|
||||
if(H5B2__remove_leaf_by_idx(hdr, new_node_ptr, next_pos, new_cache_info, (unsigned)n, op, op_data) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTDELETE, FAIL, "unable to remove record from B-tree leaf node")
|
||||
} /* end else */
|
||||
|
||||
@ -1299,7 +1285,7 @@ H5B2__remove_internal_by_idx(H5B2_hdr_t *hdr, hid_t dxpl_id,
|
||||
|
||||
done:
|
||||
/* Release the B-tree internal node */
|
||||
if(internal && H5AC_unprotect(hdr->f, dxpl_id, H5AC_BT2_INT, internal_addr, internal, internal_flags) < 0)
|
||||
if(internal && H5AC_unprotect(hdr->f, H5AC_BT2_INT, internal_addr, internal, internal_flags) < 0)
|
||||
HDONE_ERROR(H5E_BTREE, H5E_CANTUNPROTECT, FAIL, "unable to release internal B-tree node")
|
||||
|
||||
FUNC_LEAVE_NOAPI(ret_value)
|
||||
|
@ -57,8 +57,7 @@
|
||||
/********************/
|
||||
/* Local Prototypes */
|
||||
/********************/
|
||||
static herr_t H5B2__shadow_leaf(H5B2_leaf_t *leaf, hid_t dxpl_id,
|
||||
H5B2_node_ptr_t *curr_node_ptr);
|
||||
static herr_t H5B2__shadow_leaf(H5B2_leaf_t *leaf, H5B2_node_ptr_t *curr_node_ptr);
|
||||
|
||||
|
||||
/*********************/
|
||||
@ -95,7 +94,7 @@ H5FL_DEFINE(H5B2_leaf_t);
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
herr_t
|
||||
H5B2__create_leaf(H5B2_hdr_t *hdr, hid_t dxpl_id, void *parent, H5B2_node_ptr_t *node_ptr)
|
||||
H5B2__create_leaf(H5B2_hdr_t *hdr, void *parent, H5B2_node_ptr_t *node_ptr)
|
||||
{
|
||||
H5B2_leaf_t *leaf = NULL; /* Pointer to new leaf node created */
|
||||
hbool_t inserted = FALSE; /* Whether the leaf node was inserted into cache */
|
||||
@ -130,17 +129,17 @@ H5B2__create_leaf(H5B2_hdr_t *hdr, hid_t dxpl_id, void *parent, H5B2_node_ptr_t
|
||||
leaf->shadow_epoch = hdr->shadow_epoch;
|
||||
|
||||
/* Allocate space on disk for the leaf */
|
||||
if(HADDR_UNDEF == (node_ptr->addr = H5MF_alloc(hdr->f, H5FD_MEM_BTREE, dxpl_id, (hsize_t)hdr->node_size)))
|
||||
if(HADDR_UNDEF == (node_ptr->addr = H5MF_alloc(hdr->f, H5FD_MEM_BTREE, (hsize_t)hdr->node_size)))
|
||||
HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "file allocation failed for B-tree leaf node")
|
||||
|
||||
/* Cache the new B-tree node */
|
||||
if(H5AC_insert_entry(hdr->f, dxpl_id, H5AC_BT2_LEAF, node_ptr->addr, leaf, H5AC__NO_FLAGS_SET) < 0)
|
||||
if(H5AC_insert_entry(hdr->f, H5AC_BT2_LEAF, node_ptr->addr, leaf, H5AC__NO_FLAGS_SET) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTINIT, FAIL, "can't add B-tree leaf to cache")
|
||||
inserted = TRUE;
|
||||
|
||||
/* Add leaf node as child of 'top' proxy */
|
||||
if(hdr->top_proxy) {
|
||||
if(H5AC_proxy_entry_add_child(hdr->top_proxy, hdr->f, dxpl_id, leaf) < 0)
|
||||
if(H5AC_proxy_entry_add_child(hdr->top_proxy, hdr->f, leaf) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTSET, FAIL, "unable to add v2 B-tree node as child of proxy")
|
||||
leaf->top_proxy = hdr->top_proxy;
|
||||
} /* end if */
|
||||
@ -154,7 +153,7 @@ done:
|
||||
HDONE_ERROR(H5E_BTREE, H5E_CANTREMOVE, FAIL, "unable to remove v2 B-tree leaf node from cache")
|
||||
|
||||
/* Release leaf node's disk space */
|
||||
if(H5F_addr_defined(node_ptr->addr) && H5MF_xfree(hdr->f, H5FD_MEM_BTREE, dxpl_id, node_ptr->addr, (hsize_t)hdr->node_size) < 0)
|
||||
if(H5F_addr_defined(node_ptr->addr) && H5MF_xfree(hdr->f, H5FD_MEM_BTREE, node_ptr->addr, (hsize_t)hdr->node_size) < 0)
|
||||
HDONE_ERROR(H5E_BTREE, H5E_CANTFREE, FAIL, "unable to release file space for v2 B-tree leaf node")
|
||||
|
||||
/* Destroy leaf node */
|
||||
@ -181,8 +180,8 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
H5B2_leaf_t *
|
||||
H5B2__protect_leaf(H5B2_hdr_t *hdr, hid_t dxpl_id, void *parent,
|
||||
H5B2_node_ptr_t *node_ptr, hbool_t shadow, unsigned flags)
|
||||
H5B2__protect_leaf(H5B2_hdr_t *hdr, void *parent, H5B2_node_ptr_t *node_ptr,
|
||||
hbool_t shadow, unsigned flags)
|
||||
{
|
||||
H5B2_leaf_cache_ud_t udata; /* User-data for callback */
|
||||
H5B2_leaf_t *leaf; /* v2 B-tree leaf node */
|
||||
@ -205,20 +204,20 @@ H5B2__protect_leaf(H5B2_hdr_t *hdr, hid_t dxpl_id, void *parent,
|
||||
udata.nrec = node_ptr->node_nrec;
|
||||
|
||||
/* Protect the leaf node */
|
||||
if(NULL == (leaf = (H5B2_leaf_t *)H5AC_protect(hdr->f, dxpl_id, H5AC_BT2_LEAF, node_ptr->addr, &udata, flags)))
|
||||
if(NULL == (leaf = (H5B2_leaf_t *)H5AC_protect(hdr->f, H5AC_BT2_LEAF, node_ptr->addr, &udata, flags)))
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, NULL, "unable to protect B-tree leaf node")
|
||||
|
||||
/* Create top proxy, if it doesn't exist */
|
||||
if(hdr->top_proxy && NULL == leaf->top_proxy) {
|
||||
/* Add leaf node as child of 'top' proxy */
|
||||
if(H5AC_proxy_entry_add_child(hdr->top_proxy, hdr->f, dxpl_id, leaf) < 0)
|
||||
if(H5AC_proxy_entry_add_child(hdr->top_proxy, hdr->f, leaf) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTSET, NULL, "unable to add v2 B-tree leaf node as child of proxy")
|
||||
leaf->top_proxy = hdr->top_proxy;
|
||||
} /* end if */
|
||||
|
||||
/* Shadow the node, if requested */
|
||||
if(shadow)
|
||||
if(H5B2__shadow_leaf(leaf, dxpl_id, node_ptr) < 0)
|
||||
if(H5B2__shadow_leaf(leaf, node_ptr) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTCOPY, NULL, "unable to shadow leaf node")
|
||||
|
||||
/* Set return value */
|
||||
@ -237,7 +236,7 @@ done:
|
||||
} /* end if */
|
||||
|
||||
/* Unprotect leaf node */
|
||||
if(H5AC_unprotect(hdr->f, dxpl_id, H5AC_BT2_LEAF, node_ptr->addr, leaf, H5AC__NO_FLAGS_SET) < 0)
|
||||
if(H5AC_unprotect(hdr->f, H5AC_BT2_LEAF, node_ptr->addr, leaf, H5AC__NO_FLAGS_SET) < 0)
|
||||
HDONE_ERROR(H5E_BTREE, H5E_CANTUNPROTECT, NULL, "unable to unprotect v2 B-tree leaf node, address = %llu", (unsigned long long)node_ptr->addr)
|
||||
} /* end if */
|
||||
} /* end if */
|
||||
@ -273,7 +272,7 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
herr_t
|
||||
H5B2__neighbor_leaf(H5B2_hdr_t *hdr, hid_t dxpl_id, H5B2_node_ptr_t *curr_node_ptr,
|
||||
H5B2__neighbor_leaf(H5B2_hdr_t *hdr, H5B2_node_ptr_t *curr_node_ptr,
|
||||
void *neighbor_loc, H5B2_compare_t comp, void *parent, void *udata, H5B2_found_t op,
|
||||
void *op_data)
|
||||
{
|
||||
@ -291,7 +290,7 @@ H5B2__neighbor_leaf(H5B2_hdr_t *hdr, hid_t dxpl_id, H5B2_node_ptr_t *curr_node_p
|
||||
HDassert(op);
|
||||
|
||||
/* Lock current B-tree node */
|
||||
if(NULL == (leaf = H5B2__protect_leaf(hdr, dxpl_id, parent, curr_node_ptr, FALSE, H5AC__READ_ONLY_FLAG)))
|
||||
if(NULL == (leaf = H5B2__protect_leaf(hdr, parent, curr_node_ptr, FALSE, H5AC__READ_ONLY_FLAG)))
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to protect B-tree leaf node")
|
||||
|
||||
/* Locate node pointer for child */
|
||||
@ -326,7 +325,7 @@ H5B2__neighbor_leaf(H5B2_hdr_t *hdr, hid_t dxpl_id, H5B2_node_ptr_t *curr_node_p
|
||||
|
||||
done:
|
||||
/* Release the B-tree leaf node */
|
||||
if(leaf && H5AC_unprotect(hdr->f, dxpl_id, H5AC_BT2_LEAF, curr_node_ptr->addr, leaf, H5AC__NO_FLAGS_SET) < 0)
|
||||
if(leaf && H5AC_unprotect(hdr->f, H5AC_BT2_LEAF, curr_node_ptr->addr, leaf, H5AC__NO_FLAGS_SET) < 0)
|
||||
HDONE_ERROR(H5E_BTREE, H5E_CANTUNPROTECT, FAIL, "unable to release B-tree leaf node")
|
||||
|
||||
FUNC_LEAVE_NOAPI(ret_value)
|
||||
@ -347,7 +346,7 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
herr_t
|
||||
H5B2__insert_leaf(H5B2_hdr_t *hdr, hid_t dxpl_id, H5B2_node_ptr_t *curr_node_ptr,
|
||||
H5B2__insert_leaf(H5B2_hdr_t *hdr, H5B2_node_ptr_t *curr_node_ptr,
|
||||
H5B2_nodepos_t curr_pos, void *parent, void *udata)
|
||||
{
|
||||
H5B2_leaf_t *leaf; /* Pointer to leaf node */
|
||||
@ -364,7 +363,7 @@ H5B2__insert_leaf(H5B2_hdr_t *hdr, hid_t dxpl_id, H5B2_node_ptr_t *curr_node_ptr
|
||||
HDassert(H5F_addr_defined(curr_node_ptr->addr));
|
||||
|
||||
/* Lock current B-tree node */
|
||||
if(NULL == (leaf = H5B2__protect_leaf(hdr, dxpl_id, parent, curr_node_ptr, FALSE, H5AC__NO_FLAGS_SET)))
|
||||
if(NULL == (leaf = H5B2__protect_leaf(hdr, parent, curr_node_ptr, FALSE, H5AC__NO_FLAGS_SET)))
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to protect B-tree leaf node")
|
||||
|
||||
/* Must have a leaf node with enough space to insert a record now */
|
||||
@ -431,11 +430,11 @@ done:
|
||||
if(leaf) {
|
||||
/* Shadow the node if doing SWMR writes */
|
||||
if(hdr->swmr_write && (leaf_flags & H5AC__DIRTIED_FLAG))
|
||||
if(H5B2__shadow_leaf(leaf, dxpl_id, curr_node_ptr) < 0)
|
||||
if(H5B2__shadow_leaf(leaf, curr_node_ptr) < 0)
|
||||
HDONE_ERROR(H5E_BTREE, H5E_CANTCOPY, FAIL, "unable to shadow leaf B-tree node")
|
||||
|
||||
/* Unprotect leaf node */
|
||||
if(H5AC_unprotect(hdr->f, dxpl_id, H5AC_BT2_LEAF, curr_node_ptr->addr, leaf, leaf_flags) < 0)
|
||||
if(H5AC_unprotect(hdr->f, H5AC_BT2_LEAF, curr_node_ptr->addr, leaf, leaf_flags) < 0)
|
||||
HDONE_ERROR(H5E_BTREE, H5E_CANTUNPROTECT, FAIL, "unable to release leaf B-tree node")
|
||||
} /* end if */
|
||||
|
||||
@ -460,7 +459,7 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
herr_t
|
||||
H5B2__update_leaf(H5B2_hdr_t *hdr, hid_t dxpl_id, H5B2_node_ptr_t *curr_node_ptr,
|
||||
H5B2__update_leaf(H5B2_hdr_t *hdr, H5B2_node_ptr_t *curr_node_ptr,
|
||||
H5B2_update_status_t *status, H5B2_nodepos_t curr_pos, void *parent,
|
||||
void *udata, H5B2_modify_t op, void *op_data)
|
||||
{
|
||||
@ -478,7 +477,7 @@ H5B2__update_leaf(H5B2_hdr_t *hdr, hid_t dxpl_id, H5B2_node_ptr_t *curr_node_ptr
|
||||
HDassert(H5F_addr_defined(curr_node_ptr->addr));
|
||||
|
||||
/* Lock current B-tree node */
|
||||
if(NULL == (leaf = H5B2__protect_leaf(hdr, dxpl_id, parent, curr_node_ptr, FALSE, H5AC__NO_FLAGS_SET)))
|
||||
if(NULL == (leaf = H5B2__protect_leaf(hdr, parent, curr_node_ptr, FALSE, H5AC__NO_FLAGS_SET)))
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to protect B-tree leaf node")
|
||||
|
||||
/* Sanity check number of records */
|
||||
@ -581,7 +580,7 @@ done:
|
||||
/* Check if we should shadow this node */
|
||||
if(hdr->swmr_write && (leaf_flags & H5AC__DIRTIED_FLAG)) {
|
||||
/* Attempt to shadow the node if doing SWMR writes */
|
||||
if(H5B2__shadow_leaf(leaf, dxpl_id, curr_node_ptr) < 0)
|
||||
if(H5B2__shadow_leaf(leaf, curr_node_ptr) < 0)
|
||||
HDONE_ERROR(H5E_BTREE, H5E_CANTCOPY, FAIL, "unable to shadow leaf B-tree node")
|
||||
|
||||
/* Change the state to "shadowed" if only modified currently */
|
||||
@ -591,7 +590,7 @@ done:
|
||||
} /* end if */
|
||||
|
||||
/* Unprotect leaf node */
|
||||
if(H5AC_unprotect(hdr->f, dxpl_id, H5AC_BT2_LEAF, curr_node_ptr->addr, leaf, leaf_flags) < 0)
|
||||
if(H5AC_unprotect(hdr->f, H5AC_BT2_LEAF, curr_node_ptr->addr, leaf, leaf_flags) < 0)
|
||||
HDONE_ERROR(H5E_BTREE, H5E_CANTUNPROTECT, FAIL, "unable to release leaf B-tree node")
|
||||
} /* end if */
|
||||
|
||||
@ -615,9 +614,8 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
herr_t
|
||||
H5B2__swap_leaf(H5B2_hdr_t *hdr, hid_t dxpl_id, uint16_t depth,
|
||||
H5B2_internal_t *internal, unsigned *internal_flags_ptr,
|
||||
unsigned idx, void *swap_loc)
|
||||
H5B2__swap_leaf(H5B2_hdr_t *hdr, uint16_t depth, H5B2_internal_t *internal,
|
||||
unsigned *internal_flags_ptr, unsigned idx, void *swap_loc)
|
||||
{
|
||||
const H5AC_class_t *child_class; /* Pointer to child node's class info */
|
||||
haddr_t child_addr; /* Address of child node */
|
||||
@ -641,7 +639,7 @@ H5B2__swap_leaf(H5B2_hdr_t *hdr, hid_t dxpl_id, uint16_t depth,
|
||||
child_class = H5AC_BT2_INT;
|
||||
|
||||
/* Lock B-tree child nodes */
|
||||
if(NULL == (child_internal = H5B2__protect_internal(hdr, dxpl_id, internal, &internal->node_ptrs[idx], (uint16_t)(depth - 1), FALSE, H5AC__NO_FLAGS_SET)))
|
||||
if(NULL == (child_internal = H5B2__protect_internal(hdr, internal, &internal->node_ptrs[idx], (uint16_t)(depth - 1), FALSE, H5AC__NO_FLAGS_SET)))
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to protect B-tree internal node")
|
||||
child_addr = internal->node_ptrs[idx].addr;
|
||||
|
||||
@ -656,7 +654,7 @@ H5B2__swap_leaf(H5B2_hdr_t *hdr, hid_t dxpl_id, uint16_t depth,
|
||||
child_class = H5AC_BT2_LEAF;
|
||||
|
||||
/* Lock B-tree child node */
|
||||
if(NULL == (child_leaf = H5B2__protect_leaf(hdr, dxpl_id, internal, &internal->node_ptrs[idx], FALSE, H5AC__NO_FLAGS_SET)))
|
||||
if(NULL == (child_leaf = H5B2__protect_leaf(hdr, internal, &internal->node_ptrs[idx], FALSE, H5AC__NO_FLAGS_SET)))
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to protect B-tree leaf node")
|
||||
child_addr = internal->node_ptrs[idx].addr;
|
||||
|
||||
@ -683,7 +681,7 @@ H5B2__swap_leaf(H5B2_hdr_t *hdr, hid_t dxpl_id, uint16_t depth,
|
||||
|
||||
done:
|
||||
/* Unlock child node */
|
||||
if(child && H5AC_unprotect(hdr->f, dxpl_id, child_class, child_addr, child, H5AC__DIRTIED_FLAG) < 0)
|
||||
if(child && H5AC_unprotect(hdr->f, child_class, child_addr, child, H5AC__DIRTIED_FLAG) < 0)
|
||||
HDONE_ERROR(H5E_BTREE, H5E_CANTUNPROTECT, FAIL, "unable to release B-tree child node")
|
||||
|
||||
FUNC_LEAVE_NOAPI(ret_value)
|
||||
@ -707,7 +705,7 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static herr_t
|
||||
H5B2__shadow_leaf(H5B2_leaf_t *leaf, hid_t dxpl_id, H5B2_node_ptr_t *curr_node_ptr)
|
||||
H5B2__shadow_leaf(H5B2_leaf_t *leaf, H5B2_node_ptr_t *curr_node_ptr)
|
||||
{
|
||||
H5B2_hdr_t *hdr; /* B-tree header */
|
||||
herr_t ret_value = SUCCEED; /* Return value */
|
||||
@ -738,11 +736,11 @@ H5B2__shadow_leaf(H5B2_leaf_t *leaf, hid_t dxpl_id, H5B2_node_ptr_t *curr_node_p
|
||||
* shadowed node. Remove it from cache but do not mark it free on disk.
|
||||
*/
|
||||
/* Allocate space for the cloned node */
|
||||
if(HADDR_UNDEF == (new_node_addr = H5MF_alloc(hdr->f, H5FD_MEM_BTREE, dxpl_id, (hsize_t)hdr->node_size)))
|
||||
if(HADDR_UNDEF == (new_node_addr = H5MF_alloc(hdr->f, H5FD_MEM_BTREE, (hsize_t)hdr->node_size)))
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTALLOC, FAIL, "unable to allocate file space to move B-tree node")
|
||||
|
||||
/* Move the location of the old child on the disk */
|
||||
if(H5AC_move_entry(hdr->f, H5AC_BT2_LEAF, curr_node_ptr->addr, new_node_addr, dxpl_id) < 0)
|
||||
if(H5AC_move_entry(hdr->f, H5AC_BT2_LEAF, curr_node_ptr->addr, new_node_addr) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTMOVE, FAIL, "unable to move B-tree node")
|
||||
curr_node_ptr->addr = new_node_addr;
|
||||
|
||||
@ -773,7 +771,7 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
herr_t
|
||||
H5B2__remove_leaf(H5B2_hdr_t *hdr, hid_t dxpl_id, H5B2_node_ptr_t *curr_node_ptr,
|
||||
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_leaf_t *leaf; /* Pointer to leaf node */
|
||||
@ -791,7 +789,7 @@ H5B2__remove_leaf(H5B2_hdr_t *hdr, hid_t dxpl_id, H5B2_node_ptr_t *curr_node_ptr
|
||||
HDassert(H5F_addr_defined(curr_node_ptr->addr));
|
||||
|
||||
/* Lock current B-tree node */
|
||||
if(NULL == (leaf = H5B2__protect_leaf(hdr, dxpl_id, parent, curr_node_ptr, FALSE, H5AC__NO_FLAGS_SET)))
|
||||
if(NULL == (leaf = H5B2__protect_leaf(hdr, parent, curr_node_ptr, FALSE, H5AC__NO_FLAGS_SET)))
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to protect B-tree leaf node")
|
||||
leaf_addr = curr_node_ptr->addr;
|
||||
|
||||
@ -833,7 +831,7 @@ H5B2__remove_leaf(H5B2_hdr_t *hdr, hid_t dxpl_id, H5B2_node_ptr_t *curr_node_ptr
|
||||
if(leaf->nrec > 0) {
|
||||
/* Shadow the node if doing SWMR writes */
|
||||
if(hdr->swmr_write) {
|
||||
if(H5B2__shadow_leaf(leaf, dxpl_id, curr_node_ptr) < 0)
|
||||
if(H5B2__shadow_leaf(leaf, curr_node_ptr) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTCOPY, FAIL, "unable to shadow leaf node")
|
||||
leaf_addr = curr_node_ptr->addr;
|
||||
} /* end if */
|
||||
@ -860,7 +858,7 @@ H5B2__remove_leaf(H5B2_hdr_t *hdr, hid_t dxpl_id, H5B2_node_ptr_t *curr_node_ptr
|
||||
|
||||
done:
|
||||
/* Release the B-tree leaf node */
|
||||
if(leaf && H5AC_unprotect(hdr->f, dxpl_id, H5AC_BT2_LEAF, leaf_addr, leaf, leaf_flags) < 0)
|
||||
if(leaf && H5AC_unprotect(hdr->f, H5AC_BT2_LEAF, leaf_addr, leaf, leaf_flags) < 0)
|
||||
HDONE_ERROR(H5E_BTREE, H5E_CANTUNPROTECT, FAIL, "unable to release leaf B-tree node")
|
||||
|
||||
FUNC_LEAVE_NOAPI(ret_value)
|
||||
@ -882,9 +880,9 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
herr_t
|
||||
H5B2__remove_leaf_by_idx(H5B2_hdr_t *hdr, hid_t dxpl_id,
|
||||
H5B2_node_ptr_t *curr_node_ptr, H5B2_nodepos_t curr_pos, void *parent,
|
||||
unsigned idx, H5B2_remove_t op, void *op_data)
|
||||
H5B2__remove_leaf_by_idx(H5B2_hdr_t *hdr, H5B2_node_ptr_t *curr_node_ptr,
|
||||
H5B2_nodepos_t curr_pos, void *parent, unsigned idx, 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 */
|
||||
@ -899,7 +897,7 @@ H5B2__remove_leaf_by_idx(H5B2_hdr_t *hdr, hid_t dxpl_id,
|
||||
HDassert(H5F_addr_defined(curr_node_ptr->addr));
|
||||
|
||||
/* Lock B-tree leaf node */
|
||||
if(NULL == (leaf = H5B2__protect_leaf(hdr, dxpl_id, parent, curr_node_ptr, FALSE, H5AC__NO_FLAGS_SET)))
|
||||
if(NULL == (leaf = H5B2__protect_leaf(hdr, parent, curr_node_ptr, FALSE, H5AC__NO_FLAGS_SET)))
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to protect B-tree leaf node")
|
||||
leaf_addr = curr_node_ptr->addr;
|
||||
|
||||
@ -936,7 +934,7 @@ H5B2__remove_leaf_by_idx(H5B2_hdr_t *hdr, hid_t dxpl_id,
|
||||
if(leaf->nrec > 0) {
|
||||
/* Shadow the node if doing SWMR writes */
|
||||
if(hdr->swmr_write) {
|
||||
if(H5B2__shadow_leaf(leaf, dxpl_id, curr_node_ptr) < 0)
|
||||
if(H5B2__shadow_leaf(leaf, curr_node_ptr) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTCOPY, FAIL, "unable to shadow leaf node")
|
||||
leaf_addr = curr_node_ptr->addr;
|
||||
} /* end if */
|
||||
@ -963,7 +961,7 @@ H5B2__remove_leaf_by_idx(H5B2_hdr_t *hdr, hid_t dxpl_id,
|
||||
|
||||
done:
|
||||
/* Release the B-tree leaf node */
|
||||
if(leaf && H5AC_unprotect(hdr->f, dxpl_id, H5AC_BT2_LEAF, leaf_addr, leaf, leaf_flags) < 0)
|
||||
if(leaf && H5AC_unprotect(hdr->f, H5AC_BT2_LEAF, leaf_addr, leaf, leaf_flags) < 0)
|
||||
HDONE_ERROR(H5E_BTREE, H5E_CANTUNPROTECT, FAIL, "unable to release leaf B-tree node")
|
||||
|
||||
FUNC_LEAVE_NOAPI(ret_value)
|
||||
|
148
src/H5B2pkg.h
148
src/H5B2pkg.h
@ -334,31 +334,29 @@ extern const H5B2_class_t *const H5B2_client_class_g[H5B2_NUM_BTREE_ID];
|
||||
/* Generic routines */
|
||||
H5_DLL herr_t H5B2__create_flush_depend(H5AC_info_t *parent_entry,
|
||||
H5AC_info_t *child_entry);
|
||||
H5_DLL herr_t H5B2__update_flush_depend(H5B2_hdr_t *hdr, hid_t dxpl_id,
|
||||
unsigned depth, const H5B2_node_ptr_t *node_ptr, void *old_parent,
|
||||
void *new_parent);
|
||||
H5_DLL herr_t H5B2__update_flush_depend(H5B2_hdr_t *hdr, unsigned depth,
|
||||
const H5B2_node_ptr_t *node_ptr, void *old_parent, void *new_parent);
|
||||
H5_DLL herr_t H5B2__destroy_flush_depend(H5AC_info_t *parent_entry,
|
||||
H5AC_info_t *child_entry);
|
||||
|
||||
/* Internal node management routines */
|
||||
H5_DLL herr_t H5B2__split1(H5B2_hdr_t *hdr, hid_t dxpl_id, uint16_t depth,
|
||||
H5B2_node_ptr_t *curr_node_ptr, unsigned *parent_cache_info_flags_ptr,
|
||||
H5B2_internal_t *internal, unsigned *internal_flags_ptr, unsigned idx);
|
||||
H5_DLL herr_t H5B2__redistribute2(H5B2_hdr_t *hdr, hid_t dxpl_id, uint16_t depth,
|
||||
H5_DLL herr_t H5B2__split1(H5B2_hdr_t *hdr, uint16_t depth, H5B2_node_ptr_t *curr_node_ptr,
|
||||
unsigned *parent_cache_info_flags_ptr, H5B2_internal_t *internal,
|
||||
unsigned *internal_flags_ptr, unsigned idx);
|
||||
H5_DLL herr_t H5B2__redistribute2(H5B2_hdr_t *hdr, uint16_t depth,
|
||||
H5B2_internal_t *internal, unsigned idx);
|
||||
H5_DLL herr_t H5B2__redistribute3(H5B2_hdr_t *hdr, hid_t dxpl_id, uint16_t depth,
|
||||
H5B2_internal_t *internal, unsigned *internal_flags_ptr, unsigned idx);
|
||||
H5_DLL herr_t H5B2__merge2(H5B2_hdr_t *hdr, hid_t dxpl_id, uint16_t depth,
|
||||
H5B2_node_ptr_t *curr_node_ptr, unsigned *parent_cache_info_flags_ptr,
|
||||
H5B2_internal_t *internal, unsigned *internal_flags_ptr, unsigned idx);
|
||||
H5_DLL herr_t H5B2__merge3(H5B2_hdr_t *hdr, hid_t dxpl_id, uint16_t depth,
|
||||
H5B2_node_ptr_t *curr_node_ptr, unsigned *parent_cache_info_flags_ptr,
|
||||
H5_DLL herr_t H5B2__redistribute3(H5B2_hdr_t *hdr, uint16_t depth,
|
||||
H5B2_internal_t *internal, unsigned *internal_flags_ptr, unsigned idx);
|
||||
H5_DLL herr_t H5B2__merge2(H5B2_hdr_t *hdr, uint16_t depth, H5B2_node_ptr_t *curr_node_ptr,
|
||||
unsigned *parent_cache_info_flags_ptr, H5B2_internal_t *internal,
|
||||
unsigned *internal_flags_ptr, unsigned idx);
|
||||
H5_DLL herr_t H5B2__merge3(H5B2_hdr_t *hdr, uint16_t depth, H5B2_node_ptr_t *curr_node_ptr,
|
||||
unsigned *parent_cache_info_flags_ptr, H5B2_internal_t *internal,
|
||||
unsigned *internal_flags_ptr, unsigned idx);
|
||||
|
||||
/* Routines for managing B-tree header info */
|
||||
H5_DLL H5B2_hdr_t *H5B2__hdr_alloc(H5F_t *f);
|
||||
H5_DLL haddr_t H5B2__hdr_create(H5F_t *f, hid_t dxpl_id,
|
||||
const H5B2_create_t *cparam, void *ctx_udata);
|
||||
H5_DLL haddr_t H5B2__hdr_create(H5F_t *f, const H5B2_create_t *cparam, void *ctx_udata);
|
||||
H5_DLL herr_t H5B2__hdr_init(H5B2_hdr_t *hdr, const H5B2_create_t *cparam,
|
||||
void *ctx_udata, uint16_t depth);
|
||||
H5_DLL herr_t H5B2__hdr_incr(H5B2_hdr_t *hdr);
|
||||
@ -366,29 +364,26 @@ H5_DLL herr_t H5B2__hdr_decr(H5B2_hdr_t *hdr);
|
||||
H5_DLL herr_t H5B2__hdr_fuse_incr(H5B2_hdr_t *hdr);
|
||||
H5_DLL size_t H5B2__hdr_fuse_decr(H5B2_hdr_t *hdr);
|
||||
H5_DLL herr_t H5B2__hdr_dirty(H5B2_hdr_t *hdr);
|
||||
H5_DLL H5B2_hdr_t *H5B2__hdr_protect(H5F_t *f, hid_t dxpl_id, haddr_t hdr_addr,
|
||||
H5_DLL H5B2_hdr_t *H5B2__hdr_protect(H5F_t *f, haddr_t hdr_addr,
|
||||
void *ctx_udata, unsigned flags);
|
||||
H5_DLL herr_t H5B2__hdr_unprotect(H5B2_hdr_t *hdr, hid_t dxpl_id,
|
||||
unsigned cache_flags);
|
||||
H5_DLL herr_t H5B2__hdr_delete(H5B2_hdr_t *hdr, hid_t dxpl_id);
|
||||
H5_DLL herr_t H5B2__hdr_unprotect(H5B2_hdr_t *hdr, unsigned cache_flags);
|
||||
H5_DLL herr_t H5B2__hdr_delete(H5B2_hdr_t *hdr);
|
||||
|
||||
/* Routines for operating on leaf nodes */
|
||||
H5_DLL H5B2_leaf_t * H5B2__protect_leaf(H5B2_hdr_t *hdr, hid_t dxpl_id,
|
||||
void *parent, H5B2_node_ptr_t *node_ptr, hbool_t shadow, unsigned flags);
|
||||
H5_DLL herr_t H5B2__swap_leaf(H5B2_hdr_t *hdr, hid_t dxpl_id, uint16_t depth,
|
||||
H5B2_internal_t *internal, unsigned *internal_flags_ptr, unsigned idx,
|
||||
void *swap_loc);
|
||||
H5_DLL H5B2_leaf_t * H5B2__protect_leaf(H5B2_hdr_t *hdr, void *parent,
|
||||
H5B2_node_ptr_t *node_ptr, hbool_t shadow, unsigned flags);
|
||||
H5_DLL herr_t H5B2__swap_leaf(H5B2_hdr_t *hdr, uint16_t depth, H5B2_internal_t *internal,
|
||||
unsigned *internal_flags_ptr, unsigned idx, void *swap_loc);
|
||||
|
||||
/* Routines for operating on internal nodes */
|
||||
H5_DLL H5B2_internal_t *H5B2__protect_internal(H5B2_hdr_t *hdr, hid_t dxpl_id,
|
||||
void *parent, H5B2_node_ptr_t *node_ptr, uint16_t depth, hbool_t shadow,
|
||||
unsigned flags);
|
||||
H5_DLL H5B2_internal_t *H5B2__protect_internal(H5B2_hdr_t *hdr, void *parent,
|
||||
H5B2_node_ptr_t *node_ptr, uint16_t depth, hbool_t shadow, unsigned flags);
|
||||
|
||||
/* Routines for allocating nodes */
|
||||
H5_DLL herr_t H5B2__split_root(H5B2_hdr_t *hdr, hid_t dxpl_id);
|
||||
H5_DLL herr_t H5B2__create_leaf(H5B2_hdr_t *hdr, hid_t dxpl_id, void *parent,
|
||||
H5_DLL herr_t H5B2__split_root(H5B2_hdr_t *hdr);
|
||||
H5_DLL herr_t H5B2__create_leaf(H5B2_hdr_t *hdr, void *parent,
|
||||
H5B2_node_ptr_t *node_ptr);
|
||||
H5_DLL herr_t H5B2__create_internal(H5B2_hdr_t *hdr, hid_t dxpl_id, void *parent,
|
||||
H5_DLL herr_t H5B2__create_internal(H5B2_hdr_t *hdr, void *parent,
|
||||
H5B2_node_ptr_t *node_ptr, uint16_t depth);
|
||||
|
||||
/* Routines for releasing structures */
|
||||
@ -397,74 +392,69 @@ H5_DLL herr_t H5B2__leaf_free(H5B2_leaf_t *l);
|
||||
H5_DLL herr_t H5B2__internal_free(H5B2_internal_t *i);
|
||||
|
||||
/* Routines for inserting records */
|
||||
H5_DLL herr_t H5B2__insert(H5B2_hdr_t *hdr, hid_t dxpl_id, void *udata);
|
||||
H5_DLL herr_t H5B2__insert_internal(H5B2_hdr_t *hdr, hid_t dxpl_id,
|
||||
uint16_t depth, unsigned *parent_cache_info_flags_ptr,
|
||||
H5B2_node_ptr_t *curr_node_ptr, H5B2_nodepos_t curr_pos, void *parent, void *udata);
|
||||
H5_DLL herr_t H5B2__insert_leaf(H5B2_hdr_t *hdr, hid_t dxpl_id,
|
||||
H5B2_node_ptr_t *curr_node_ptr, H5B2_nodepos_t curr_pos, void *parent, void *udata);
|
||||
H5_DLL herr_t H5B2__insert(H5B2_hdr_t *hdr, void *udata);
|
||||
H5_DLL herr_t H5B2__insert_internal(H5B2_hdr_t *hdr, uint16_t depth,
|
||||
unsigned *parent_cache_info_flags_ptr, H5B2_node_ptr_t *curr_node_ptr,
|
||||
H5B2_nodepos_t curr_pos, void *parent, void *udata);
|
||||
H5_DLL herr_t H5B2__insert_leaf(H5B2_hdr_t *hdr, H5B2_node_ptr_t *curr_node_ptr,
|
||||
H5B2_nodepos_t curr_pos, void *parent, void *udata);
|
||||
|
||||
/* Routines for update records */
|
||||
H5_DLL herr_t H5B2__update_internal(H5B2_hdr_t *hdr, hid_t dxpl_id,
|
||||
uint16_t depth, unsigned *parent_cache_info_flags_ptr,
|
||||
H5B2_node_ptr_t *curr_node_ptr, H5B2_update_status_t *status,
|
||||
H5B2_nodepos_t curr_pos, void *parent, void *udata, H5B2_modify_t op,
|
||||
void *op_data);
|
||||
H5_DLL herr_t H5B2__update_leaf(H5B2_hdr_t *hdr, hid_t dxpl_id,
|
||||
H5B2_node_ptr_t *curr_node_ptr, H5B2_update_status_t *status,
|
||||
H5B2_nodepos_t curr_pos, void *parent, void *udata, H5B2_modify_t op,
|
||||
void *op_data);
|
||||
H5_DLL herr_t H5B2__update_internal(H5B2_hdr_t *hdr, uint16_t depth,
|
||||
unsigned *parent_cache_info_flags_ptr, H5B2_node_ptr_t *curr_node_ptr,
|
||||
H5B2_update_status_t *status, H5B2_nodepos_t curr_pos, void *parent,
|
||||
void *udata, H5B2_modify_t op, void *op_data);
|
||||
H5_DLL herr_t H5B2__update_leaf(H5B2_hdr_t *hdr, H5B2_node_ptr_t *curr_node_ptr,
|
||||
H5B2_update_status_t *status, H5B2_nodepos_t curr_pos, void *parent,
|
||||
void *udata, H5B2_modify_t op, void *op_data);
|
||||
|
||||
/* Routines for iterating over nodes/records */
|
||||
H5_DLL herr_t H5B2__iterate_node(H5B2_hdr_t *hdr, hid_t dxpl_id, uint16_t depth,
|
||||
H5_DLL herr_t H5B2__iterate_node(H5B2_hdr_t *hdr, uint16_t depth,
|
||||
const H5B2_node_ptr_t *curr_node, void *parent, H5B2_operator_t op, void *op_data);
|
||||
H5_DLL herr_t H5B2__node_size(H5B2_hdr_t *hdr, hid_t dxpl_id,
|
||||
uint16_t depth, const H5B2_node_ptr_t *curr_node, void *parent,
|
||||
hsize_t *op_data);
|
||||
H5_DLL herr_t H5B2__node_size(H5B2_hdr_t *hdr, uint16_t depth,
|
||||
const H5B2_node_ptr_t *curr_node, void *parent, hsize_t *op_data);
|
||||
|
||||
/* Routines for locating records */
|
||||
H5_DLL herr_t H5B2__locate_record(const H5B2_class_t *type, unsigned nrec,
|
||||
size_t *rec_off, const uint8_t *native, const void *udata, unsigned *idx, int *result);
|
||||
H5_DLL herr_t H5B2__neighbor_internal(H5B2_hdr_t *hdr, hid_t dxpl_id,
|
||||
uint16_t depth, H5B2_node_ptr_t *curr_node_ptr, void *neighbor_loc,
|
||||
H5B2_compare_t comp, void *parent, void *udata, H5B2_found_t op,
|
||||
void *op_data);
|
||||
H5_DLL herr_t H5B2__neighbor_leaf(H5B2_hdr_t *hdr, hid_t dxpl_id,
|
||||
H5_DLL herr_t H5B2__neighbor_internal(H5B2_hdr_t *hdr, uint16_t depth,
|
||||
H5B2_node_ptr_t *curr_node_ptr, void *neighbor_loc, H5B2_compare_t comp,
|
||||
void *parent, void *udata, H5B2_found_t op, void *op_data);
|
||||
H5_DLL herr_t H5B2__neighbor_leaf(H5B2_hdr_t *hdr, H5B2_node_ptr_t *curr_node_ptr,
|
||||
void *neighbor_loc, H5B2_compare_t comp, void *parent, void *udata,
|
||||
H5B2_found_t op, void *op_data);
|
||||
|
||||
/* Routines for removing records */
|
||||
H5_DLL herr_t H5B2__remove_internal(H5B2_hdr_t *hdr, hid_t dxpl_id,
|
||||
hbool_t *depth_decreased, void *swap_loc, void *swap_parent, uint16_t depth,
|
||||
H5AC_info_t *parent_cache_info, unsigned *parent_cache_info_flags_ptr,
|
||||
H5B2_nodepos_t curr_pos, H5B2_node_ptr_t *curr_node_ptr, void *udata,
|
||||
H5B2_remove_t op, void *op_data);
|
||||
H5_DLL herr_t H5B2__remove_leaf(H5B2_hdr_t *hdr, hid_t dxpl_id,
|
||||
H5B2_node_ptr_t *curr_node_ptr, H5B2_nodepos_t curr_pos, void *parent,
|
||||
void *udata, H5B2_remove_t op, void *op_data);
|
||||
H5_DLL herr_t H5B2__remove_internal_by_idx(H5B2_hdr_t *hdr, hid_t dxpl_id,
|
||||
H5_DLL herr_t H5B2__remove_internal(H5B2_hdr_t *hdr, hbool_t *depth_decreased,
|
||||
void *swap_loc, void *swap_parent, uint16_t depth, H5AC_info_t *parent_cache_info,
|
||||
unsigned *parent_cache_info_flags_ptr, H5B2_nodepos_t curr_pos,
|
||||
H5B2_node_ptr_t *curr_node_ptr, void *udata, H5B2_remove_t op,
|
||||
void *op_data);
|
||||
H5_DLL 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);
|
||||
H5_DLL herr_t H5B2__remove_internal_by_idx(H5B2_hdr_t *hdr,
|
||||
hbool_t *depth_decreased, void *swap_loc, void *swap_parent, uint16_t depth,
|
||||
H5AC_info_t *parent_cache_info, unsigned *parent_cache_info_flags_ptr,
|
||||
H5B2_node_ptr_t *curr_node_ptr, H5B2_nodepos_t curr_pos, hsize_t n,
|
||||
H5B2_remove_t op, void *op_data);
|
||||
H5_DLL herr_t H5B2__remove_leaf_by_idx(H5B2_hdr_t *hdr, hid_t dxpl_id,
|
||||
H5B2_node_ptr_t *curr_node_ptr, H5B2_nodepos_t curr_pos, void *parent,
|
||||
unsigned idx, H5B2_remove_t op, void *op_data);
|
||||
H5_DLL herr_t H5B2__remove_leaf_by_idx(H5B2_hdr_t *hdr, H5B2_node_ptr_t *curr_node_ptr,
|
||||
H5B2_nodepos_t curr_pos, void *parent, unsigned idx, H5B2_remove_t op,
|
||||
void *op_data);
|
||||
|
||||
/* Routines for deleting nodes */
|
||||
H5_DLL herr_t H5B2__delete_node(H5B2_hdr_t *hdr, hid_t dxpl_id, uint16_t depth,
|
||||
H5_DLL herr_t H5B2__delete_node(H5B2_hdr_t *hdr, uint16_t depth,
|
||||
const H5B2_node_ptr_t *curr_node, void *parent, H5B2_remove_t op,
|
||||
void *op_data);
|
||||
|
||||
/* Debugging routines for dumping file structures */
|
||||
H5_DLL herr_t H5B2__hdr_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr,
|
||||
FILE *stream, int indent, int fwidth, const H5B2_class_t *type, haddr_t obj_addr);
|
||||
H5_DLL herr_t H5B2__int_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr,
|
||||
FILE *stream, int indent, int fwidth, const H5B2_class_t *type,
|
||||
haddr_t hdr_addr, unsigned nrec, unsigned depth, haddr_t obj_addr);
|
||||
H5_DLL herr_t H5B2__leaf_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr,
|
||||
FILE *stream, int indent, int fwidth, const H5B2_class_t *type,
|
||||
haddr_t hdr_addr, unsigned nrec, haddr_t obj_addr);
|
||||
H5_DLL herr_t H5B2__hdr_debug(H5F_t *f, haddr_t addr, FILE *stream, int indent,
|
||||
int fwidth, const H5B2_class_t *type, haddr_t obj_addr);
|
||||
H5_DLL herr_t H5B2__int_debug(H5F_t *f, haddr_t addr, FILE *stream, int indent,
|
||||
int fwidth, const H5B2_class_t *type, haddr_t hdr_addr, unsigned nrec, unsigned depth,
|
||||
haddr_t obj_addr);
|
||||
H5_DLL herr_t H5B2__leaf_debug(H5F_t *f, haddr_t addr, FILE *stream, int indent,
|
||||
int fwidth, const H5B2_class_t *type, haddr_t hdr_addr, unsigned nrec, haddr_t obj_addr);
|
||||
|
||||
/* Sanity checking routines */
|
||||
#ifdef H5B2_DEBUG
|
||||
@ -478,9 +468,9 @@ H5_DLL herr_t H5B2__assert_leaf2(const H5B2_hdr_t *hdr, const H5B2_leaf_t *leaf,
|
||||
/* Testing routines */
|
||||
#ifdef H5B2_TESTING
|
||||
H5_DLL herr_t H5B2_get_root_addr_test(H5B2_t *bt2, haddr_t *root_addr);
|
||||
H5_DLL int H5B2_get_node_depth_test(H5B2_t *bt2, hid_t dxpl_id, void *udata);
|
||||
H5_DLL herr_t H5B2_get_node_info_test(H5B2_t *bt2, hid_t dxpl_id,
|
||||
void *udata, H5B2_node_info_test_t *ninfo);
|
||||
H5_DLL int H5B2__get_node_depth_test(H5B2_t *bt2, void *udata);
|
||||
H5_DLL herr_t H5B2__get_node_info_test(H5B2_t *bt2, void *udata,
|
||||
H5B2_node_info_test_t *ninfo);
|
||||
#endif /* H5B2_TESTING */
|
||||
|
||||
#endif /* _H5B2pkg_H */
|
||||
|
@ -125,34 +125,31 @@ typedef struct H5B2_t H5B2_t;
|
||||
/***************************************/
|
||||
/* Library-private Function Prototypes */
|
||||
/***************************************/
|
||||
H5_DLL H5B2_t *H5B2_create(H5F_t *f, hid_t dxpl_id, const H5B2_create_t *cparam,
|
||||
H5_DLL H5B2_t *H5B2_create(H5F_t *f, const H5B2_create_t *cparam,
|
||||
void *ctx_udata);
|
||||
H5_DLL H5B2_t *H5B2_open(H5F_t *f, hid_t dxpl_id, haddr_t addr, void *ctx_udata);
|
||||
H5_DLL H5B2_t *H5B2_open(H5F_t *f, haddr_t addr, void *ctx_udata);
|
||||
H5_DLL herr_t H5B2_get_addr(const H5B2_t *bt2, haddr_t *addr/*out*/);
|
||||
H5_DLL herr_t H5B2_insert(H5B2_t *bt2, hid_t dxpl_id, void *udata);
|
||||
H5_DLL herr_t H5B2_iterate(H5B2_t *bt2, hid_t dxpl_id, H5B2_operator_t op,
|
||||
void *op_data);
|
||||
H5_DLL htri_t H5B2_find(H5B2_t *bt2, hid_t dxpl_id, void *udata,
|
||||
H5_DLL herr_t H5B2_insert(H5B2_t *bt2, void *udata);
|
||||
H5_DLL herr_t H5B2_iterate(H5B2_t *bt2, H5B2_operator_t op, void *op_data);
|
||||
H5_DLL htri_t H5B2_find(H5B2_t *bt2, void *udata, H5B2_found_t op, void *op_data);
|
||||
H5_DLL herr_t H5B2_index(H5B2_t *bt2, H5_iter_order_t order, hsize_t idx,
|
||||
H5B2_found_t op, void *op_data);
|
||||
H5_DLL herr_t H5B2_index(H5B2_t *bt2, hid_t dxpl_id, H5_iter_order_t order,
|
||||
hsize_t idx, H5B2_found_t op, void *op_data);
|
||||
H5_DLL herr_t H5B2_neighbor(H5B2_t *bt2, hid_t dxpl_id, H5B2_compare_t range,
|
||||
void *udata, H5B2_found_t op, void *op_data);
|
||||
H5_DLL herr_t H5B2_modify(H5B2_t *bt2, hid_t dxpl_id, void *udata,
|
||||
H5B2_modify_t op, void *op_data);
|
||||
H5_DLL herr_t H5B2_update(H5B2_t *bt2, hid_t dxpl_id, void *udata,
|
||||
H5B2_modify_t op, void *op_data);
|
||||
H5_DLL herr_t H5B2_remove(H5B2_t *b2, hid_t dxpl_id, void *udata,
|
||||
H5B2_remove_t op, void *op_data);
|
||||
H5_DLL herr_t H5B2_remove_by_idx(H5B2_t *bt2, hid_t dxpl_id,
|
||||
H5_iter_order_t order, hsize_t idx, H5B2_remove_t op, void *op_data);
|
||||
H5_DLL herr_t H5B2_neighbor(H5B2_t *bt2, H5B2_compare_t range, void *udata,
|
||||
H5B2_found_t op, void *op_data);
|
||||
H5_DLL herr_t H5B2_modify(H5B2_t *bt2, void *udata, H5B2_modify_t op,
|
||||
void *op_data);
|
||||
H5_DLL herr_t H5B2_update(H5B2_t *bt2, void *udata, H5B2_modify_t op,
|
||||
void *op_data);
|
||||
H5_DLL herr_t H5B2_remove(H5B2_t *b2, void *udata, H5B2_remove_t op,
|
||||
void *op_data);
|
||||
H5_DLL herr_t H5B2_remove_by_idx(H5B2_t *bt2, H5_iter_order_t order,
|
||||
hsize_t idx, H5B2_remove_t op, void *op_data);
|
||||
H5_DLL herr_t H5B2_get_nrec(const H5B2_t *bt2, hsize_t *nrec);
|
||||
H5_DLL herr_t H5B2_size(H5B2_t *bt2, hid_t dxpl_id,
|
||||
hsize_t *btree_size);
|
||||
H5_DLL herr_t H5B2_close(H5B2_t *bt2, hid_t dxpl_id);
|
||||
H5_DLL herr_t H5B2_delete(H5F_t *f, hid_t dxpl_id, haddr_t addr,
|
||||
void *ctx_udata, H5B2_remove_t op, void *op_data);
|
||||
H5_DLL herr_t H5B2_depend(H5B2_t *bt2, hid_t dxpl_id, H5AC_proxy_entry_t *parent);
|
||||
H5_DLL herr_t H5B2_size(H5B2_t *bt2, hsize_t *btree_size);
|
||||
H5_DLL herr_t H5B2_close(H5B2_t *bt2);
|
||||
H5_DLL herr_t H5B2_delete(H5F_t *f, haddr_t addr, void *ctx_udata,
|
||||
H5B2_remove_t op, void *op_data);
|
||||
H5_DLL herr_t H5B2_depend(H5B2_t *bt2, H5AC_proxy_entry_t *parent);
|
||||
H5_DLL herr_t H5B2_patch_file(H5B2_t *fa, H5F_t *f);
|
||||
|
||||
/* Statistics routines */
|
||||
|
@ -110,7 +110,7 @@ H5B2_stat_info(H5B2_t *bt2, H5B2_stat_t *info)
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
herr_t
|
||||
H5B2_size(H5B2_t *bt2, hid_t dxpl_id, hsize_t *btree_size)
|
||||
H5B2_size(H5B2_t *bt2, hsize_t *btree_size)
|
||||
{
|
||||
H5B2_hdr_t *hdr; /* Pointer to the B-tree header */
|
||||
herr_t ret_value = SUCCEED; /* Return value */
|
||||
@ -137,7 +137,7 @@ H5B2_size(H5B2_t *bt2, hid_t dxpl_id, hsize_t *btree_size)
|
||||
*btree_size += hdr->node_size;
|
||||
else
|
||||
/* Iterate through nodes */
|
||||
if(H5B2__node_size(hdr, dxpl_id, hdr->depth, &hdr->root, hdr, btree_size) < 0)
|
||||
if(H5B2__node_size(hdr, hdr->depth, &hdr->root, hdr, btree_size) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTLIST, FAIL, "node iteration failed")
|
||||
} /* end if */
|
||||
|
||||
|
@ -498,7 +498,7 @@ H5B2_get_root_addr_test(H5B2_t *bt2, haddr_t *root_addr)
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5B2_get_node_info_test
|
||||
* Function: H5B2__get_node_info_test
|
||||
*
|
||||
* Purpose: Determine information about a node holding a record in the B-tree
|
||||
*
|
||||
@ -511,8 +511,7 @@ H5B2_get_root_addr_test(H5B2_t *bt2, haddr_t *root_addr)
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
herr_t
|
||||
H5B2_get_node_info_test(H5B2_t *bt2, hid_t dxpl_id, void *udata,
|
||||
H5B2_node_info_test_t *ninfo)
|
||||
H5B2__get_node_info_test(H5B2_t *bt2, void *udata, H5B2_node_info_test_t *ninfo)
|
||||
{
|
||||
H5B2_hdr_t *hdr; /* Pointer to the B-tree header */
|
||||
H5B2_node_ptr_t curr_node_ptr; /* Node pointer info for current node */
|
||||
@ -522,7 +521,7 @@ H5B2_get_node_info_test(H5B2_t *bt2, hid_t dxpl_id, void *udata,
|
||||
unsigned idx; /* Location of record which matches key */
|
||||
herr_t ret_value = SUCCEED; /* Return value */
|
||||
|
||||
FUNC_ENTER_NOAPI(FAIL)
|
||||
FUNC_ENTER_PACKAGE
|
||||
|
||||
/* Check arguments. */
|
||||
HDassert(bt2);
|
||||
@ -554,7 +553,7 @@ H5B2_get_node_info_test(H5B2_t *bt2, hid_t dxpl_id, void *udata,
|
||||
H5B2_node_ptr_t next_node_ptr; /* Node pointer info for next node */
|
||||
|
||||
/* Lock B-tree current node */
|
||||
if(NULL == (internal = H5B2__protect_internal(hdr, dxpl_id, parent, &curr_node_ptr, depth, FALSE, H5AC__READ_ONLY_FLAG)))
|
||||
if(NULL == (internal = H5B2__protect_internal(hdr, parent, &curr_node_ptr, depth, FALSE, H5AC__READ_ONLY_FLAG)))
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to load B-tree internal node")
|
||||
|
||||
/* Unpin parent if necessary */
|
||||
@ -577,7 +576,7 @@ H5B2_get_node_info_test(H5B2_t *bt2, hid_t dxpl_id, void *udata,
|
||||
next_node_ptr = internal->node_ptrs[idx];
|
||||
|
||||
/* Unlock current node */
|
||||
if(H5AC_unprotect(hdr->f, dxpl_id, H5AC_BT2_INT, curr_node_ptr.addr, internal, (unsigned)(hdr->swmr_write ? H5AC__PIN_ENTRY_FLAG : H5AC__NO_FLAGS_SET)) < 0)
|
||||
if(H5AC_unprotect(hdr->f, H5AC_BT2_INT, curr_node_ptr.addr, internal, (unsigned)(hdr->swmr_write ? H5AC__PIN_ENTRY_FLAG : H5AC__NO_FLAGS_SET)) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTUNPROTECT, FAIL, "unable to release B-tree node")
|
||||
|
||||
/* Keep track of parent if necessary */
|
||||
@ -589,7 +588,7 @@ H5B2_get_node_info_test(H5B2_t *bt2, hid_t dxpl_id, void *udata,
|
||||
} /* end if */
|
||||
else {
|
||||
/* Unlock current node */
|
||||
if(H5AC_unprotect(hdr->f, dxpl_id, H5AC_BT2_INT, curr_node_ptr.addr, internal, H5AC__NO_FLAGS_SET) < 0)
|
||||
if(H5AC_unprotect(hdr->f, H5AC_BT2_INT, curr_node_ptr.addr, internal, H5AC__NO_FLAGS_SET) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTUNPROTECT, FAIL, "unable to release B-tree node")
|
||||
|
||||
/* Fill in information about the node */
|
||||
@ -608,7 +607,7 @@ H5B2_get_node_info_test(H5B2_t *bt2, hid_t dxpl_id, void *udata,
|
||||
H5B2_leaf_t *leaf; /* Pointer to leaf node in B-tree */
|
||||
|
||||
/* Lock B-tree leaf node */
|
||||
if(NULL == (leaf = H5B2__protect_leaf(hdr, dxpl_id, parent, &curr_node_ptr, FALSE, H5AC__READ_ONLY_FLAG)))
|
||||
if(NULL == (leaf = H5B2__protect_leaf(hdr, parent, &curr_node_ptr, FALSE, H5AC__READ_ONLY_FLAG)))
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to protect B-tree leaf node")
|
||||
|
||||
/* Unpin parent if necessary */
|
||||
@ -624,7 +623,7 @@ H5B2_get_node_info_test(H5B2_t *bt2, hid_t dxpl_id, void *udata,
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTCOMPARE, FAIL, "can't compare btree2 records")
|
||||
|
||||
/* Unlock current node */
|
||||
if(H5AC_unprotect(hdr->f, dxpl_id, H5AC_BT2_LEAF, curr_node_ptr.addr, leaf, H5AC__NO_FLAGS_SET) < 0)
|
||||
if(H5AC_unprotect(hdr->f, H5AC_BT2_LEAF, curr_node_ptr.addr, leaf, H5AC__NO_FLAGS_SET) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTUNPROTECT, FAIL, "unable to release B-tree node")
|
||||
|
||||
/* Indicate the depth that the record was found */
|
||||
@ -644,11 +643,11 @@ done:
|
||||
} /* end if */
|
||||
|
||||
FUNC_LEAVE_NOAPI(ret_value)
|
||||
} /* H5B2_get_node_info_test() */
|
||||
} /* H5B2__get_node_info_test() */
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5B2_get_node_depth_test
|
||||
* Function: H5B2__get_node_depth_test
|
||||
*
|
||||
* Purpose: Determine the depth of a node holding a record in the B-tree
|
||||
*
|
||||
@ -664,18 +663,18 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
int
|
||||
H5B2_get_node_depth_test(H5B2_t *bt2, hid_t dxpl_id, void *udata)
|
||||
H5B2__get_node_depth_test(H5B2_t *bt2, void *udata)
|
||||
{
|
||||
H5B2_node_info_test_t ninfo; /* Node information */
|
||||
int ret_value = -1; /* Return information */
|
||||
|
||||
FUNC_ENTER_NOAPI(FAIL)
|
||||
FUNC_ENTER_PACKAGE
|
||||
|
||||
/* Check arguments. */
|
||||
HDassert(bt2);
|
||||
|
||||
/* Get information abou the node */
|
||||
if(H5B2_get_node_info_test(bt2, dxpl_id, udata, &ninfo) < 0)
|
||||
if(H5B2__get_node_info_test(bt2, udata, &ninfo) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_NOTFOUND, FAIL, "error looking up node info")
|
||||
|
||||
/* Set return value */
|
||||
@ -683,5 +682,5 @@ H5B2_get_node_depth_test(H5B2_t *bt2, hid_t dxpl_id, void *udata)
|
||||
|
||||
done:
|
||||
FUNC_LEAVE_NOAPI(ret_value)
|
||||
} /* H5B2_get_node_depth_test() */
|
||||
} /* H5B2__get_node_depth_test() */
|
||||
|
||||
|
16
src/H5Bdbg.c
16
src/H5Bdbg.c
@ -53,7 +53,7 @@
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
herr_t
|
||||
H5B_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr, FILE *stream, int indent, int fwidth,
|
||||
H5B_debug(H5F_t *f, haddr_t addr, FILE *stream, int indent, int fwidth,
|
||||
const H5B_class_t *type, void *udata)
|
||||
{
|
||||
H5B_t *bt = NULL;
|
||||
@ -90,7 +90,7 @@ H5B_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr, FILE *stream, int indent, int f
|
||||
cache_udata.f = f;
|
||||
cache_udata.type = type;
|
||||
cache_udata.rc_shared = rc_shared;
|
||||
if(NULL == (bt = (H5B_t *)H5AC_protect(f, dxpl_id, H5AC_BT, addr, &cache_udata, H5AC__READ_ONLY_FLAG)))
|
||||
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")
|
||||
|
||||
/*
|
||||
@ -149,7 +149,7 @@ H5B_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr, FILE *stream, int indent, int f
|
||||
} /* end for */
|
||||
|
||||
done:
|
||||
if(bt && H5AC_unprotect(f, dxpl_id, H5AC_BT, addr, bt, H5AC__NO_FLAGS_SET) < 0)
|
||||
if(bt && H5AC_unprotect(f, H5AC_BT, addr, bt, H5AC__NO_FLAGS_SET) < 0)
|
||||
HDONE_ERROR(H5E_BTREE, H5E_CANTUNPROTECT, FAIL, "unable to release B-tree node")
|
||||
|
||||
FUNC_LEAVE_NOAPI(ret_value)
|
||||
@ -172,7 +172,7 @@ done:
|
||||
*/
|
||||
#ifdef H5B_DEBUG
|
||||
herr_t
|
||||
H5B__assert(H5F_t *f, hid_t dxpl_id, haddr_t addr, const H5B_class_t *type, void *udata)
|
||||
H5B__assert(H5F_t *f, haddr_t addr, const H5B_class_t *type, void *udata)
|
||||
{
|
||||
H5B_t *bt = NULL;
|
||||
H5UC_t *rc_shared; /* Ref-counted shared info */
|
||||
@ -207,7 +207,7 @@ H5B__assert(H5F_t *f, hid_t dxpl_id, haddr_t addr, const H5B_class_t *type, void
|
||||
cache_udata.f = f;
|
||||
cache_udata.type = type;
|
||||
cache_udata.rc_shared = rc_shared;
|
||||
bt = (H5B_t *)H5AC_protect(f, dxpl_id, H5AC_BT, addr, &cache_udata, H5AC__READ_ONLY_FLAG);
|
||||
bt = (H5B_t *)H5AC_protect(f, H5AC_BT, addr, &cache_udata, H5AC__READ_ONLY_FLAG);
|
||||
HDassert(bt);
|
||||
shared = (H5B_shared_t *)H5UC_GET_OBJ(bt->rc_shared);
|
||||
HDassert(shared);
|
||||
@ -217,7 +217,7 @@ H5B__assert(H5F_t *f, hid_t dxpl_id, haddr_t addr, const H5B_class_t *type, void
|
||||
cur->level = bt->level;
|
||||
head = tail = cur;
|
||||
|
||||
status = H5AC_unprotect(f, dxpl_id, H5AC_BT, addr, bt, H5AC__NO_FLAGS_SET);
|
||||
status = H5AC_unprotect(f, H5AC_BT, addr, bt, H5AC__NO_FLAGS_SET);
|
||||
HDassert(status >= 0);
|
||||
bt = NULL; /* Make certain future references will be caught */
|
||||
|
||||
@ -228,7 +228,7 @@ H5B__assert(H5F_t *f, hid_t dxpl_id, haddr_t addr, const H5B_class_t *type, void
|
||||
* test.
|
||||
*/
|
||||
for(ncell = 0; cur; ncell++) {
|
||||
bt = (H5B_t *)H5AC_protect(f, dxpl_id, H5AC_BT, cur->addr, &cache_udata, H5AC__READ_ONLY_FLAG);
|
||||
bt = (H5B_t *)H5AC_protect(f, H5AC_BT, cur->addr, &cache_udata, H5AC__READ_ONLY_FLAG);
|
||||
HDassert(bt);
|
||||
|
||||
/* Check node header */
|
||||
@ -268,7 +268,7 @@ H5B__assert(H5F_t *f, hid_t dxpl_id, haddr_t addr, const H5B_class_t *type, void
|
||||
} /* end if */
|
||||
|
||||
/* Release node */
|
||||
status = H5AC_unprotect(f, dxpl_id, H5AC_BT, cur->addr, bt, H5AC__NO_FLAGS_SET);
|
||||
status = H5AC_unprotect(f, H5AC_BT, cur->addr, bt, H5AC__NO_FLAGS_SET);
|
||||
HDassert(status >= 0);
|
||||
bt = NULL; /* Make certain future references will be caught */
|
||||
|
||||
|
@ -86,8 +86,7 @@ H5FL_EXTERN(H5B_t);
|
||||
/******************************/
|
||||
H5_DLL herr_t H5B__node_dest(H5B_t *bt);
|
||||
#ifdef H5B_DEBUG
|
||||
herr_t H5B__assert(H5F_t *f, hid_t dxpl_id, haddr_t addr, const H5B_class_t *type,
|
||||
void *udata);
|
||||
herr_t H5B__assert(H5F_t *f, haddr_t addr, const H5B_class_t *type, void *udata);
|
||||
#endif
|
||||
|
||||
#endif /*_H5Bpkg_H*/
|
||||
|
@ -82,8 +82,8 @@ typedef enum H5B_dir_t {
|
||||
} H5B_dir_t;
|
||||
|
||||
/* Define the operator callback function pointer for H5B_iterate() */
|
||||
typedef int (*H5B_operator_t)(H5F_t *f, hid_t dxpl_id, const void *_lt_key, haddr_t addr,
|
||||
const void *_rt_key, void *_udata);
|
||||
typedef int (*H5B_operator_t)(H5F_t *f, const void *_lt_key, haddr_t addr,
|
||||
const void *_rt_key, void *_udata);
|
||||
|
||||
/* Each B-tree has certain information that can be shared across all
|
||||
* the instances of nodes in that B-tree.
|
||||
@ -113,13 +113,13 @@ typedef struct H5B_class_t {
|
||||
H5B_subid_t id; /*id as found in file*/
|
||||
size_t sizeof_nkey; /*size of native (memory) key*/
|
||||
H5UC_t * (*get_shared)(const H5F_t*, const void*); /*shared info for node */
|
||||
herr_t (*new_node)(H5F_t*, hid_t, H5B_ins_t, void*, void*, void*, haddr_t*);
|
||||
herr_t (*new_node)(H5F_t*, H5B_ins_t, void*, void*, void*, haddr_t*);
|
||||
int (*cmp2)(void*, void*, void*); /*compare 2 keys */
|
||||
int (*cmp3)(void*, void*, void*); /*compare 3 keys */
|
||||
htri_t (*found)(H5F_t*, hid_t, haddr_t, const void*, void*);
|
||||
htri_t (*found)(H5F_t*, haddr_t, const void*, void*);
|
||||
|
||||
/* insert new data */
|
||||
H5B_ins_t (*insert)(H5F_t*, hid_t, haddr_t, void*, hbool_t*, void*, void*,
|
||||
H5B_ins_t (*insert)(H5F_t*, haddr_t, void*, hbool_t*, void*, void*,
|
||||
void*, hbool_t*, haddr_t*);
|
||||
|
||||
/* min insert uses min leaf, not new(), similarily for max insert */
|
||||
@ -130,8 +130,7 @@ typedef struct H5B_class_t {
|
||||
H5B_dir_t critical_key;
|
||||
|
||||
/* remove existing data */
|
||||
H5B_ins_t (*remove)(H5F_t*, hid_t, haddr_t, void*, hbool_t*, void*, void*,
|
||||
hbool_t*);
|
||||
H5B_ins_t (*remove)(H5F_t*, haddr_t, void*, hbool_t*, void*, void*, hbool_t*);
|
||||
|
||||
/* encode, decode, debug key values */
|
||||
herr_t (*decode)(const H5B_shared_t*, const uint8_t*, void*);
|
||||
@ -155,26 +154,25 @@ typedef struct H5B_info_t {
|
||||
/***************************************/
|
||||
/* Library-private Function Prototypes */
|
||||
/***************************************/
|
||||
H5_DLL herr_t H5B_create(H5F_t *f, hid_t dxpl_id, const H5B_class_t *type,
|
||||
void *udata, haddr_t *addr_p/*out*/);
|
||||
H5_DLL herr_t H5B_find(H5F_t *f, hid_t dxpl_id, const H5B_class_t *type,
|
||||
haddr_t addr, void *udata);
|
||||
H5_DLL herr_t H5B_insert(H5F_t *f, hid_t dxpl_id, const H5B_class_t *type,
|
||||
haddr_t addr, void *udata);
|
||||
H5_DLL herr_t H5B_iterate(H5F_t *f, hid_t dxpl_id, const H5B_class_t *type,
|
||||
haddr_t addr, H5B_operator_t op, void *udata);
|
||||
H5_DLL herr_t H5B_get_info(H5F_t *f, hid_t dxpl_id, const H5B_class_t *type,
|
||||
haddr_t addr, H5B_info_t *bt_info, H5B_operator_t op, void *udata);
|
||||
H5_DLL herr_t H5B_remove(H5F_t *f, hid_t dxpl_id, const H5B_class_t *type,
|
||||
haddr_t addr, void *udata);
|
||||
H5_DLL herr_t H5B_delete(H5F_t *f, hid_t dxpl_id, const H5B_class_t *type,
|
||||
haddr_t addr, void *udata);
|
||||
H5_DLL herr_t H5B_create(H5F_t *f, const H5B_class_t *type, void *udata,
|
||||
haddr_t *addr_p/*out*/);
|
||||
H5_DLL herr_t H5B_find(H5F_t *f, const H5B_class_t *type, haddr_t addr,
|
||||
void *udata);
|
||||
H5_DLL herr_t H5B_insert(H5F_t *f, const H5B_class_t *type, haddr_t addr,
|
||||
void *udata);
|
||||
H5_DLL herr_t H5B_iterate(H5F_t *f, const H5B_class_t *type, haddr_t addr,
|
||||
H5B_operator_t op, void *udata);
|
||||
H5_DLL herr_t H5B_get_info(H5F_t *f, const H5B_class_t *type, haddr_t addr,
|
||||
H5B_info_t *bt_info, H5B_operator_t op, void *udata);
|
||||
H5_DLL herr_t H5B_remove(H5F_t *f, const H5B_class_t *type, haddr_t addr,
|
||||
void *udata);
|
||||
H5_DLL herr_t H5B_delete(H5F_t *f, const H5B_class_t *type, haddr_t addr,
|
||||
void *udata);
|
||||
H5_DLL H5B_shared_t *H5B_shared_new(const H5F_t *f, const H5B_class_t *type,
|
||||
size_t sizeof_rkey);
|
||||
H5_DLL herr_t H5B_shared_free(void *_shared);
|
||||
H5_DLL herr_t H5B_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr, FILE * stream,
|
||||
H5_DLL herr_t H5B_debug(H5F_t *f, haddr_t addr, FILE * stream,
|
||||
int indent, int fwidth, const H5B_class_t *type, void *udata);
|
||||
H5_DLL htri_t H5B_valid(H5F_t *f, hid_t dxpl_id, const H5B_class_t *type,
|
||||
haddr_t addr);
|
||||
H5_DLL htri_t H5B_valid(H5F_t *f, const H5B_class_t *type, haddr_t addr);
|
||||
#endif /* _H5Bprivate_H */
|
||||
|
||||
|
2813
src/H5CX.c
Normal file
2813
src/H5CX.c
Normal file
File diff suppressed because it is too large
Load Diff
33
src/H5CXmodule.h
Normal file
33
src/H5CXmodule.h
Normal file
@ -0,0 +1,33 @@
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||
* Copyright by The HDF Group. *
|
||||
* 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. *
|
||||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
/*
|
||||
* Programmer: Quincey Koziol <koziol@lbl.gov>
|
||||
* Sunday, February 25, 2018
|
||||
*
|
||||
* Purpose: This file contains declarations which define macros for the
|
||||
* H5CX package. Including this header means that the source file
|
||||
* is part of the H5CX package.
|
||||
*/
|
||||
#ifndef _H5CXmodule_H
|
||||
#define _H5CXmodule_H
|
||||
|
||||
/* Define the proper control macros for the generic FUNC_ENTER/LEAVE and error
|
||||
* reporting macros.
|
||||
*/
|
||||
#define H5CX_MODULE
|
||||
#define H5_MY_PKG H5CX
|
||||
#define H5_MY_PKG_ERR H5E_CONTEXT
|
||||
#define H5_MY_PKG_INIT YES
|
||||
|
||||
#endif /* _H5CXmodule_H */
|
||||
|
147
src/H5CXprivate.h
Normal file
147
src/H5CXprivate.h
Normal file
@ -0,0 +1,147 @@
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||
* Copyright by The HDF Group. *
|
||||
* 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. *
|
||||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
/*
|
||||
* Header file for API contexts, etc.
|
||||
*/
|
||||
#ifndef _H5CXprivate_H
|
||||
#define _H5CXprivate_H
|
||||
|
||||
/* Include package's public header */
|
||||
#ifdef NOT_YET
|
||||
#include "H5CXpublic.h"
|
||||
#endif /* NOT_YET */
|
||||
|
||||
/* Private headers needed by this file */
|
||||
#include "H5private.h" /* Generic Functions */
|
||||
#include "H5ACprivate.h" /* Metadata cache */
|
||||
#ifdef H5_HAVE_PARALLEL
|
||||
#include "H5FDprivate.h" /* File drivers */
|
||||
#endif /* H5_HAVE_PARALLEL */
|
||||
#include "H5Zprivate.h" /* Data filters */
|
||||
|
||||
|
||||
/**************************/
|
||||
/* Library Private Macros */
|
||||
/**************************/
|
||||
|
||||
|
||||
/****************************/
|
||||
/* Library Private Typedefs */
|
||||
/****************************/
|
||||
|
||||
|
||||
/*****************************/
|
||||
/* Library-private Variables */
|
||||
/*****************************/
|
||||
|
||||
|
||||
/***************************************/
|
||||
/* Library-private Function Prototypes */
|
||||
/***************************************/
|
||||
|
||||
/* Library private routines */
|
||||
#ifndef _H5private_H
|
||||
H5_DLL herr_t H5CX_push(void);
|
||||
H5_DLL herr_t H5CX_pop(void);
|
||||
#endif /* _H5private_H */
|
||||
H5_DLL void H5CX_push_special(void);
|
||||
H5_DLL hbool_t H5CX_is_def_dxpl(void);
|
||||
|
||||
/* "Setter" routines for API context info */
|
||||
H5_DLL void H5CX_set_dxpl(hid_t dxpl_id);
|
||||
H5_DLL void H5CX_set_lapl(hid_t lapl_id);
|
||||
H5_DLL herr_t H5CX_set_apl(hid_t *acspl_id, const H5P_libclass_t *libclass,
|
||||
hid_t loc_id, hbool_t is_collective);
|
||||
H5_DLL herr_t H5CX_set_loc(hid_t loc_id);
|
||||
|
||||
/* "Getter" routines for API context info */
|
||||
H5_DLL hid_t H5CX_get_dxpl(void);
|
||||
H5_DLL hid_t H5CX_get_lapl(void);
|
||||
H5_DLL haddr_t H5CX_get_tag(void);
|
||||
H5_DLL H5AC_ring_t H5CX_get_ring(void);
|
||||
#ifdef H5_HAVE_PARALLEL
|
||||
H5_DLL hbool_t H5CX_get_coll_metadata_read(void);
|
||||
H5_DLL herr_t H5CX_get_mpi_coll_datatypes(MPI_Datatype *btype, MPI_Datatype *ftype);
|
||||
H5_DLL hbool_t H5CX_get_mpi_file_flushing(void);
|
||||
#endif /* H5_HAVE_PARALLEL */
|
||||
|
||||
/* "Getter" routines for DXPL properties cached in API context */
|
||||
H5_DLL herr_t H5CX_get_btree_split_ratios(double split_ratio[3]);
|
||||
H5_DLL herr_t H5CX_get_max_temp_buf(size_t *max_temp_buf);
|
||||
H5_DLL herr_t H5CX_get_tconv_buf(void **tconv_buf);
|
||||
H5_DLL herr_t H5CX_get_bkgr_buf(void **bkgr_buf);
|
||||
H5_DLL herr_t H5CX_get_bkgr_buf_type(H5T_bkg_t *bkgr_buf_type);
|
||||
H5_DLL herr_t H5CX_get_vec_size(size_t *vec_size);
|
||||
#ifdef H5_HAVE_PARALLEL
|
||||
H5_DLL herr_t H5CX_get_io_xfer_mode(H5FD_mpio_xfer_t *io_xfer_mode);
|
||||
H5_DLL herr_t H5CX_get_mpio_coll_opt(H5FD_mpio_collective_opt_t *mpio_coll_opt);
|
||||
H5_DLL herr_t H5CX_get_mpio_local_no_coll_cause(uint32_t *mpio_local_no_coll_cause);
|
||||
H5_DLL herr_t H5CX_get_mpio_global_no_coll_cause(uint32_t *mpio_global_no_coll_cause);
|
||||
H5_DLL herr_t H5CX_get_mpio_chunk_opt_mode(H5FD_mpio_chunk_opt_t *mpio_chunk_opt_mode);
|
||||
H5_DLL herr_t H5CX_get_mpio_chunk_opt_num(unsigned *mpio_chunk_opt_num);
|
||||
H5_DLL herr_t H5CX_get_mpio_chunk_opt_ratio(unsigned *mpio_chunk_opt_ratio);
|
||||
#endif /* H5_HAVE_PARALLEL */
|
||||
H5_DLL herr_t H5CX_get_err_detect(H5Z_EDC_t *err_detect);
|
||||
H5_DLL herr_t H5CX_get_filter_cb(H5Z_cb_t *filter_cb);
|
||||
H5_DLL herr_t H5CX_get_data_transform(H5Z_data_xform_t **data_transform);
|
||||
H5_DLL herr_t H5CX_get_vlen_alloc_info(H5T_vlen_alloc_info_t *vl_alloc_info);
|
||||
H5_DLL herr_t H5CX_get_dcr_flag(hbool_t *direct_read);
|
||||
H5_DLL herr_t H5CX_get_dcr_offset(hsize_t **direct_offset);
|
||||
H5_DLL herr_t H5CX_get_dcw_flag(hbool_t *direct_write);
|
||||
H5_DLL herr_t H5CX_get_dcw_filters(uint32_t *direct_filters);
|
||||
H5_DLL herr_t H5CX_get_dcw_offset(hsize_t **direct_offset);
|
||||
H5_DLL herr_t H5CX_get_dcw_datasize(uint32_t *direct_datasize);
|
||||
H5_DLL herr_t H5CX_get_dt_conv_cb(H5T_conv_cb_t *cb_struct);
|
||||
|
||||
/* "Getter" routines for LAPL properties cached in API context */
|
||||
H5_DLL herr_t H5CX_get_nlinks(size_t *nlinks);
|
||||
|
||||
/* "Setter" routines for API context info */
|
||||
H5_DLL void H5CX_set_tag(haddr_t tag);
|
||||
H5_DLL void H5CX_set_ring(H5AC_ring_t ring);
|
||||
#ifdef H5_HAVE_PARALLEL
|
||||
H5_DLL void H5CX_set_coll_metadata_read(hbool_t cmdr);
|
||||
H5_DLL herr_t H5CX_set_mpi_coll_datatypes(MPI_Datatype btype, MPI_Datatype ftype);
|
||||
H5_DLL herr_t H5CX_set_mpio_coll_opt(H5FD_mpio_collective_opt_t mpio_coll_opt);
|
||||
H5_DLL void H5CX_set_mpi_file_flushing(hbool_t flushing);
|
||||
#endif /* H5_HAVE_PARALLEL */
|
||||
|
||||
/* "Setter" routines for DXPL properties cached in API context */
|
||||
#ifdef H5_HAVE_PARALLEL
|
||||
H5_DLL herr_t H5CX_set_io_xfer_mode(H5FD_mpio_xfer_t io_xfer_mode);
|
||||
#endif /* H5_HAVE_PARALLEL */
|
||||
H5_DLL herr_t H5CX_set_vlen_alloc_info(H5MM_allocate_t alloc_func,
|
||||
void *alloc_info, H5MM_free_t free_func, void *free_info);
|
||||
|
||||
/* "Setter" routines for LAPL properties cached in API context */
|
||||
H5_DLL herr_t H5CX_set_nlinks(size_t nlinks);
|
||||
|
||||
/* "Setter" routines for cached DXPL properties that must be returned to application */
|
||||
H5_DLL void H5CX_set_dcr_filters(uint32_t direct_filters);
|
||||
#ifdef H5_HAVE_PARALLEL
|
||||
H5_DLL void H5CX_set_mpio_actual_chunk_opt(H5D_mpio_actual_chunk_opt_mode_t chunk_opt);
|
||||
H5_DLL void H5CX_set_mpio_actual_io_mode(H5D_mpio_actual_io_mode_t actual_io_mode);
|
||||
H5_DLL void H5CX_set_mpio_local_no_coll_cause(uint32_t mpio_local_no_coll_cause);
|
||||
H5_DLL void H5CX_set_mpio_global_no_coll_cause(uint32_t mpio_global_no_coll_cause);
|
||||
#ifdef H5_HAVE_INSTRUMENTED_LIBRARY
|
||||
H5_DLL herr_t H5CX_test_set_mpio_coll_chunk_link_hard(int mpio_coll_chunk_link_hard);
|
||||
H5_DLL herr_t H5CX_test_set_mpio_coll_chunk_multi_hard(int mpio_coll_chunk_multi_hard);
|
||||
H5_DLL herr_t H5CX_test_set_mpio_coll_chunk_link_num_true(int mpio_coll_chunk_link_num_true);
|
||||
H5_DLL herr_t H5CX_test_set_mpio_coll_chunk_link_num_false(int mpio_coll_chunk_link_num_false);
|
||||
H5_DLL herr_t H5CX_test_set_mpio_coll_chunk_multi_ratio_coll(int mpio_coll_chunk_multi_ratio_coll);
|
||||
H5_DLL herr_t H5CX_test_set_mpio_coll_chunk_multi_ratio_ind(int mpio_coll_chunk_multi_ratio_ind);
|
||||
#endif /* H5_HAVE_INSTRUMENTED_LIBRARY */
|
||||
#endif /* H5_HAVE_PARALLEL */
|
||||
|
||||
#endif /* _H5CXprivate_H */
|
||||
|
@ -64,15 +64,15 @@ static void * H5C__epoch_marker_deserialize(const void * image_ptr,
|
||||
size_t len, void * udata, hbool_t * dirty_ptr);
|
||||
static herr_t H5C__epoch_marker_image_len(const void * thing,
|
||||
size_t *image_len_ptr);
|
||||
static herr_t H5C__epoch_marker_pre_serialize(H5F_t *f,
|
||||
hid_t dxpl_id, void * thing, haddr_t addr, size_t len,
|
||||
haddr_t * new_addr_ptr, size_t * new_len_ptr, unsigned * flags_ptr);
|
||||
static herr_t H5C__epoch_marker_pre_serialize(H5F_t *f, void *thing,
|
||||
haddr_t addr, size_t len, haddr_t *new_addr_ptr, size_t *new_len_ptr,
|
||||
unsigned *flags_ptr);
|
||||
static herr_t H5C__epoch_marker_serialize(const H5F_t *f,
|
||||
void * image_ptr, size_t len, void * thing);
|
||||
static herr_t H5C__epoch_marker_notify(H5C_notify_action_t action, void *thing);
|
||||
static herr_t H5C__epoch_marker_free_icr(void * thing);
|
||||
static herr_t H5C__epoch_marker_fsf_size(const void H5_ATTR_UNUSED * thing,
|
||||
size_t H5_ATTR_UNUSED * fsf_size_ptr);
|
||||
hsize_t H5_ATTR_UNUSED * fsf_size_ptr);
|
||||
|
||||
|
||||
/*********************/
|
||||
@ -180,7 +180,7 @@ H5C__epoch_marker_image_len(const void H5_ATTR_UNUSED *thing,
|
||||
|
||||
|
||||
static herr_t
|
||||
H5C__epoch_marker_pre_serialize(H5F_t H5_ATTR_UNUSED *f, hid_t H5_ATTR_UNUSED dxpl_id,
|
||||
H5C__epoch_marker_pre_serialize(H5F_t H5_ATTR_UNUSED *f,
|
||||
void H5_ATTR_UNUSED *thing, haddr_t H5_ATTR_UNUSED addr, size_t H5_ATTR_UNUSED len,
|
||||
haddr_t H5_ATTR_UNUSED *new_addr_ptr, size_t H5_ATTR_UNUSED *new_len_ptr,
|
||||
unsigned H5_ATTR_UNUSED *flags_ptr)
|
||||
@ -229,7 +229,7 @@ H5C__epoch_marker_free_icr(void H5_ATTR_UNUSED * thing)
|
||||
|
||||
|
||||
static herr_t
|
||||
H5C__epoch_marker_fsf_size(const void H5_ATTR_UNUSED * thing, size_t H5_ATTR_UNUSED *fsf_size_ptr)
|
||||
H5C__epoch_marker_fsf_size(const void H5_ATTR_UNUSED * thing, hsize_t H5_ATTR_UNUSED *fsf_size_ptr)
|
||||
{
|
||||
FUNC_ENTER_STATIC_NOERR /* Yes, even though this pushes an error on the stack */
|
||||
|
||||
|
@ -114,14 +114,12 @@ static void H5C__prep_for_file_close__compute_fd_heights_real(
|
||||
static herr_t H5C__prep_for_file_close__setup_image_entries_array(H5C_t *cache_ptr);
|
||||
static herr_t H5C__prep_for_file_close__scan_entries(const H5F_t *f,
|
||||
H5C_t *cache_ptr);
|
||||
static herr_t H5C__reconstruct_cache_contents(H5F_t *f, hid_t dxpl_id,
|
||||
H5C_t *cache_ptr);
|
||||
static herr_t H5C__reconstruct_cache_contents(H5F_t *f, H5C_t *cache_ptr);
|
||||
static H5C_cache_entry_t *H5C__reconstruct_cache_entry(const H5F_t *f,
|
||||
H5C_t *cache_ptr, const uint8_t **buf);
|
||||
static herr_t H5C__write_cache_image_superblock_msg(H5F_t *f, hid_t dxpl_id,
|
||||
hbool_t create);
|
||||
static herr_t H5C__read_cache_image(H5F_t * f, hid_t dxpl_id, H5C_t *cache_ptr);
|
||||
static herr_t H5C__write_cache_image(H5F_t *f, hid_t dxpl_id, const H5C_t *cache_ptr);
|
||||
static herr_t H5C__write_cache_image_superblock_msg(H5F_t *f, hbool_t create);
|
||||
static herr_t H5C__read_cache_image(H5F_t * f, H5C_t *cache_ptr);
|
||||
static herr_t H5C__write_cache_image(H5F_t *f, const H5C_t *cache_ptr);
|
||||
static herr_t H5C__construct_cache_image_buffer(H5F_t *f, H5C_t *cache_ptr);
|
||||
static herr_t H5C__free_image_entries_array(H5C_t *cache_ptr);
|
||||
|
||||
@ -391,7 +389,7 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
herr_t
|
||||
H5C__generate_cache_image(H5F_t *f, hid_t dxpl_id, H5C_t *cache_ptr)
|
||||
H5C__generate_cache_image(H5F_t *f, H5C_t *cache_ptr)
|
||||
{
|
||||
herr_t ret_value = SUCCEED; /* Return value */
|
||||
|
||||
@ -414,7 +412,7 @@ H5C__generate_cache_image(H5F_t *f, hid_t dxpl_id, H5C_t *cache_ptr)
|
||||
|
||||
/* Write cache image block if so configured */
|
||||
if(cache_ptr->image_ctl.flags & H5C_CI__GEN_MDC_IMAGE_BLK) {
|
||||
if(H5C__write_cache_image(f, dxpl_id, cache_ptr) < 0)
|
||||
if(H5C__write_cache_image(f, cache_ptr) < 0)
|
||||
HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "Can't write metadata cache image block to file")
|
||||
|
||||
H5C__UPDATE_STATS_FOR_CACHE_IMAGE_CREATE(cache_ptr);
|
||||
@ -466,7 +464,7 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
herr_t
|
||||
H5C__deserialize_prefetched_entry(H5F_t *f, hid_t dxpl_id, H5C_t *cache_ptr,
|
||||
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)
|
||||
{
|
||||
@ -678,7 +676,7 @@ H5C__deserialize_prefetched_entry(H5F_t *f, hid_t dxpl_id, H5C_t *cache_ptr,
|
||||
H5C__RESET_CACHE_ENTRY_STATS(ds_entry_ptr);
|
||||
|
||||
/* Apply to to the newly deserialized entry */
|
||||
if(H5C__tag_entry(cache_ptr, ds_entry_ptr, dxpl_id) < 0)
|
||||
if(H5C__tag_entry(cache_ptr, ds_entry_ptr) < 0)
|
||||
HGOTO_ERROR(H5E_CACHE, H5E_CANTTAG, FAIL, "Cannot tag metadata entry")
|
||||
|
||||
/* We have successfully deserialized the prefetched entry.
|
||||
@ -707,7 +705,7 @@ H5C__deserialize_prefetched_entry(H5F_t *f, hid_t dxpl_id, H5C_t *cache_ptr,
|
||||
flush_flags |= H5C__DEL_FROM_SLIST_ON_DESTROY_FLAG;
|
||||
} /* end if */
|
||||
|
||||
if(H5C__flush_single_entry(f, dxpl_id, pf_entry_ptr, flush_flags) < 0)
|
||||
if(H5C__flush_single_entry(f, pf_entry_ptr, flush_flags) < 0)
|
||||
HGOTO_ERROR(H5E_CACHE, H5E_CANTEXPUNGE, FAIL, "can't expunge prefetched entry")
|
||||
|
||||
#ifndef NDEGUG /* verify deletion */
|
||||
@ -886,7 +884,7 @@ H5C__free_image_entries_array(H5C_t * cache_ptr)
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
herr_t
|
||||
H5C_force_cache_image_load(H5F_t *f, hid_t dxpl_id)
|
||||
H5C_force_cache_image_load(H5F_t *f)
|
||||
{
|
||||
H5C_t *cache_ptr;
|
||||
herr_t ret_value = SUCCEED; /* Return value */
|
||||
@ -904,7 +902,7 @@ H5C_force_cache_image_load(H5F_t *f, hid_t dxpl_id)
|
||||
/* Load the cache image, if requested */
|
||||
if(cache_ptr->load_image) {
|
||||
cache_ptr->load_image = FALSE;
|
||||
if(H5C__load_cache_image(f, dxpl_id) < 0)
|
||||
if(H5C__load_cache_image(f) < 0)
|
||||
HGOTO_ERROR(H5E_CACHE, H5E_CANTLOAD, FAIL, "can't load cache image")
|
||||
} /* end if */
|
||||
|
||||
@ -1034,8 +1032,8 @@ done:
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
herr_t
|
||||
H5C__read_cache_image(H5F_t *f, hid_t dxpl_id, H5C_t *cache_ptr)
|
||||
static herr_t
|
||||
H5C__read_cache_image(H5F_t *f, H5C_t *cache_ptr)
|
||||
{
|
||||
herr_t ret_value = SUCCEED; /* Return value */
|
||||
|
||||
@ -1060,12 +1058,9 @@ H5C__read_cache_image(H5F_t *f, hid_t dxpl_id, H5C_t *cache_ptr)
|
||||
#endif /* H5_HAVE_PARALLEL */
|
||||
|
||||
/* Read the buffer (if serial access, or rank 0 of parallel access) */
|
||||
if ( H5F_block_read(f, H5FD_MEM_SUPER, cache_ptr->image_addr,
|
||||
cache_ptr->image_len, dxpl_id,
|
||||
cache_ptr->image_buffer) < 0)
|
||||
|
||||
HGOTO_ERROR(H5E_CACHE, H5E_READERROR, FAIL, \
|
||||
"Can't read metadata cache image block")
|
||||
if(H5F_block_read(f, H5FD_MEM_SUPER, cache_ptr->image_addr,
|
||||
cache_ptr->image_len, cache_ptr->image_buffer) < 0)
|
||||
HGOTO_ERROR(H5E_CACHE, H5E_READERROR, FAIL, "Can't read metadata cache image block")
|
||||
|
||||
H5C__UPDATE_STATS_FOR_CACHE_IMAGE_READ(cache_ptr)
|
||||
|
||||
@ -1097,9 +1092,7 @@ H5C__read_cache_image(H5F_t *f, hid_t dxpl_id, H5C_t *cache_ptr)
|
||||
#endif /* H5_HAVE_PARALLEL */
|
||||
|
||||
done:
|
||||
|
||||
FUNC_LEAVE_NOAPI(ret_value)
|
||||
|
||||
} /* H5C__read_cache_image() */
|
||||
|
||||
|
||||
@ -1121,7 +1114,7 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
herr_t
|
||||
H5C__load_cache_image(H5F_t *f, hid_t dxpl_id)
|
||||
H5C__load_cache_image(H5F_t *f)
|
||||
{
|
||||
H5C_t * cache_ptr;
|
||||
herr_t ret_value = SUCCEED; /* Return value */
|
||||
@ -1154,11 +1147,11 @@ H5C__load_cache_image(H5F_t *f, hid_t dxpl_id)
|
||||
HGOTO_ERROR(H5E_CACHE, H5E_CANTALLOC, FAIL, "memory allocation failed for cache image buffer")
|
||||
|
||||
/* Load the image from file */
|
||||
if(H5C__read_cache_image(f, dxpl_id, cache_ptr) < 0)
|
||||
if(H5C__read_cache_image(f, cache_ptr) < 0)
|
||||
HGOTO_ERROR(H5E_CACHE, H5E_READERROR, FAIL, "Can't read metadata cache image block")
|
||||
|
||||
/* Reconstruct cache contents, from image */
|
||||
if(H5C__reconstruct_cache_contents(f, dxpl_id, cache_ptr) < 0)
|
||||
if(H5C__reconstruct_cache_contents(f, cache_ptr) < 0)
|
||||
HGOTO_ERROR(H5E_CACHE, H5E_CANTDECODE, FAIL, "Can't reconstruct cache contents from image block")
|
||||
|
||||
/* Free the image buffer */
|
||||
@ -1174,7 +1167,7 @@ H5C__load_cache_image(H5F_t *f, hid_t dxpl_id)
|
||||
|
||||
/* If directed, free the on disk metadata cache image */
|
||||
if(cache_ptr->delete_image) {
|
||||
if(H5F_super_ext_remove_msg(f, dxpl_id, H5O_MDCI_MSG_ID) < 0)
|
||||
if(H5F__super_ext_remove_msg(f, H5O_MDCI_MSG_ID) < 0)
|
||||
HGOTO_ERROR(H5E_CACHE, H5E_CANTREMOVE, FAIL, "can't remove metadata cache image message from superblock extension")
|
||||
|
||||
/* Reset image block values */
|
||||
@ -1343,7 +1336,7 @@ H5C__image_entry_cmp(const void *_entry1, const void *_entry2)
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
herr_t
|
||||
H5C__prep_image_for_file_close(H5F_t *f, hid_t dxpl_id, hbool_t *image_generated)
|
||||
H5C__prep_image_for_file_close(H5F_t *f, hbool_t *image_generated)
|
||||
{
|
||||
H5C_t * cache_ptr = NULL;
|
||||
haddr_t eoa_frag_addr = HADDR_UNDEF;
|
||||
@ -1367,7 +1360,7 @@ H5C__prep_image_for_file_close(H5F_t *f, hid_t dxpl_id, hbool_t *image_generated
|
||||
*/
|
||||
if(cache_ptr->load_image) {
|
||||
cache_ptr->load_image = FALSE;
|
||||
if(H5C__load_cache_image(f, dxpl_id) < 0)
|
||||
if(H5C__load_cache_image(f) < 0)
|
||||
HGOTO_ERROR(H5E_CACHE, H5E_CANTLOAD, FAIL, "can't load cache image")
|
||||
} /* end if */
|
||||
|
||||
@ -1411,11 +1404,11 @@ H5C__prep_image_for_file_close(H5F_t *f, hid_t dxpl_id, hbool_t *image_generated
|
||||
* cache_ptr->image_ctl.flags.
|
||||
*/
|
||||
if(cache_ptr->image_ctl.flags & H5C_CI__GEN_MDCI_SBE_MESG)
|
||||
if(H5C__write_cache_image_superblock_msg(f, dxpl_id, TRUE) < 0)
|
||||
if(H5C__write_cache_image_superblock_msg(f, TRUE) < 0)
|
||||
HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "creation of cache image SB mesg failed.")
|
||||
|
||||
/* Serialize the cache */
|
||||
if(H5C__serialize_cache(f, dxpl_id) < 0)
|
||||
if(H5C__serialize_cache(f) < 0)
|
||||
HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "serialization of the cache failed")
|
||||
|
||||
/* Scan the cache and record data needed to construct the
|
||||
@ -1473,7 +1466,7 @@ H5C__prep_image_for_file_close(H5F_t *f, hid_t dxpl_id, hbool_t *image_generated
|
||||
* Note that we allocate the cache image directly from the file
|
||||
* driver so as to avoid unsettling the free space managers.
|
||||
*/
|
||||
if(HADDR_UNDEF == (cache_ptr->image_addr = H5FD_alloc(f->shared->lf, dxpl_id, H5FD_MEM_SUPER, f,
|
||||
if(HADDR_UNDEF == (cache_ptr->image_addr = H5FD_alloc(f->shared->lf, H5FD_MEM_SUPER, f,
|
||||
(hsize_t)p0_image_len, &eoa_frag_addr, &eoa_frag_size)))
|
||||
HGOTO_ERROR(H5E_CACHE, H5E_NOSPACE, FAIL, "can't allocate file space for metadata cache image")
|
||||
} /* end if */
|
||||
@ -1483,7 +1476,7 @@ H5C__prep_image_for_file_close(H5F_t *f, hid_t dxpl_id, hbool_t *image_generated
|
||||
* this space directly from the file driver so as to avoid
|
||||
* unsettling the free space managers.
|
||||
*/
|
||||
if(HADDR_UNDEF == (cache_ptr->image_addr = H5FD_alloc(f->shared->lf, dxpl_id, H5FD_MEM_SUPER, f,
|
||||
if(HADDR_UNDEF == (cache_ptr->image_addr = H5FD_alloc(f->shared->lf, H5FD_MEM_SUPER, f,
|
||||
(hsize_t)(cache_ptr->image_data_len), &eoa_frag_addr, &eoa_frag_size)))
|
||||
HGOTO_ERROR(H5E_CACHE, H5E_NOSPACE, FAIL, "can't allocate file space for metadata cache image")
|
||||
|
||||
@ -1526,7 +1519,7 @@ H5C__prep_image_for_file_close(H5F_t *f, hid_t dxpl_id, hbool_t *image_generated
|
||||
* cache_ptr->image_ctl.flags.
|
||||
*/
|
||||
if(cache_ptr->image_ctl.flags & H5C_CI__GEN_MDC_IMAGE_BLK)
|
||||
if(H5C__write_cache_image_superblock_msg(f, dxpl_id, FALSE) < 0)
|
||||
if(H5C__write_cache_image_superblock_msg(f, FALSE) < 0)
|
||||
HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "update of cache image SB mesg failed")
|
||||
|
||||
/* At this point:
|
||||
@ -1580,7 +1573,7 @@ H5C__prep_image_for_file_close(H5F_t *f, hid_t dxpl_id, hbool_t *image_generated
|
||||
* cache_ptr->image_ctl.flags.
|
||||
*/
|
||||
if(cache_ptr->image_ctl.flags & H5C_CI__GEN_MDC_IMAGE_BLK)
|
||||
if(H5F_super_ext_remove_msg(f, dxpl_id, H5O_MDCI_MSG_ID) < 0)
|
||||
if(H5F__super_ext_remove_msg(f, H5O_MDCI_MSG_ID) < 0)
|
||||
HGOTO_ERROR(H5E_CACHE, H5E_CANTREMOVE, FAIL, "can't remove MDC image msg from superblock ext")
|
||||
|
||||
cache_ptr->image_ctl.generate_image = FALSE;
|
||||
@ -3096,7 +3089,7 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static herr_t
|
||||
H5C__reconstruct_cache_contents(H5F_t *f, hid_t dxpl_id, H5C_t *cache_ptr)
|
||||
H5C__reconstruct_cache_contents(H5F_t *f, H5C_t *cache_ptr)
|
||||
{
|
||||
H5C_cache_entry_t * pf_entry_ptr; /* Pointer to prefetched entry */
|
||||
H5C_cache_entry_t * parent_ptr; /* Pointer to parent of prefetched entry */
|
||||
@ -3278,7 +3271,7 @@ H5C__reconstruct_cache_contents(H5F_t *f, hid_t dxpl_id, H5C_t *cache_ptr)
|
||||
else
|
||||
write_permitted = cache_ptr->write_permitted;
|
||||
|
||||
if(H5C__make_space_in_cache(f, dxpl_id, 0, write_permitted) < 0)
|
||||
if(H5C__make_space_in_cache(f, 0, write_permitted) < 0)
|
||||
HGOTO_ERROR(H5E_CACHE, H5E_CANTPROTECT, FAIL, "H5C__make_space_in_cache failed")
|
||||
} /* end if */
|
||||
|
||||
@ -3479,7 +3472,7 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static herr_t
|
||||
H5C__write_cache_image_superblock_msg(H5F_t *f, hid_t dxpl_id, hbool_t create)
|
||||
H5C__write_cache_image_superblock_msg(H5F_t *f, hbool_t create)
|
||||
{
|
||||
H5C_t * cache_ptr;
|
||||
H5O_mdci_t mdci_msg; /* metadata cache image message */
|
||||
@ -3517,7 +3510,7 @@ H5C__write_cache_image_superblock_msg(H5F_t *f, hid_t dxpl_id, hbool_t create)
|
||||
mdci_msg.size = cache_ptr->image_len;
|
||||
|
||||
/* Write metadata cache image message to superblock extension */
|
||||
if(H5F_super_ext_write_msg(f, dxpl_id, H5O_MDCI_MSG_ID, &mdci_msg, create, mesg_flags) < 0)
|
||||
if(H5F__super_ext_write_msg(f, H5O_MDCI_MSG_ID, &mdci_msg, create, mesg_flags) < 0)
|
||||
HGOTO_ERROR(H5E_CACHE, H5E_WRITEERROR, FAIL, "can't write metadata cache image message to superblock extension")
|
||||
|
||||
done:
|
||||
@ -3539,7 +3532,7 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static herr_t
|
||||
H5C__write_cache_image(H5F_t *f, hid_t dxpl_id, const H5C_t *cache_ptr)
|
||||
H5C__write_cache_image(H5F_t *f, const H5C_t *cache_ptr)
|
||||
{
|
||||
herr_t ret_value = SUCCEED; /* Return value */
|
||||
|
||||
@ -3561,7 +3554,7 @@ H5C__write_cache_image(H5F_t *f, hid_t dxpl_id, const H5C_t *cache_ptr)
|
||||
#endif /* H5_HAVE_PARALLEL */
|
||||
|
||||
/* Write the buffer (if serial access, or rank 0 for parallel access) */
|
||||
if(H5F_block_write(f, H5FD_MEM_SUPER, cache_ptr->image_addr, cache_ptr->image_len, dxpl_id, cache_ptr->image_buffer) < 0)
|
||||
if(H5F_block_write(f, H5FD_MEM_SUPER, cache_ptr->image_addr, cache_ptr->image_len, cache_ptr->image_buffer) < 0)
|
||||
HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "can't write metadata cache image block to file")
|
||||
#ifdef H5_HAVE_PARALLEL
|
||||
} /* end if */
|
||||
|
139
src/H5Cmpio.c
139
src/H5Cmpio.c
@ -37,14 +37,11 @@
|
||||
#include "H5private.h" /* Generic Functions */
|
||||
#include "H5ACprivate.h" /* Metadata cache */
|
||||
#include "H5Cpkg.h" /* Cache */
|
||||
#include "H5Dprivate.h" /* Datasets */
|
||||
#include "H5CXprivate.h" /* API Contexts */
|
||||
#include "H5Eprivate.h" /* Error handling */
|
||||
#include "H5Fpkg.h" /* Files */
|
||||
#include "H5FDprivate.h" /* File drivers */
|
||||
#include "H5FLprivate.h" /* Free Lists */
|
||||
#include "H5Iprivate.h" /* IDs */
|
||||
#include "H5MMprivate.h" /* Memory management */
|
||||
#include "H5Pprivate.h" /* Property lists */
|
||||
|
||||
|
||||
#ifdef H5_HAVE_PARALLEL
|
||||
@ -62,12 +59,11 @@
|
||||
/********************/
|
||||
/* Local Prototypes */
|
||||
/********************/
|
||||
static herr_t H5C__collective_write(H5F_t *f, hid_t dxpl_id);
|
||||
static herr_t H5C__flush_candidate_entries(H5F_t *f, hid_t dxpl_id,
|
||||
unsigned entries_to_flush[H5C_RING_NTYPES],
|
||||
static herr_t H5C__collective_write(H5F_t *f);
|
||||
static herr_t H5C__flush_candidate_entries(H5F_t *f, unsigned entries_to_flush[H5C_RING_NTYPES],
|
||||
unsigned entries_to_clear[H5C_RING_NTYPES]);
|
||||
static herr_t H5C__flush_candidates_in_ring(H5F_t *f, hid_t dxpl_id,
|
||||
H5C_ring_t ring, unsigned entries_to_flush, unsigned entries_to_clear);
|
||||
static herr_t H5C__flush_candidates_in_ring(H5F_t *f, H5C_ring_t ring,
|
||||
unsigned entries_to_flush, unsigned entries_to_clear);
|
||||
|
||||
|
||||
/*********************/
|
||||
@ -171,7 +167,6 @@ static herr_t H5C__flush_candidates_in_ring(H5F_t *f, hid_t dxpl_id,
|
||||
*/
|
||||
herr_t
|
||||
H5C_apply_candidate_list(H5F_t * f,
|
||||
hid_t dxpl_id,
|
||||
H5C_t * cache_ptr,
|
||||
unsigned num_candidates,
|
||||
haddr_t * candidates_list_ptr,
|
||||
@ -387,7 +382,7 @@ H5C_apply_candidate_list(H5F_t * f,
|
||||
* If we don't do this, my experiments indicate that we will have a
|
||||
* noticably poorer hit ratio as a result.
|
||||
*/
|
||||
if(H5C__flush_candidate_entries(f, dxpl_id, entries_to_flush, entries_to_clear) < 0)
|
||||
if(H5C__flush_candidate_entries(f, entries_to_flush, entries_to_clear) < 0)
|
||||
HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "flush candidates failed")
|
||||
|
||||
/* If we've deferred writing to do it collectively, take care of that now */
|
||||
@ -396,7 +391,7 @@ H5C_apply_candidate_list(H5F_t * f,
|
||||
HDassert(cache_ptr->coll_write_list);
|
||||
|
||||
/* Write collective list */
|
||||
if(H5C__collective_write(f, dxpl_id) < 0)
|
||||
if(H5C__collective_write(f) < 0)
|
||||
HGOTO_ERROR(H5E_CACHE, H5E_WRITEERROR, FAIL, "can't write metadata collectively")
|
||||
} /* end if */
|
||||
|
||||
@ -644,7 +639,6 @@ done:
|
||||
*/
|
||||
herr_t
|
||||
H5C_mark_entries_as_clean(H5F_t * f,
|
||||
hid_t dxpl_id,
|
||||
unsigned ce_array_len,
|
||||
haddr_t * ce_array_ptr)
|
||||
{
|
||||
@ -788,7 +782,7 @@ H5C_mark_entries_as_clean(H5F_t * f,
|
||||
entry_ptr = entry_ptr->prev;
|
||||
entries_cleared++;
|
||||
|
||||
if(H5C__flush_single_entry(f, dxpl_id, clear_ptr,
|
||||
if(H5C__flush_single_entry(f, clear_ptr,
|
||||
(H5C__FLUSH_CLEAR_ONLY_FLAG | H5C__GENERATE_IMAGE_FLAG | H5C__UPDATE_PAGE_BUFFER_FLAG)) < 0)
|
||||
HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "can't clear entry")
|
||||
} /* end if */
|
||||
@ -818,7 +812,7 @@ H5C_mark_entries_as_clean(H5F_t * f,
|
||||
pinned_entries_cleared++;
|
||||
progress = TRUE;
|
||||
|
||||
if(H5C__flush_single_entry(f, dxpl_id, clear_ptr,
|
||||
if(H5C__flush_single_entry(f, clear_ptr,
|
||||
(H5C__FLUSH_CLEAR_ONLY_FLAG | H5C__GENERATE_IMAGE_FLAG | H5C__UPDATE_PAGE_BUFFER_FLAG)) < 0)
|
||||
HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "can't clear entry")
|
||||
} /* end if */
|
||||
@ -922,10 +916,9 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static herr_t
|
||||
H5C__collective_write(H5F_t *f, hid_t dxpl_id)
|
||||
H5C__collective_write(H5F_t *f)
|
||||
{
|
||||
H5AC_t *cache_ptr;
|
||||
H5P_genplist_t *plist = NULL;
|
||||
H5FD_mpio_xfer_t orig_xfer_mode = H5FD_MPIO_COLLECTIVE;
|
||||
int count;
|
||||
int *length_array = NULL;
|
||||
@ -947,12 +940,8 @@ H5C__collective_write(H5F_t *f, hid_t dxpl_id)
|
||||
HDassert(cache_ptr->coll_write_list != NULL);
|
||||
|
||||
/* Get original transfer mode */
|
||||
if(NULL == (plist = (H5P_genplist_t *)H5I_object(dxpl_id)))
|
||||
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, \
|
||||
"not a data transfer property list")
|
||||
|
||||
if(H5P_get(plist, H5D_XFER_IO_XFER_MODE_NAME, &orig_xfer_mode) < 0)
|
||||
HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set MPI-I/O property")
|
||||
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")
|
||||
|
||||
/* Get number of entries in collective write list */
|
||||
count = (int)H5SL_count(cache_ptr->coll_write_list);
|
||||
@ -964,35 +953,23 @@ H5C__collective_write(H5F_t *f, hid_t dxpl_id)
|
||||
void *base_buf;
|
||||
int i;
|
||||
|
||||
if(H5P_set(plist, H5D_XFER_IO_XFER_MODE_NAME, &xfer_mode) < 0)
|
||||
HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, \
|
||||
"can't set MPI-I/O property")
|
||||
/* 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_RESOURCE, H5E_CANTALLOC, FAIL, \
|
||||
"memory allocation failed for collective write table length array")
|
||||
|
||||
if ( NULL == (buf_array =
|
||||
(MPI_Aint *)H5MM_malloc((size_t)count * sizeof(MPI_Aint))) )
|
||||
|
||||
HGOTO_ERROR(H5E_RESOURCE, H5E_CANTALLOC, FAIL, \
|
||||
"memory allocation failed for collective buf table length array")
|
||||
|
||||
if(NULL == (offset_array =
|
||||
(MPI_Aint *)H5MM_malloc((size_t)count * sizeof(MPI_Aint))) )
|
||||
|
||||
HGOTO_ERROR(H5E_RESOURCE, H5E_CANTALLOC, FAIL, \
|
||||
"memory allocation failed for collective offset table length array")
|
||||
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")
|
||||
if(NULL == (buf_array = (MPI_Aint *)H5MM_malloc((size_t)count * sizeof(MPI_Aint))) )
|
||||
HGOTO_ERROR(H5E_CACHE, H5E_CANTALLOC, FAIL, "memory allocation failed for collective buf table length array")
|
||||
if(NULL == (offset_array = (MPI_Aint *)H5MM_malloc((size_t)count * sizeof(MPI_Aint))) )
|
||||
HGOTO_ERROR(H5E_CACHE, H5E_CANTALLOC, FAIL, "memory allocation failed for collective offset table length array")
|
||||
|
||||
/* Fill arrays */
|
||||
node = H5SL_first(cache_ptr->coll_write_list);
|
||||
HDassert(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")
|
||||
HGOTO_ERROR(H5E_CACHE, H5E_NOTFOUND, FAIL, "can't retrieve skip list item")
|
||||
|
||||
/* Set up initial array position & buffer base address */
|
||||
length_array[0] = (int)entry_ptr->size;
|
||||
@ -1005,8 +982,7 @@ H5C__collective_write(H5F_t *f, hid_t dxpl_id)
|
||||
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")
|
||||
HGOTO_ERROR(H5E_CACHE, H5E_NOTFOUND, FAIL, "can't retrieve skip list item")
|
||||
|
||||
/* Set up array position */
|
||||
length_array[i] = (int)entry_ptr->size;
|
||||
@ -1019,10 +995,7 @@ H5C__collective_write(H5F_t *f, hid_t dxpl_id)
|
||||
} /* end while */
|
||||
|
||||
/* Create memory MPI type */
|
||||
if(MPI_SUCCESS != (mpi_code =
|
||||
MPI_Type_create_hindexed(count, length_array,
|
||||
buf_array, MPI_BYTE,
|
||||
&btype)))
|
||||
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;
|
||||
@ -1031,10 +1004,7 @@ H5C__collective_write(H5F_t *f, hid_t dxpl_id)
|
||||
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)))
|
||||
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;
|
||||
@ -1043,15 +1013,12 @@ H5C__collective_write(H5F_t *f, hid_t dxpl_id)
|
||||
HMPI_GOTO_ERROR(FAIL, "MPI_Type_commit failed", mpi_code)
|
||||
|
||||
/* Pass buf type, file type to the file driver */
|
||||
if(H5FD_mpi_setup_collective(dxpl_id, &btype, &ftype) < 0)
|
||||
HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, \
|
||||
"can't set MPI-I/O properties")
|
||||
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, dxpl_id, base_buf) < 0)
|
||||
HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, \
|
||||
"unable to write entries collectively")
|
||||
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")
|
||||
|
||||
} /* end if */
|
||||
else {
|
||||
@ -1061,43 +1028,35 @@ H5C__collective_write(H5F_t *f, hid_t dxpl_id)
|
||||
MPI_Info *info_p;
|
||||
MPI_Info info;
|
||||
|
||||
/* 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_FILE, H5E_CANTGET, FAIL, \
|
||||
"can't get mpi file handle")
|
||||
HGOTO_ERROR(H5E_CACHE, H5E_CANTGET, FAIL, "can't get mpi file handle")
|
||||
|
||||
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")
|
||||
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)))
|
||||
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)))
|
||||
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)))
|
||||
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)
|
||||
|
||||
} /* end else */
|
||||
|
||||
done:
|
||||
@ -1112,13 +1071,10 @@ done:
|
||||
if(ftype_created && MPI_SUCCESS != (mpi_code = MPI_Type_free(&ftype)))
|
||||
HMPI_DONE_ERROR(FAIL, "MPI_Type_free failed", mpi_code)
|
||||
|
||||
/* Reset dxpl */
|
||||
if(orig_xfer_mode != H5FD_MPIO_COLLECTIVE) {
|
||||
HDassert(plist);
|
||||
if(H5P_set(plist, H5D_XFER_IO_XFER_MODE_NAME, &orig_xfer_mode) < 0)
|
||||
HDONE_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, \
|
||||
"can't set MPI-I/O property")
|
||||
} /* end if */
|
||||
/* Reset transfer mode in API context, if changed */
|
||||
if(orig_xfer_mode != H5FD_MPIO_COLLECTIVE)
|
||||
if(H5CX_set_io_xfer_mode(orig_xfer_mode) < 0)
|
||||
HDONE_ERROR(H5E_CACHE, H5E_CANTSET, FAIL, "can't set MPI-I/O transfer mode")
|
||||
|
||||
FUNC_LEAVE_NOAPI(ret_value);
|
||||
} /* end H5C__collective_write() */
|
||||
@ -1163,8 +1119,7 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static herr_t
|
||||
H5C__flush_candidate_entries(H5F_t *f, hid_t dxpl_id,
|
||||
unsigned entries_to_flush[H5C_RING_NTYPES],
|
||||
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
|
||||
@ -1234,7 +1189,7 @@ H5C__flush_candidate_entries(H5F_t *f, hid_t dxpl_id,
|
||||
*/
|
||||
ring = H5C_RING_USER;
|
||||
while(ring < H5C_RING_NTYPES) {
|
||||
if(H5C__flush_candidates_in_ring(f, dxpl_id, ring, entries_to_flush[ring], entries_to_clear[ring]) < 0)
|
||||
if(H5C__flush_candidates_in_ring(f, ring, entries_to_flush[ring], entries_to_clear[ring]) < 0)
|
||||
HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "flush candidates in ring failed")
|
||||
|
||||
ring++;
|
||||
@ -1284,7 +1239,7 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static herr_t
|
||||
H5C__flush_candidates_in_ring(H5F_t *f, hid_t dxpl_id, H5C_ring_t ring,
|
||||
H5C__flush_candidates_in_ring(H5F_t *f, H5C_ring_t ring,
|
||||
unsigned entries_to_flush, unsigned entries_to_clear)
|
||||
{
|
||||
H5C_t * cache_ptr;
|
||||
@ -1413,7 +1368,7 @@ H5C__flush_candidates_in_ring(H5F_t *f, hid_t dxpl_id, H5C_ring_t ring,
|
||||
cache_ptr->entries_removed_counter = 0;
|
||||
cache_ptr->last_entry_removed_ptr = NULL;
|
||||
|
||||
if(H5C__flush_single_entry(f, dxpl_id, op_ptr, op_flags) < 0)
|
||||
if(H5C__flush_single_entry(f, op_ptr, op_flags) < 0)
|
||||
HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "can't flush entry")
|
||||
|
||||
if(cache_ptr->entries_removed_counter != 0
|
||||
@ -1551,7 +1506,7 @@ H5C__flush_candidates_in_ring(H5F_t *f, hid_t dxpl_id, H5C_ring_t ring,
|
||||
*
|
||||
* JRM -- 2/9/17
|
||||
*/
|
||||
if(H5C__flush_single_entry(f, dxpl_id, op_ptr, op_flags) < 0)
|
||||
if(H5C__flush_single_entry(f, op_ptr, op_flags) < 0)
|
||||
HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "can't flush entry")
|
||||
|
||||
if(cache_ptr->entries_removed_counter != 0
|
||||
|
30
src/H5Cpkg.h
30
src/H5Cpkg.h
@ -4922,31 +4922,29 @@ typedef int (*H5C_tag_iter_cb_t)(H5C_cache_entry_t *entry, void *ctx);
|
||||
/******************************/
|
||||
/* Package Private Prototypes */
|
||||
/******************************/
|
||||
H5_DLL herr_t H5C__prep_image_for_file_close(H5F_t *f, hid_t dxpl_id,
|
||||
hbool_t *image_generated);
|
||||
H5_DLL herr_t H5C__deserialize_prefetched_entry(H5F_t *f, hid_t dxpl_id,
|
||||
H5C_t * cache_ptr, H5C_cache_entry_t** entry_ptr_ptr,
|
||||
const H5C_class_t * type, haddr_t addr, void * udata);
|
||||
H5_DLL herr_t H5C__prep_image_for_file_close(H5F_t *f, hbool_t *image_generated);
|
||||
H5_DLL herr_t 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);
|
||||
|
||||
/* General routines */
|
||||
H5_DLL herr_t H5C__flush_single_entry(H5F_t *f, hid_t dxpl_id,
|
||||
H5C_cache_entry_t *entry_ptr, unsigned flags);
|
||||
H5_DLL herr_t H5C__generate_cache_image(H5F_t *f, hid_t dxpl_id, H5C_t *cache_ptr);
|
||||
H5_DLL herr_t H5C__load_cache_image(H5F_t *f, hid_t dxpl_id);
|
||||
H5_DLL herr_t H5C__flush_single_entry(H5F_t *f, H5C_cache_entry_t *entry_ptr,
|
||||
unsigned flags);
|
||||
H5_DLL herr_t H5C__generate_cache_image(H5F_t *f, H5C_t *cache_ptr);
|
||||
H5_DLL herr_t H5C__load_cache_image(H5F_t *f);
|
||||
H5_DLL herr_t H5C__mark_flush_dep_serialized(H5C_cache_entry_t * entry_ptr);
|
||||
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, hid_t dxpl_id,
|
||||
size_t space_needed, hbool_t write_permitted);
|
||||
H5_DLL herr_t H5C__flush_marked_entries(H5F_t * f, hid_t dxpl_id);
|
||||
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, hid_t dxpl_id);
|
||||
H5_DLL herr_t H5C__serialize_cache(H5F_t *f, hid_t dxpl_id);
|
||||
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);
|
||||
|
||||
/* Routines for operating on entry tags */
|
||||
H5_DLL herr_t H5C__tag_entry(H5C_t * cache_ptr, H5C_cache_entry_t * entry_ptr,
|
||||
hid_t dxpl_id);
|
||||
H5_DLL herr_t H5C__tag_entry(H5C_t * cache_ptr, H5C_cache_entry_t * entry_ptr);
|
||||
H5_DLL herr_t H5C__untag_entry(H5C_t *cache, H5C_cache_entry_t *entry);
|
||||
|
||||
/* Testing functions */
|
||||
|
@ -61,16 +61,16 @@ static void * H5C__prefetched_entry_deserialize(const void *image_ptr,
|
||||
size_t len, void *udata, hbool_t *dirty_ptr);
|
||||
static herr_t H5C__prefetched_entry_image_len(const void *thing,
|
||||
size_t *image_len_ptr);
|
||||
static herr_t H5C__prefetched_entry_pre_serialize(H5F_t *f,
|
||||
hid_t dxpl_id, void *thing, haddr_t addr, size_t len,
|
||||
haddr_t *new_addr_ptr, size_t *new_len_ptr, unsigned *flags_ptr);
|
||||
static herr_t H5C__prefetched_entry_pre_serialize(H5F_t *f, void *thing,
|
||||
haddr_t addr, size_t len, haddr_t *new_addr_ptr, size_t *new_len_ptr,
|
||||
unsigned *flags_ptr);
|
||||
static herr_t H5C__prefetched_entry_serialize(const H5F_t *f, void *image_ptr,
|
||||
size_t len, void *thing);
|
||||
static herr_t H5C__prefetched_entry_notify(H5C_notify_action_t action,
|
||||
void *thing);
|
||||
static herr_t H5C__prefetched_entry_free_icr(void *thing);
|
||||
static herr_t H5C__prefetched_entry_fsf_size(const void *thing,
|
||||
size_t *fsf_size_ptr);
|
||||
hsize_t *fsf_size_ptr);
|
||||
|
||||
|
||||
/*********************/
|
||||
@ -182,11 +182,9 @@ H5C__prefetched_entry_image_len(const void H5_ATTR_UNUSED *thing,
|
||||
|
||||
|
||||
static herr_t
|
||||
H5C__prefetched_entry_pre_serialize(H5F_t H5_ATTR_UNUSED *f,
|
||||
hid_t H5_ATTR_UNUSED dxpl_id, void H5_ATTR_UNUSED *thing,
|
||||
H5C__prefetched_entry_pre_serialize(H5F_t H5_ATTR_UNUSED *f, void H5_ATTR_UNUSED *thing,
|
||||
haddr_t H5_ATTR_UNUSED addr, size_t H5_ATTR_UNUSED len,
|
||||
haddr_t H5_ATTR_UNUSED *new_addr_ptr,
|
||||
size_t H5_ATTR_UNUSED *new_len_ptr,
|
||||
haddr_t H5_ATTR_UNUSED *new_addr_ptr, size_t H5_ATTR_UNUSED *new_len_ptr,
|
||||
unsigned H5_ATTR_UNUSED *flags_ptr)
|
||||
{
|
||||
FUNC_ENTER_STATIC_NOERR /* Yes, even though this pushes an error on the stack */
|
||||
@ -339,7 +337,7 @@ done:
|
||||
|
||||
static herr_t
|
||||
H5C__prefetched_entry_fsf_size(const void H5_ATTR_UNUSED *thing,
|
||||
size_t H5_ATTR_UNUSED *fsf_size_ptr)
|
||||
hsize_t H5_ATTR_UNUSED *fsf_size_ptr)
|
||||
{
|
||||
FUNC_ENTER_STATIC_NOERR /* Yes, even though this pushes an error on the stack */
|
||||
|
||||
|
@ -561,7 +561,6 @@ typedef struct H5C_t H5C_t;
|
||||
* The typedef for the pre-serialize callback is as follows:
|
||||
*
|
||||
* typedef herr_t (*H5C_pre_serialize_func_t)(H5F_t *f,
|
||||
* hid_t dxpl_id,
|
||||
* void * thing,
|
||||
* haddr_t addr,
|
||||
* size_t len,
|
||||
@ -575,11 +574,6 @@ typedef struct H5C_t H5C_t;
|
||||
* must be modified in the process of serializing the
|
||||
* target entry.
|
||||
*
|
||||
* dxpl_id: dxpl_id passed with the file pointer to the cache, and
|
||||
* passed on to the callback. Necessary as some callbacks
|
||||
* revise the size and location of the target entry, or
|
||||
* possibly other entries on pre-serialize.
|
||||
*
|
||||
* thing: Pointer to void containing the address of the in core
|
||||
* representation of the target metadata cache entry.
|
||||
* This is the same pointer returned by a protect of the
|
||||
@ -826,7 +820,7 @@ typedef struct H5C_t H5C_t;
|
||||
* The typedef for the get_fsf_size callback is as follows:
|
||||
*
|
||||
* typedef herr_t (*H5C_get_fsf_size_t)(const void * thing,
|
||||
* size_t *fsf_size_ptr);
|
||||
* hsize_t *fsf_size_ptr);
|
||||
*
|
||||
* The parameters of the get_fsf_size callback are as follows:
|
||||
*
|
||||
@ -835,7 +829,7 @@ typedef struct H5C_t H5C_t;
|
||||
* is the same pointer that would be returned by a protect()
|
||||
* call of the associated addr and len.
|
||||
*
|
||||
* fs_size_ptr: Pointer to size_t in which the callback will return
|
||||
* fs_size_ptr: Pointer to hsize_t in which the callback will return
|
||||
* the size of the piece of file space to be freed. Note
|
||||
* that the space to be freed is presumed to have the same
|
||||
* base address as the cache entry.
|
||||
@ -881,14 +875,13 @@ typedef htri_t (*H5C_verify_chksum_func_t)(const void *image_ptr, size_t len, vo
|
||||
typedef void *(*H5C_deserialize_func_t)(const void *image_ptr,
|
||||
size_t len, void *udata_ptr, hbool_t *dirty_ptr);
|
||||
typedef herr_t (*H5C_image_len_func_t)(const void *thing, size_t *image_len_ptr);
|
||||
typedef herr_t (*H5C_pre_serialize_func_t)(H5F_t *f, hid_t dxpl_id,
|
||||
void *thing, haddr_t addr, size_t len, haddr_t *new_addr_ptr,
|
||||
size_t *new_len_ptr, unsigned *flags_ptr);
|
||||
typedef herr_t (*H5C_pre_serialize_func_t)(H5F_t *f, void *thing, haddr_t addr,
|
||||
size_t len, haddr_t *new_addr_ptr, size_t *new_len_ptr, unsigned *flags_ptr);
|
||||
typedef herr_t (*H5C_serialize_func_t)(const H5F_t *f, void *image_ptr,
|
||||
size_t len, void *thing);
|
||||
typedef herr_t (*H5C_notify_func_t)(H5C_notify_action_t action, void *thing);
|
||||
typedef herr_t (*H5C_free_icr_func_t)(void *thing);
|
||||
typedef herr_t (*H5C_get_fsf_size_t)(const void * thing, size_t *fsf_size_ptr);
|
||||
typedef herr_t (*H5C_get_fsf_size_t)(const void * thing, hsize_t *fsf_size_ptr);
|
||||
|
||||
/* Metadata cache client class definition */
|
||||
typedef struct H5C_class_t {
|
||||
@ -2245,20 +2238,20 @@ H5_DLL void H5C_def_auto_resize_rpt_fcn(H5C_t *cache_ptr, int32_t version,
|
||||
double hit_rate, enum H5C_resize_status status,
|
||||
size_t old_max_cache_size, size_t new_max_cache_size,
|
||||
size_t old_min_clean_size, size_t new_min_clean_size);
|
||||
H5_DLL herr_t H5C_dest(H5F_t *f, hid_t dxpl_id);
|
||||
H5_DLL herr_t H5C_evict(H5F_t *f, hid_t dxpl_id);
|
||||
H5_DLL herr_t H5C_expunge_entry(H5F_t *f, hid_t dxpl_id,
|
||||
const H5C_class_t *type, haddr_t addr, unsigned flags);
|
||||
H5_DLL herr_t H5C_flush_cache(H5F_t *f, hid_t dxpl_id, unsigned flags);
|
||||
H5_DLL herr_t H5C_flush_tagged_entries(H5F_t * f, hid_t dxpl_id, haddr_t tag);
|
||||
H5_DLL herr_t H5C_force_cache_image_load(H5F_t * f, hid_t dxpl_id);
|
||||
H5_DLL herr_t H5C_evict_tagged_entries(H5F_t * f, hid_t dxpl_id, haddr_t tag, hbool_t match_global);
|
||||
H5_DLL herr_t H5C_expunge_tag_type_metadata(H5F_t *f, hid_t dxpl_id, haddr_t tag, int type_id, unsigned flags);
|
||||
H5_DLL herr_t H5C_dest(H5F_t *f);
|
||||
H5_DLL herr_t H5C_evict(H5F_t *f);
|
||||
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);
|
||||
#if H5C_DO_TAGGING_SANITY_CHECKS
|
||||
herr_t H5C_verify_tag(int id, haddr_t tag);
|
||||
#endif
|
||||
H5_DLL herr_t H5C_flush_to_min_clean(H5F_t *f, hid_t dxpl_id);
|
||||
H5_DLL herr_t H5C_flush_to_min_clean(H5F_t *f);
|
||||
H5_DLL herr_t H5C_get_cache_auto_resize_config(const H5C_t *cache_ptr,
|
||||
H5C_auto_size_ctl_t *config_ptr);
|
||||
H5_DLL herr_t H5C_get_cache_image_config(const H5C_t * cache_ptr,
|
||||
@ -2277,8 +2270,8 @@ H5_DLL void * H5C_get_aux_ptr(const H5C_t *cache_ptr);
|
||||
H5_DLL FILE *H5C_get_trace_file_ptr(const H5C_t *cache_ptr);
|
||||
H5_DLL FILE *H5C_get_trace_file_ptr_from_entry(const H5C_cache_entry_t *entry_ptr);
|
||||
H5_DLL herr_t H5C_image_stats(H5C_t * cache_ptr, hbool_t print_header);
|
||||
H5_DLL herr_t H5C_insert_entry(H5F_t *f, hid_t dxpl_id, const H5C_class_t *type,
|
||||
haddr_t addr, void *thing, unsigned int flags);
|
||||
H5_DLL herr_t H5C_insert_entry(H5F_t *f, const H5C_class_t *type, haddr_t addr,
|
||||
void *thing, unsigned int flags);
|
||||
H5_DLL herr_t H5C_load_cache_image_on_next_protect(H5F_t *f, haddr_t addr,
|
||||
hsize_t len, hbool_t rw);
|
||||
H5_DLL herr_t H5C_mark_entry_dirty(void *thing);
|
||||
@ -2288,10 +2281,10 @@ H5_DLL herr_t H5C_mark_entry_serialized(void *thing);
|
||||
H5_DLL herr_t H5C_move_entry(H5C_t *cache_ptr, const H5C_class_t *type,
|
||||
haddr_t old_addr, haddr_t new_addr);
|
||||
H5_DLL herr_t H5C_pin_protected_entry(void *thing);
|
||||
H5_DLL herr_t H5C_prep_for_file_close(H5F_t *f, hid_t dxpl_id);
|
||||
H5_DLL herr_t H5C_prep_for_file_close(H5F_t *f);
|
||||
H5_DLL herr_t H5C_create_flush_dependency(void *parent_thing, void *child_thing);
|
||||
H5_DLL void * H5C_protect(H5F_t *f, hid_t dxpl_id, const H5C_class_t *type,
|
||||
haddr_t addr, void *udata, unsigned flags);
|
||||
H5_DLL void * H5C_protect(H5F_t *f, const H5C_class_t *type, haddr_t addr,
|
||||
void *udata, unsigned flags);
|
||||
H5_DLL herr_t H5C_reset_cache_hit_rate_stats(H5C_t *cache_ptr);
|
||||
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);
|
||||
@ -2305,7 +2298,7 @@ H5_DLL herr_t H5C_stats(H5C_t *cache_ptr, const char *cache_name,
|
||||
H5_DLL void H5C_stats__reset(H5C_t *cache_ptr);
|
||||
H5_DLL herr_t H5C_unpin_entry(void *thing);
|
||||
H5_DLL herr_t H5C_destroy_flush_dependency(void *parent_thing, void *child_thing);
|
||||
H5_DLL herr_t H5C_unprotect(H5F_t *f, hid_t dxpl_id, haddr_t addr, void *thing,
|
||||
H5_DLL herr_t H5C_unprotect(H5F_t *f, haddr_t addr, void *thing,
|
||||
unsigned int flags);
|
||||
H5_DLL herr_t H5C_validate_cache_image_config(H5C_cache_image_ctl_t * ctl_ptr);
|
||||
H5_DLL herr_t H5C_validate_resize_config(H5C_auto_size_ctl_t *config_ptr,
|
||||
@ -2324,13 +2317,13 @@ H5_DLL hbool_t H5C_cache_image_pending(const H5C_t *cache_ptr);
|
||||
H5_DLL herr_t H5C_get_mdc_image_info(H5C_t *cache_ptr, haddr_t *image_addr, hsize_t *image_len);
|
||||
|
||||
#ifdef H5_HAVE_PARALLEL
|
||||
H5_DLL herr_t H5C_apply_candidate_list(H5F_t *f, hid_t dxpl_id,
|
||||
H5C_t *cache_ptr, unsigned num_candidates, haddr_t *candidates_list_ptr,
|
||||
int mpi_rank, int mpi_size);
|
||||
H5_DLL herr_t H5C_apply_candidate_list(H5F_t *f, H5C_t *cache_ptr,
|
||||
unsigned num_candidates, haddr_t *candidates_list_ptr, int mpi_rank,
|
||||
int mpi_size);
|
||||
H5_DLL herr_t H5C_construct_candidate_list__clean_cache(H5C_t *cache_ptr);
|
||||
H5_DLL herr_t H5C_construct_candidate_list__min_clean(H5C_t *cache_ptr);
|
||||
H5_DLL herr_t H5C_clear_coll_entries(H5C_t * cache_ptr, hbool_t partial);
|
||||
H5_DLL herr_t H5C_mark_entries_as_clean(H5F_t *f, hid_t dxpl_id, unsigned ce_array_len,
|
||||
H5_DLL herr_t H5C_mark_entries_as_clean(H5F_t *f, unsigned ce_array_len,
|
||||
haddr_t *ce_array_ptr);
|
||||
#endif /* H5_HAVE_PARALLEL */
|
||||
|
||||
|
42
src/H5Ctag.c
42
src/H5Ctag.c
@ -37,6 +37,7 @@
|
||||
#include "H5private.h" /* Generic Functions */
|
||||
#include "H5ACprivate.h" /* Metadata cache */
|
||||
#include "H5Cpkg.h" /* Cache */
|
||||
#include "H5CXprivate.h" /* API Contexts */
|
||||
#include "H5Eprivate.h" /* Error handling */
|
||||
#include "H5Fpkg.h" /* Files */
|
||||
#include "H5Iprivate.h" /* IDs */
|
||||
@ -54,8 +55,7 @@
|
||||
|
||||
/* Typedef for tagged entry iterator callback context - evict tagged entries */
|
||||
typedef struct {
|
||||
H5F_t * f; /* File pointer for evicting entry */
|
||||
hid_t dxpl_id; /* DXPL for evicting entry */
|
||||
H5F_t *f; /* File pointer for evicting entry */
|
||||
hbool_t evicted_entries_last_pass; /* Flag to indicate that an entry
|
||||
* was evicted when iterating over
|
||||
* cache
|
||||
@ -72,8 +72,7 @@ typedef struct {
|
||||
|
||||
/* Typedef for tagged entry iterator callback context - expunge tag type metadata */
|
||||
typedef struct {
|
||||
H5F_t * f; /* File pointer for evicting entry */
|
||||
hid_t dxpl_id; /* DXPL for evicting entry */
|
||||
H5F_t *f; /* File pointer for evicting entry */
|
||||
int type_id; /* Cache entry type to expunge */
|
||||
unsigned flags; /* Flags for expunging entry */
|
||||
} H5C_tag_iter_ettm_ctx_t;
|
||||
@ -178,7 +177,7 @@ H5C_get_ignore_tags(const H5C_t *cache_ptr)
|
||||
*
|
||||
* Function: H5C__tag_entry
|
||||
*
|
||||
* Purpose: Tags an entry with the provided tag (contained in the dxpl_id).
|
||||
* Purpose: Tags an entry with the provided tag (contained in the API context).
|
||||
* If sanity checking is enabled, this function will perform
|
||||
* validation that a proper tag is contained within the provided
|
||||
* data access property list id before application.
|
||||
@ -191,9 +190,8 @@ H5C_get_ignore_tags(const H5C_t *cache_ptr)
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
herr_t
|
||||
H5C__tag_entry(H5C_t *cache, H5C_cache_entry_t *entry, hid_t dxpl_id)
|
||||
H5C__tag_entry(H5C_t *cache, H5C_cache_entry_t *entry)
|
||||
{
|
||||
H5P_genplist_t *dxpl; /* dataset transfer property list */
|
||||
H5C_tag_info_t *tag_info; /* Points to a tag info struct */
|
||||
haddr_t tag; /* Tag value */
|
||||
herr_t ret_value = SUCCEED; /* Return value */
|
||||
@ -205,18 +203,13 @@ H5C__tag_entry(H5C_t *cache, H5C_cache_entry_t *entry, hid_t dxpl_id)
|
||||
HDassert(entry != NULL);
|
||||
HDassert(cache->magic == H5C__H5C_T_MAGIC);
|
||||
|
||||
/* Get the dataset transfer property list */
|
||||
if(NULL == (dxpl = (H5P_genplist_t *)H5I_object_verify(dxpl_id, H5I_GENPROP_LST)))
|
||||
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a property list")
|
||||
|
||||
/* Get the tag from the DXPL */
|
||||
if((H5P_get(dxpl, H5AC_TAG_NAME, &tag)) < 0)
|
||||
HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "unable to query property value")
|
||||
/* Get the tag */
|
||||
tag = H5CX_get_tag();
|
||||
|
||||
if(cache->ignore_tags) {
|
||||
/* if we're ignoring tags, it's because we're running
|
||||
tests on internal functions and may not have inserted a tag
|
||||
value into a given dxpl_id before creating some metadata. Thus,
|
||||
value into a given API context before creating some metadata. Thus,
|
||||
in this case only, if a tag value has not been set, we can
|
||||
arbitrarily set it to something for the sake of passing the tests.
|
||||
If the tag value is set, then we'll just let it get assigned without
|
||||
@ -475,12 +468,12 @@ H5C__evict_tagged_entries_cb(H5C_cache_entry_t *entry, void *_ctx)
|
||||
ctx->pinned_entries_need_evicted = TRUE;
|
||||
else if(!entry->prefetched_dirty) {
|
||||
/* Evict the Entry */
|
||||
if(H5C__flush_single_entry(ctx->f, ctx->dxpl_id, entry, H5C__FLUSH_INVALIDATE_FLAG | H5C__FLUSH_CLEAR_ONLY_FLAG | H5C__DEL_FROM_SLIST_ON_DESTROY_FLAG) < 0)
|
||||
if(H5C__flush_single_entry(ctx->f, entry, H5C__FLUSH_INVALIDATE_FLAG | H5C__FLUSH_CLEAR_ONLY_FLAG | H5C__DEL_FROM_SLIST_ON_DESTROY_FLAG) < 0)
|
||||
HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, H5_ITER_ERROR, "Entry eviction failed.")
|
||||
ctx->evicted_entries_last_pass = TRUE;
|
||||
} else {
|
||||
} /* end else-if */
|
||||
else
|
||||
ctx->skipped_pf_dirty_entries = TRUE;
|
||||
}
|
||||
|
||||
done:
|
||||
FUNC_LEAVE_NOAPI(ret_value)
|
||||
@ -501,7 +494,7 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
herr_t
|
||||
H5C_evict_tagged_entries(H5F_t * f, hid_t dxpl_id, haddr_t tag, hbool_t match_global)
|
||||
H5C_evict_tagged_entries(H5F_t * f, haddr_t tag, hbool_t match_global)
|
||||
{
|
||||
H5C_t *cache; /* Pointer to cache structure */
|
||||
H5C_tag_iter_evict_ctx_t ctx; /* Context for iterator callback */
|
||||
@ -519,7 +512,6 @@ H5C_evict_tagged_entries(H5F_t * f, hid_t dxpl_id, haddr_t tag, hbool_t match_gl
|
||||
|
||||
/* Construct context for iterator callbacks */
|
||||
ctx.f = f;
|
||||
ctx.dxpl_id = dxpl_id;
|
||||
|
||||
/* Start evicting entries */
|
||||
do {
|
||||
@ -721,7 +713,7 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
herr_t
|
||||
H5C_flush_tagged_entries(H5F_t * f, hid_t dxpl_id, haddr_t tag)
|
||||
H5C_flush_tagged_entries(H5F_t *f, haddr_t tag)
|
||||
{
|
||||
/* Variable Declarations */
|
||||
H5C_t *cache_ptr = NULL;
|
||||
@ -741,7 +733,7 @@ H5C_flush_tagged_entries(H5F_t * f, hid_t dxpl_id, haddr_t tag)
|
||||
HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "Can't mark tagged entries")
|
||||
|
||||
/* Flush all marked entries */
|
||||
if(H5C__flush_marked_entries(f, dxpl_id) < 0)
|
||||
if(H5C__flush_marked_entries(f) < 0)
|
||||
HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "Can't flush marked entries")
|
||||
|
||||
done:
|
||||
@ -820,7 +812,7 @@ H5C__expunge_tag_type_metadata_cb(H5C_cache_entry_t *entry, void *_ctx)
|
||||
|
||||
/* Found one with the same tag and type id */
|
||||
if(entry->type->id == ctx->type_id)
|
||||
if(H5C_expunge_entry(ctx->f, ctx->dxpl_id, entry->type, entry->addr, ctx->flags) < 0)
|
||||
if(H5C_expunge_entry(ctx->f, entry->type, entry->addr, ctx->flags) < 0)
|
||||
HGOTO_ERROR(H5E_CACHE, H5E_CANTEXPUNGE, H5_ITER_ERROR, "can't expunge entry")
|
||||
|
||||
done:
|
||||
@ -843,8 +835,7 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
herr_t
|
||||
H5C_expunge_tag_type_metadata(H5F_t *f, hid_t dxpl_id, haddr_t tag, int type_id,
|
||||
unsigned flags)
|
||||
H5C_expunge_tag_type_metadata(H5F_t *f, haddr_t tag, int type_id, unsigned flags)
|
||||
{
|
||||
H5C_t *cache; /* Pointer to cache structure */
|
||||
H5C_tag_iter_ettm_ctx_t ctx; /* Context for iterator callback */
|
||||
@ -862,7 +853,6 @@ H5C_expunge_tag_type_metadata(H5F_t *f, hid_t dxpl_id, haddr_t tag, int type_id,
|
||||
|
||||
/* Construct context for iterator callbacks */
|
||||
ctx.f = f;
|
||||
ctx.dxpl_id = dxpl_id;
|
||||
ctx.type_id = type_id;
|
||||
ctx.flags = flags;
|
||||
|
||||
|
133
src/H5D.c
133
src/H5D.c
@ -22,6 +22,7 @@
|
||||
/* Headers */
|
||||
/***********/
|
||||
#include "H5private.h" /* Generic Functions */
|
||||
#include "H5CXprivate.h" /* API Contexts */
|
||||
#include "H5Dpkg.h" /* Datasets */
|
||||
#include "H5Eprivate.h" /* Error handling */
|
||||
#include "H5FLprivate.h" /* Free lists */
|
||||
@ -107,7 +108,6 @@ H5Dcreate2(hid_t loc_id, const char *name, hid_t type_id, hid_t space_id,
|
||||
H5G_loc_t loc; /* Object location to insert dataset into */
|
||||
H5D_t *dset = NULL; /* New dataset's info */
|
||||
const H5S_t *space; /* Dataspace for dataset */
|
||||
hid_t dxpl_id = H5AC_ind_read_dxpl_id; /* dxpl used by library */
|
||||
hid_t ret_value; /* Return value */
|
||||
|
||||
FUNC_ENTER_API(FAIL)
|
||||
@ -136,12 +136,12 @@ H5Dcreate2(hid_t loc_id, const char *name, hid_t type_id, hid_t space_id,
|
||||
if(TRUE != H5P_isa_class(dcpl_id, H5P_DATASET_CREATE))
|
||||
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not dataset create property list ID")
|
||||
|
||||
/* Verify access property list and get correct dxpl */
|
||||
if(H5P_verify_apl_and_dxpl(&dapl_id, H5P_CLS_DACC, &dxpl_id, loc_id, TRUE) < 0)
|
||||
HGOTO_ERROR(H5E_DATASET, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
|
||||
/* Verify access property list and set up collective metadata if appropriate */
|
||||
if(H5CX_set_apl(&dapl_id, H5P_CLS_DACC, loc_id, TRUE) < 0)
|
||||
HGOTO_ERROR(H5E_DATASET, H5E_CANTSET, H5I_INVALID_HID, "can't set access property list info")
|
||||
|
||||
/* Create the new dataset & get its ID */
|
||||
if(NULL == (dset = H5D__create_named(&loc, name, type_id, space, lcpl_id, dcpl_id, dapl_id, dxpl_id)))
|
||||
if(NULL == (dset = H5D__create_named(&loc, name, type_id, space, lcpl_id, dcpl_id, dapl_id)))
|
||||
HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to create dataset")
|
||||
if((ret_value = H5I_register(H5I_DATASET, dset, TRUE)) < 0)
|
||||
HGOTO_ERROR(H5E_DATASET, H5E_CANTREGISTER, FAIL, "unable to register dataset")
|
||||
@ -197,7 +197,6 @@ H5Dcreate_anon(hid_t loc_id, hid_t type_id, hid_t space_id, hid_t dcpl_id,
|
||||
H5G_loc_t loc; /* Object location to insert dataset into */
|
||||
H5D_t *dset = NULL; /* New dataset's info */
|
||||
const H5S_t *space; /* Dataspace for dataset */
|
||||
hid_t dxpl_id = H5AC_ind_read_dxpl_id; /* dxpl used by library */
|
||||
hid_t ret_value; /* Return value */
|
||||
|
||||
FUNC_ENTER_API(FAIL)
|
||||
@ -216,12 +215,12 @@ H5Dcreate_anon(hid_t loc_id, hid_t type_id, hid_t space_id, hid_t dcpl_id,
|
||||
if(TRUE != H5P_isa_class(dcpl_id, H5P_DATASET_CREATE))
|
||||
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not dataset create property list ID")
|
||||
|
||||
/* Verify access property list and get correct dxpl */
|
||||
if(H5P_verify_apl_and_dxpl(&dapl_id, H5P_CLS_DACC, &dxpl_id, loc_id, TRUE) < 0)
|
||||
HGOTO_ERROR(H5E_DATASET, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
|
||||
/* Verify access property list and set up collective metadata if appropriate */
|
||||
if(H5CX_set_apl(&dapl_id, H5P_CLS_DACC, loc_id, TRUE) < 0)
|
||||
HGOTO_ERROR(H5E_DATASET, H5E_CANTSET, H5I_INVALID_HID, "can't set access property list info")
|
||||
|
||||
/* build and open the new dataset */
|
||||
if(NULL == (dset = H5D__create(loc.oloc->file, type_id, space, dcpl_id, dapl_id, dxpl_id)))
|
||||
if(NULL == (dset = H5D__create_anon(loc.oloc->file, type_id, space, dcpl_id, dapl_id)))
|
||||
HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to create dataset")
|
||||
|
||||
/* Register the new dataset to get an ID for it */
|
||||
@ -238,7 +237,7 @@ done:
|
||||
HDONE_ERROR(H5E_DATASET, H5E_CANTGET, FAIL, "unable to get object location of dataset")
|
||||
|
||||
/* Decrement refcount on dataset's object header in memory */
|
||||
if(H5O_dec_rc_by_loc(oloc, dxpl_id) < 0)
|
||||
if(H5O_dec_rc_by_loc(oloc) < 0)
|
||||
HDONE_ERROR(H5E_DATASET, H5E_CANTDEC, FAIL, "unable to decrement refcount on newly created object")
|
||||
} /* end if */
|
||||
|
||||
@ -273,7 +272,6 @@ H5Dopen2(hid_t loc_id, const char *name, hid_t dapl_id)
|
||||
{
|
||||
H5D_t *dset = NULL;
|
||||
H5G_loc_t loc; /* Object location of group */
|
||||
hid_t dxpl_id = H5AC_ind_read_dxpl_id; /* dxpl to use to open datset */
|
||||
hid_t ret_value;
|
||||
|
||||
FUNC_ENTER_API(FAIL)
|
||||
@ -285,12 +283,12 @@ H5Dopen2(hid_t loc_id, const char *name, hid_t dapl_id)
|
||||
if(!name || !*name)
|
||||
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no name")
|
||||
|
||||
/* Verify access property list and get correct dxpl */
|
||||
if(H5P_verify_apl_and_dxpl(&dapl_id, H5P_CLS_DACC, &dxpl_id, loc_id, FALSE) < 0)
|
||||
HGOTO_ERROR(H5E_DATASET, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
|
||||
/* Verify access property list and set up collective metadata if appropriate */
|
||||
if(H5CX_set_apl(&dapl_id, H5P_CLS_DACC, loc_id, FALSE) < 0)
|
||||
HGOTO_ERROR(H5E_DATASET, H5E_CANTSET, H5I_INVALID_HID, "can't set access property list info")
|
||||
|
||||
/* Open the dataset */
|
||||
if(NULL == (dset = H5D__open_name(&loc, name, dapl_id, dxpl_id)))
|
||||
if(NULL == (dset = H5D__open_name(&loc, name, dapl_id)))
|
||||
HGOTO_ERROR(H5E_DATASET, H5E_CANTOPENOBJ, FAIL, "unable to open dataset")
|
||||
|
||||
/* Register an atom for the dataset */
|
||||
@ -301,6 +299,7 @@ done:
|
||||
if(ret_value < 0)
|
||||
if(dset && H5D_close(dset) < 0)
|
||||
HDONE_ERROR(H5E_DATASET, H5E_CLOSEERROR, FAIL, "unable to release dataset")
|
||||
|
||||
FUNC_LEAVE_API(ret_value)
|
||||
} /* end H5Dopen2() */
|
||||
|
||||
@ -365,15 +364,15 @@ H5Dget_space(hid_t dset_id)
|
||||
H5D_t *dset = NULL;
|
||||
hid_t ret_value;
|
||||
|
||||
FUNC_ENTER_API(FAIL)
|
||||
FUNC_ENTER_API(H5I_INVALID_HID)
|
||||
H5TRACE1("i", "i", dset_id);
|
||||
|
||||
/* Check args */
|
||||
if(NULL == (dset = (H5D_t *)H5I_object_verify(dset_id, H5I_DATASET)))
|
||||
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a dataset")
|
||||
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, H5I_INVALID_HID, "not a dataset")
|
||||
|
||||
if((ret_value = H5D_get_space(dset)) < 0)
|
||||
HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to get dataspace")
|
||||
if((ret_value = H5D__get_space(dset)) < 0)
|
||||
HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, H5I_INVALID_HID, "unable to get dataspace")
|
||||
|
||||
done:
|
||||
FUNC_LEAVE_API(ret_value)
|
||||
@ -408,7 +407,7 @@ H5Dget_space_status(hid_t dset_id, H5D_space_status_t *allocation)
|
||||
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a dataset")
|
||||
|
||||
/* Read dataspace address and return */
|
||||
if(H5D__get_space_status(dset, allocation, H5AC_ind_read_dxpl_id) < 0)
|
||||
if(H5D__get_space_status(dset, allocation) < 0)
|
||||
HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to get space status")
|
||||
|
||||
done:
|
||||
@ -435,7 +434,6 @@ done:
|
||||
hid_t
|
||||
H5Dget_type(hid_t dset_id)
|
||||
{
|
||||
|
||||
H5D_t *dset; /* Dataset */
|
||||
hid_t ret_value; /* Return value */
|
||||
|
||||
@ -446,7 +444,7 @@ H5Dget_type(hid_t dset_id)
|
||||
if(NULL == (dset = (H5D_t *)H5I_object_verify(dset_id, H5I_DATASET)))
|
||||
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a dataset")
|
||||
|
||||
if((ret_value = H5D_get_type(dset)) < 0)
|
||||
if((ret_value = H5D__get_type(dset)) < 0)
|
||||
HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to get dataspace")
|
||||
|
||||
done:
|
||||
@ -473,18 +471,18 @@ done:
|
||||
hid_t
|
||||
H5Dget_create_plist(hid_t dset_id)
|
||||
{
|
||||
H5D_t *dataset; /* Dataset structure */
|
||||
hid_t ret_value = SUCCEED; /* Return value */
|
||||
H5D_t *dataset; /* Dataset structure */
|
||||
hid_t ret_value; /* Return value */
|
||||
|
||||
FUNC_ENTER_API(FAIL)
|
||||
FUNC_ENTER_API(H5I_INVALID_HID)
|
||||
H5TRACE1("i", "i", dset_id);
|
||||
|
||||
/* Check args */
|
||||
if(NULL == (dataset = (H5D_t *)H5I_object_verify(dset_id, H5I_DATASET)))
|
||||
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a dataset")
|
||||
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, H5I_INVALID_HID, "not a dataset")
|
||||
|
||||
if((ret_value = H5D_get_create_plist(dataset)) < 0)
|
||||
HGOTO_ERROR(H5E_DATASET, H5E_CANTGET, FAIL, "Can't get creation plist")
|
||||
if((ret_value = H5D__get_create_plist(dataset)) < 0)
|
||||
HGOTO_ERROR(H5E_DATASET, H5E_CANTGET, H5I_INVALID_HID, "Can't get creation plist")
|
||||
|
||||
done:
|
||||
FUNC_LEAVE_API(ret_value)
|
||||
@ -577,7 +575,7 @@ H5Dget_storage_size(hid_t dset_id)
|
||||
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, 0, "not a dataset")
|
||||
|
||||
/* Set return value */
|
||||
if(H5D__get_storage_size(dset, H5AC_ind_read_dxpl_id, &ret_value) < 0)
|
||||
if(H5D__get_storage_size(dset, &ret_value) < 0)
|
||||
HGOTO_ERROR(H5E_DATASET, H5E_CANTGET, 0, "can't get size of dataset's storage")
|
||||
|
||||
done:
|
||||
@ -732,13 +730,13 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
herr_t
|
||||
H5Dvlen_reclaim(hid_t type_id, hid_t space_id, hid_t plist_id, void *buf)
|
||||
H5Dvlen_reclaim(hid_t type_id, hid_t space_id, hid_t dxpl_id, void *buf)
|
||||
{
|
||||
H5S_t *space; /* Dataspace for iteration */
|
||||
herr_t ret_value; /* Return value */
|
||||
|
||||
FUNC_ENTER_API(FAIL)
|
||||
H5TRACE4("e", "iii*x", type_id, space_id, plist_id, buf);
|
||||
H5TRACE4("e", "iii*x", type_id, space_id, dxpl_id, buf);
|
||||
|
||||
/* Check args */
|
||||
if(H5I_DATATYPE != H5I_get_type(type_id) || buf == NULL)
|
||||
@ -749,14 +747,17 @@ H5Dvlen_reclaim(hid_t type_id, hid_t space_id, hid_t plist_id, void *buf)
|
||||
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "dataspace does not have extent set")
|
||||
|
||||
/* Get the default dataset transfer property list if the user didn't provide one */
|
||||
if(H5P_DEFAULT == plist_id)
|
||||
plist_id = H5P_DATASET_XFER_DEFAULT;
|
||||
if(H5P_DEFAULT == dxpl_id)
|
||||
dxpl_id = H5P_DATASET_XFER_DEFAULT;
|
||||
else
|
||||
if(TRUE != H5P_isa_class(plist_id, H5P_DATASET_XFER))
|
||||
if(TRUE != H5P_isa_class(dxpl_id, H5P_DATASET_XFER))
|
||||
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not xfer parms")
|
||||
|
||||
/* Set DXPL for operation */
|
||||
H5CX_set_dxpl(dxpl_id);
|
||||
|
||||
/* Call internal routine */
|
||||
ret_value = H5D_vlen_reclaim(type_id, space, plist_id, buf);
|
||||
ret_value = H5D_vlen_reclaim(type_id, space, buf);
|
||||
|
||||
done:
|
||||
FUNC_LEAVE_API(ret_value)
|
||||
@ -791,13 +792,12 @@ herr_t
|
||||
H5Dvlen_get_buf_size(hid_t dataset_id, hid_t type_id, hid_t space_id,
|
||||
hsize_t *size)
|
||||
{
|
||||
H5D_vlen_bufsize_t vlen_bufsize = {0, 0, 0, 0, 0, 0, 0};
|
||||
H5D_vlen_bufsize_t vlen_bufsize = {0, 0, 0, 0, 0, 0};
|
||||
H5D_t *dset; /* Dataset for operation */
|
||||
H5S_t *fspace = NULL; /* Dataset's dataspace */
|
||||
H5S_t *mspace = NULL; /* Memory dataspace */
|
||||
char bogus; /* bogus value to pass to H5Diterate() */
|
||||
H5S_t *space; /* Dataspace for iteration */
|
||||
H5P_genplist_t *plist; /* Property list */
|
||||
H5T_t *type; /* Datatype */
|
||||
H5S_sel_iter_op_t dset_op; /* Operator for iteration */
|
||||
herr_t ret_value; /* Return value */
|
||||
@ -837,17 +837,9 @@ H5Dvlen_get_buf_size(hid_t dataset_id, hid_t type_id, hid_t space_id,
|
||||
if(NULL == (vlen_bufsize.vl_tbuf = H5FL_BLK_MALLOC(vlen_vl_buf, (size_t)1)))
|
||||
HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "no temporary buffers available")
|
||||
|
||||
/* Change to the custom memory allocation routines for reading VL data */
|
||||
if((vlen_bufsize.xfer_pid = H5P_create_id(H5P_CLS_DATASET_XFER_g, FALSE)) < 0)
|
||||
HGOTO_ERROR(H5E_PLIST, H5E_CANTCREATE, FAIL, "no dataset xfer plists available")
|
||||
|
||||
/* Get the property list struct */
|
||||
if(NULL == (plist = (H5P_genplist_t *)H5I_object(vlen_bufsize.xfer_pid)))
|
||||
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a dataset transfer property list")
|
||||
|
||||
/* Set the memory manager to the special allocation routine */
|
||||
if(H5P_set_vlen_mem_manager(plist, H5D__vlen_get_buf_size_alloc, &vlen_bufsize, NULL, NULL) < 0)
|
||||
HGOTO_ERROR(H5E_PLIST, H5E_CANTINIT, FAIL, "can't set VL data allocation routine")
|
||||
if(H5CX_set_vlen_alloc_info(H5D__vlen_get_buf_size_alloc, &vlen_bufsize, NULL, NULL) < 0)
|
||||
HGOTO_ERROR(H5E_DATASET, H5E_CANTSET, FAIL, "can't set VL data allocation routine")
|
||||
|
||||
/* Set the initial number of bytes required */
|
||||
vlen_bufsize.size = 0;
|
||||
@ -872,8 +864,6 @@ done:
|
||||
vlen_bufsize.fl_tbuf = H5FL_BLK_FREE(vlen_fl_buf, vlen_bufsize.fl_tbuf);
|
||||
if(vlen_bufsize.vl_tbuf != NULL)
|
||||
vlen_bufsize.vl_tbuf = H5FL_BLK_FREE(vlen_vl_buf, vlen_bufsize.vl_tbuf);
|
||||
if(vlen_bufsize.xfer_pid > 0 && H5I_dec_ref(vlen_bufsize.xfer_pid) < 0)
|
||||
HDONE_ERROR(H5E_DATASET, H5E_CANTDEC, FAIL, "unable to decrement ref count on property list")
|
||||
|
||||
FUNC_LEAVE_API(ret_value)
|
||||
} /* end H5Dvlen_get_buf_size() */
|
||||
@ -907,12 +897,16 @@ H5Dset_extent(hid_t dset_id, const hsize_t size[])
|
||||
if(!size)
|
||||
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no size specified")
|
||||
|
||||
/* Set up collective metadata if appropriate */
|
||||
if(H5CX_set_loc(dset_id) < 0)
|
||||
HGOTO_ERROR(H5E_DATASET, H5E_CANTSET, FAIL, "can't set collective metadata read info")
|
||||
|
||||
/* Private function */
|
||||
if(H5D__set_extent(dset, size, H5AC_ind_read_dxpl_id) < 0)
|
||||
if(H5D__set_extent(dset, size) < 0)
|
||||
HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to set extend dataset")
|
||||
|
||||
done:
|
||||
FUNC_LEAVE_API(ret_value)
|
||||
FUNC_LEAVE_API(ret_value)
|
||||
} /* end H5Dset_extent() */
|
||||
|
||||
|
||||
@ -931,7 +925,7 @@ done:
|
||||
herr_t
|
||||
H5Dflush(hid_t dset_id)
|
||||
{
|
||||
H5D_t *dset; /* Dataset for this operation */
|
||||
H5D_t *dset; /* Dataset for this operation */
|
||||
herr_t ret_value = SUCCEED; /* return value */
|
||||
|
||||
FUNC_ENTER_API(FAIL)
|
||||
@ -941,13 +935,13 @@ H5Dflush(hid_t dset_id)
|
||||
if(NULL == (dset = (H5D_t *)H5I_object_verify(dset_id, H5I_DATASET)))
|
||||
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a dataset")
|
||||
|
||||
/* Flush any dataset information still cached in memory */
|
||||
if(H5D__flush_real(dset, H5AC_ind_read_dxpl_id) < 0)
|
||||
HDONE_ERROR(H5E_DATASET, H5E_WRITEERROR, FAIL, "unable to flush cached dataset info")
|
||||
/* Set up collective metadata if appropriate */
|
||||
if(H5CX_set_loc(dset_id) < 0)
|
||||
HGOTO_ERROR(H5E_DATASET, H5E_CANTSET, FAIL, "can't set collective metadata read info")
|
||||
|
||||
/* Flush object's metadata to file */
|
||||
if(H5O_flush_common(&dset->oloc, dset_id, H5AC_ind_read_dxpl_id) < 0)
|
||||
HGOTO_ERROR(H5E_DATASET, H5E_CANTFLUSH, FAIL, "unable to flush dataset and object flush callback")
|
||||
/* Flush dataset information cached in memory */
|
||||
if(H5D__flush(dset, dset_id) < 0)
|
||||
HGOTO_ERROR(H5E_DATASET, H5E_CANTFLUSH, FAIL, "unable to flush cached dataset info")
|
||||
|
||||
done:
|
||||
FUNC_LEAVE_API(ret_value)
|
||||
@ -969,8 +963,8 @@ done:
|
||||
herr_t
|
||||
H5Drefresh(hid_t dset_id)
|
||||
{
|
||||
H5D_t *dset; /* Dataset to refresh */
|
||||
herr_t ret_value = SUCCEED; /* return value */
|
||||
H5D_t *dset; /* Dataset to refresh */
|
||||
herr_t ret_value = SUCCEED; /* return value */
|
||||
|
||||
FUNC_ENTER_API(FAIL)
|
||||
H5TRACE1("e", "i", dset_id);
|
||||
@ -979,8 +973,12 @@ H5Drefresh(hid_t dset_id)
|
||||
if(NULL == (dset = (H5D_t *)H5I_object_verify(dset_id, H5I_DATASET)))
|
||||
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a dataset")
|
||||
|
||||
/* Set up collective metadata if appropriate */
|
||||
if(H5CX_set_loc(dset_id) < 0)
|
||||
HGOTO_ERROR(H5E_DATASET, H5E_CANTSET, FAIL, "can't set collective metadata read info")
|
||||
|
||||
/* Call private function to refresh the dataset object */
|
||||
if((H5D__refresh(dset_id, dset, H5AC_ind_read_dxpl_id)) < 0)
|
||||
if((H5D__refresh(dset_id, dset)) < 0)
|
||||
HGOTO_ERROR(H5E_DATASET, H5E_CANTLOAD, FAIL, "unable to refresh dataset")
|
||||
|
||||
done:
|
||||
@ -1017,11 +1015,15 @@ H5Dformat_convert(hid_t dset_id)
|
||||
if(NULL == (dset = (H5D_t *)H5I_object_verify(dset_id, H5I_DATASET)))
|
||||
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a dataset")
|
||||
|
||||
/* Set up collective metadata if appropriate */
|
||||
if(H5CX_set_loc(dset_id) < 0)
|
||||
HGOTO_ERROR(H5E_DATASET, H5E_CANTSET, FAIL, "can't set collective metadata read info")
|
||||
|
||||
switch(dset->shared->layout.type) {
|
||||
case H5D_CHUNKED:
|
||||
/* Convert the chunk indexing type to version 1 B-tree if not */
|
||||
if(dset->shared->layout.u.chunk.idx_type != H5D_CHUNK_IDX_BTREE)
|
||||
if((H5D__format_convert(dset, H5AC_ind_read_dxpl_id)) < 0)
|
||||
if((H5D__format_convert(dset)) < 0)
|
||||
HGOTO_ERROR(H5E_DATASET, H5E_CANTLOAD, FAIL, "unable to downgrade chunk indexing type for dataset")
|
||||
break;
|
||||
|
||||
@ -1029,7 +1031,7 @@ H5Dformat_convert(hid_t dset_id)
|
||||
case H5D_COMPACT:
|
||||
/* Downgrade the layout version to 3 if greater than 3 */
|
||||
if(dset->shared->layout.version > H5O_LAYOUT_VERSION_DEFAULT)
|
||||
if((H5D__format_convert(dset, H5AC_ind_read_dxpl_id)) < 0)
|
||||
if((H5D__format_convert(dset)) < 0)
|
||||
HGOTO_ERROR(H5E_DATASET, H5E_CANTLOAD, FAIL, "unable to downgrade layout version for dataset")
|
||||
break;
|
||||
|
||||
@ -1121,9 +1123,10 @@ H5Dget_chunk_storage_size(hid_t dset_id, const hsize_t *offset, hsize_t *chunk_n
|
||||
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a chunked dataset")
|
||||
|
||||
/* Call private function */
|
||||
if(H5D__get_chunk_storage_size(dset, H5P_DATASET_XFER_DEFAULT, offset, chunk_nbytes) < 0)
|
||||
if(H5D__get_chunk_storage_size(dset, offset, chunk_nbytes) < 0)
|
||||
HGOTO_ERROR(H5E_DATASET, H5E_CANTGET, FAIL, "can't get storage size of chunk")
|
||||
|
||||
done:
|
||||
FUNC_LEAVE_API(ret_value);
|
||||
} /* H5Dget_chunk_storage_size() */
|
||||
|
||||
|
@ -95,23 +95,22 @@ static herr_t H5D__btree_shared_create(const H5F_t *f, H5O_storage_chunk_t *stor
|
||||
const H5O_layout_chunk_t *layout);
|
||||
|
||||
/* B-tree iterator callbacks */
|
||||
static int H5D__btree_idx_iterate_cb(H5F_t *f, hid_t dxpl_id, const void *left_key,
|
||||
static int H5D__btree_idx_iterate_cb(H5F_t *f, const void *left_key,
|
||||
haddr_t addr, const void *right_key, void *_udata);
|
||||
|
||||
/* B-tree callbacks */
|
||||
static H5UC_t *H5D__btree_get_shared(const H5F_t *f, const void *_udata);
|
||||
static herr_t H5D__btree_new_node(H5F_t *f, hid_t dxpl_id, H5B_ins_t, void *_lt_key,
|
||||
static herr_t H5D__btree_new_node(H5F_t *f, H5B_ins_t, void *_lt_key,
|
||||
void *_udata, void *_rt_key, haddr_t *addr_p /*out*/);
|
||||
static int H5D__btree_cmp2(void *_lt_key, void *_udata, void *_rt_key);
|
||||
static int H5D__btree_cmp3(void *_lt_key, void *_udata, void *_rt_key);
|
||||
static htri_t H5D__btree_found(H5F_t *f, hid_t dxpl_id, haddr_t addr,
|
||||
static htri_t H5D__btree_found(H5F_t *f, haddr_t addr,
|
||||
const void *_lt_key, void *_udata);
|
||||
static H5B_ins_t H5D__btree_insert(H5F_t *f, hid_t dxpl_id, haddr_t addr,
|
||||
static H5B_ins_t H5D__btree_insert(H5F_t *f, haddr_t addr,
|
||||
void *_lt_key, hbool_t *lt_key_changed, void *_md_key, void *_udata,
|
||||
void *_rt_key, hbool_t *rt_key_changed, haddr_t *new_node/*out*/);
|
||||
static H5B_ins_t H5D__btree_remove( H5F_t *f, hid_t dxpl_id, haddr_t addr,
|
||||
void *_lt_key, hbool_t *lt_key_changed, void *_udata, void *_rt_key,
|
||||
hbool_t *rt_key_changed);
|
||||
static H5B_ins_t H5D__btree_remove( H5F_t *f, haddr_t addr, void *_lt_key,
|
||||
hbool_t *lt_key_changed, void *_udata, void *_rt_key, hbool_t *rt_key_changed);
|
||||
static herr_t H5D__btree_decode_key(const H5B_shared_t *shared, const uint8_t *raw,
|
||||
void *_key);
|
||||
static herr_t H5D__btree_encode_key(const H5B_shared_t *shared, uint8_t *raw,
|
||||
@ -136,7 +135,7 @@ static herr_t H5D__btree_idx_delete(const H5D_chk_idx_info_t *idx_info);
|
||||
static herr_t H5D__btree_idx_copy_setup(const H5D_chk_idx_info_t *idx_info_src,
|
||||
const H5D_chk_idx_info_t *idx_info_dst);
|
||||
static herr_t H5D__btree_idx_copy_shutdown(H5O_storage_chunk_t *storage_src,
|
||||
H5O_storage_chunk_t *storage_dst, hid_t dxpl_id);
|
||||
H5O_storage_chunk_t *storage_dst);
|
||||
static herr_t H5D__btree_idx_size(const H5D_chk_idx_info_t *idx_info,
|
||||
hsize_t *size);
|
||||
static herr_t H5D__btree_idx_reset(H5O_storage_chunk_t *storage, hbool_t reset_addr);
|
||||
@ -253,9 +252,8 @@ H5D__btree_get_shared(const H5F_t H5_ATTR_UNUSED *f, const void *_udata)
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static herr_t
|
||||
H5D__btree_new_node(H5F_t *f, hid_t H5_ATTR_UNUSED dxpl_id, H5B_ins_t op,
|
||||
void *_lt_key, void *_udata, void *_rt_key,
|
||||
haddr_t *addr_p/*out*/)
|
||||
H5D__btree_new_node(H5F_t *f, H5B_ins_t op, void *_lt_key, void *_udata,
|
||||
void *_rt_key, haddr_t *addr_p/*out*/)
|
||||
{
|
||||
H5D_btree_key_t *lt_key = (H5D_btree_key_t *) _lt_key;
|
||||
H5D_btree_key_t *rt_key = (H5D_btree_key_t *) _rt_key;
|
||||
@ -438,8 +436,8 @@ H5D__btree_cmp3(void *_lt_key, void *_udata, void *_rt_key)
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static htri_t
|
||||
H5D__btree_found(H5F_t H5_ATTR_UNUSED *f, hid_t H5_ATTR_UNUSED dxpl_id, haddr_t addr, const void *_lt_key,
|
||||
void *_udata)
|
||||
H5D__btree_found(H5F_t H5_ATTR_UNUSED *f, haddr_t addr, const void *_lt_key,
|
||||
void *_udata)
|
||||
{
|
||||
H5D_chunk_ud_t *udata = (H5D_chunk_ud_t *) _udata;
|
||||
const H5D_btree_key_t *lt_key = (const H5D_btree_key_t *) _lt_key;
|
||||
@ -537,11 +535,9 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static H5B_ins_t
|
||||
H5D__btree_insert(H5F_t *f, hid_t H5_ATTR_UNUSED dxpl_id, haddr_t addr, void *_lt_key,
|
||||
hbool_t *lt_key_changed,
|
||||
void *_md_key, void *_udata, void *_rt_key,
|
||||
hbool_t H5_ATTR_UNUSED *rt_key_changed,
|
||||
haddr_t *new_node_p/*out*/)
|
||||
H5D__btree_insert(H5F_t *f, haddr_t addr, void *_lt_key, hbool_t *lt_key_changed,
|
||||
void *_md_key, void *_udata, void *_rt_key, hbool_t H5_ATTR_UNUSED *rt_key_changed,
|
||||
haddr_t *new_node_p/*out*/)
|
||||
{
|
||||
H5D_btree_key_t *lt_key = (H5D_btree_key_t *) _lt_key;
|
||||
H5D_btree_key_t *md_key = (H5D_btree_key_t *) _md_key;
|
||||
@ -630,7 +626,7 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static H5B_ins_t
|
||||
H5D__btree_remove(H5F_t *f, hid_t dxpl_id, haddr_t addr, void *_lt_key /*in,out */ ,
|
||||
H5D__btree_remove(H5F_t *f, haddr_t addr, void *_lt_key /*in,out */ ,
|
||||
hbool_t *lt_key_changed /*out */ ,
|
||||
void H5_ATTR_UNUSED * _udata /*in,out */ ,
|
||||
void H5_ATTR_UNUSED * _rt_key /*in,out */ ,
|
||||
@ -643,7 +639,7 @@ H5D__btree_remove(H5F_t *f, hid_t dxpl_id, haddr_t addr, void *_lt_key /*in,out
|
||||
|
||||
/* Remove raw data chunk from file */
|
||||
H5_CHECK_OVERFLOW(lt_key->nbytes, uint32_t, hsize_t);
|
||||
if(H5MF_xfree(f, H5FD_MEM_DRAW, dxpl_id, addr, (hsize_t)lt_key->nbytes) < 0)
|
||||
if(H5MF_xfree(f, H5FD_MEM_DRAW, addr, (hsize_t)lt_key->nbytes) < 0)
|
||||
HGOTO_ERROR(H5E_STORAGE, H5E_CANTFREE, H5B_INS_ERROR, "unable to free chunk")
|
||||
|
||||
/* Mark keys as unchanged */
|
||||
@ -940,7 +936,7 @@ H5D__btree_idx_create(const H5D_chk_idx_info_t *idx_info)
|
||||
udata.storage = idx_info->storage;
|
||||
|
||||
/* Create the v1 B-tree for the chunk index */
|
||||
if(H5B_create(idx_info->f, idx_info->dxpl_id, H5B_BTREE, &udata, &(idx_info->storage->idx_addr)/*out*/) < 0)
|
||||
if(H5B_create(idx_info->f, H5B_BTREE, &udata, &(idx_info->storage->idx_addr)/*out*/) < 0)
|
||||
HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "can't create B-tree")
|
||||
|
||||
done:
|
||||
@ -1004,7 +1000,7 @@ H5D__btree_idx_insert(const H5D_chk_idx_info_t *idx_info, H5D_chunk_ud_t *udata,
|
||||
* Create the chunk it if it doesn't exist, or reallocate the chunk if
|
||||
* its size changed.
|
||||
*/
|
||||
if(H5B_insert(idx_info->f, idx_info->dxpl_id, H5B_BTREE, idx_info->storage->idx_addr, udata) < 0)
|
||||
if(H5B_insert(idx_info->f, H5B_BTREE, idx_info->storage->idx_addr, udata) < 0)
|
||||
HGOTO_ERROR(H5E_IO, H5E_WRITEERROR, FAIL, "unable to allocate chunk")
|
||||
|
||||
done:
|
||||
@ -1043,7 +1039,7 @@ H5D__btree_idx_get_addr(const H5D_chk_idx_info_t *idx_info, H5D_chunk_ud_t *udat
|
||||
HDassert(udata);
|
||||
|
||||
/* Go get the chunk information from the B-tree */
|
||||
if(H5B_find(idx_info->f, idx_info->dxpl_id, H5B_BTREE, idx_info->storage->idx_addr, udata) < 0)
|
||||
if(H5B_find(idx_info->f, H5B_BTREE, idx_info->storage->idx_addr, udata) < 0)
|
||||
HGOTO_ERROR(H5E_DATASET, H5E_CANTGET, FAIL, "can't get chunk info")
|
||||
|
||||
done:
|
||||
@ -1067,9 +1063,8 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static int
|
||||
H5D__btree_idx_iterate_cb(H5F_t H5_ATTR_UNUSED *f, hid_t H5_ATTR_UNUSED dxpl_id,
|
||||
const void *_lt_key, haddr_t addr, const void H5_ATTR_UNUSED *_rt_key,
|
||||
void *_udata)
|
||||
H5D__btree_idx_iterate_cb(H5F_t H5_ATTR_UNUSED *f, const void *_lt_key,
|
||||
haddr_t addr, const void H5_ATTR_UNUSED *_rt_key, void *_udata)
|
||||
{
|
||||
H5D_btree_it_ud_t *udata = (H5D_btree_it_ud_t *)_udata; /* User data */
|
||||
const H5D_btree_key_t *lt_key = (const H5D_btree_key_t *)_lt_key; /* B-tree key for chunk */
|
||||
@ -1137,7 +1132,7 @@ H5D__btree_idx_iterate(const H5D_chk_idx_info_t *idx_info,
|
||||
udata.udata = chunk_udata;
|
||||
|
||||
/* Iterate over existing chunks */
|
||||
if((ret_value = H5B_iterate(idx_info->f, idx_info->dxpl_id, H5B_BTREE, idx_info->storage->idx_addr, H5D__btree_idx_iterate_cb, &udata)) < 0)
|
||||
if((ret_value = H5B_iterate(idx_info->f, H5B_BTREE, idx_info->storage->idx_addr, H5D__btree_idx_iterate_cb, &udata)) < 0)
|
||||
HERROR(H5E_DATASET, H5E_BADITER, "unable to iterate over chunk B-tree");
|
||||
|
||||
FUNC_LEAVE_NOAPI(ret_value)
|
||||
@ -1174,7 +1169,7 @@ H5D__btree_idx_remove(const H5D_chk_idx_info_t *idx_info, H5D_chunk_common_ud_t
|
||||
/* Remove the chunk from the v1 B-tree index and release the space for the
|
||||
* chunk (in the B-tree callback).
|
||||
*/
|
||||
if(H5B_remove(idx_info->f, idx_info->dxpl_id, H5B_BTREE, idx_info->storage->idx_addr, udata) < 0)
|
||||
if(H5B_remove(idx_info->f, H5B_BTREE, idx_info->storage->idx_addr, udata) < 0)
|
||||
HGOTO_ERROR(H5E_DATASET, H5E_CANTDELETE, FAIL, "unable to remove chunk entry")
|
||||
|
||||
done:
|
||||
@ -1228,7 +1223,7 @@ H5D__btree_idx_delete(const H5D_chk_idx_info_t *idx_info)
|
||||
udata.storage = &tmp_storage;
|
||||
|
||||
/* Delete entire B-tree */
|
||||
if(H5B_delete(idx_info->f, idx_info->dxpl_id, H5B_BTREE, tmp_storage.idx_addr, &udata) < 0)
|
||||
if(H5B_delete(idx_info->f, H5B_BTREE, tmp_storage.idx_addr, &udata) < 0)
|
||||
HGOTO_ERROR(H5E_DATASET, H5E_CANTDELETE, FAIL, "unable to delete chunk B-tree")
|
||||
|
||||
/* Release the shared B-tree page */
|
||||
@ -1261,7 +1256,7 @@ H5D__btree_idx_copy_setup(const H5D_chk_idx_info_t *idx_info_src,
|
||||
{
|
||||
herr_t ret_value = SUCCEED; /* Return value */
|
||||
|
||||
FUNC_ENTER_STATIC_TAG(idx_info_dst->dxpl_id, H5AC__COPIED_TAG, FAIL)
|
||||
FUNC_ENTER_STATIC_TAG(H5AC__COPIED_TAG)
|
||||
|
||||
HDassert(idx_info_src);
|
||||
HDassert(idx_info_src->f);
|
||||
@ -1287,7 +1282,7 @@ H5D__btree_idx_copy_setup(const H5D_chk_idx_info_t *idx_info_src,
|
||||
HDassert(H5F_addr_defined(idx_info_dst->storage->idx_addr));
|
||||
|
||||
done:
|
||||
FUNC_LEAVE_NOAPI_TAG(ret_value, FAIL)
|
||||
FUNC_LEAVE_NOAPI_TAG(ret_value)
|
||||
} /* end H5D__btree_idx_copy_setup() */
|
||||
|
||||
|
||||
@ -1305,8 +1300,7 @@ done:
|
||||
*/
|
||||
static herr_t
|
||||
H5D__btree_idx_copy_shutdown(H5O_storage_chunk_t *storage_src,
|
||||
H5O_storage_chunk_t *storage_dst,
|
||||
hid_t H5_ATTR_UNUSED dxpl_id)
|
||||
H5O_storage_chunk_t *storage_dst)
|
||||
{
|
||||
herr_t ret_value = SUCCEED; /* Return value */
|
||||
|
||||
@ -1362,7 +1356,7 @@ H5D__btree_idx_size(const H5D_chk_idx_info_t *idx_info, hsize_t *index_size)
|
||||
udata.storage = idx_info->storage;
|
||||
|
||||
/* Get metadata information for B-tree */
|
||||
if(H5B_get_info(idx_info->f, idx_info->dxpl_id, H5B_BTREE, idx_info->storage->idx_addr, &bt_info, NULL, &udata) < 0)
|
||||
if(H5B_get_info(idx_info->f, H5B_BTREE, idx_info->storage->idx_addr, &bt_info, NULL, &udata) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTINIT, FAIL, "unable to iterate over chunk B-tree")
|
||||
|
||||
/* Set the size of the B-tree */
|
||||
@ -1476,7 +1470,7 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
herr_t
|
||||
H5D_btree_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr, FILE * stream, int indent,
|
||||
H5D_btree_debug(H5F_t *f, haddr_t addr, FILE * stream, int indent,
|
||||
int fwidth, unsigned ndims, const uint32_t *dim)
|
||||
{
|
||||
H5D_btree_dbg_t udata; /* User data for B-tree callback */
|
||||
@ -1510,7 +1504,7 @@ H5D_btree_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr, FILE * stream, int indent
|
||||
udata.ndims = ndims;
|
||||
|
||||
/* Dump the records for the B-tree */
|
||||
(void)H5B_debug(f, dxpl_id, addr, stream, indent, fwidth, H5B_BTREE, &udata);
|
||||
(void)H5B_debug(f, addr, stream, indent, fwidth, H5B_BTREE, &udata);
|
||||
|
||||
done:
|
||||
if(shared_init) {
|
||||
|
@ -60,12 +60,6 @@ typedef struct H5D_bt2_ctx_t {
|
||||
uint32_t *dim; /* Size of chunk in elements */
|
||||
} H5D_bt2_ctx_t;
|
||||
|
||||
/* User data for the chunk's removal callback routine */
|
||||
typedef struct H5D_bt2_remove_ud_t {
|
||||
H5F_t *f; /* File pointer for operation */
|
||||
hid_t dxpl_id; /* DXPL ID for operation */
|
||||
} H5D_bt2_remove_ud_t;
|
||||
|
||||
/* Callback info for iteration over chunks in v2 B-tree */
|
||||
typedef struct H5D_bt2_it_ud_t {
|
||||
H5D_chunk_cb_func_t cb; /* Callback routine for the chunk */
|
||||
@ -137,7 +131,7 @@ static herr_t H5D__bt2_idx_delete(const H5D_chk_idx_info_t *idx_info);
|
||||
static herr_t H5D__bt2_idx_copy_setup(const H5D_chk_idx_info_t *idx_info_src,
|
||||
const H5D_chk_idx_info_t *idx_info_dst);
|
||||
static herr_t H5D__bt2_idx_copy_shutdown(H5O_storage_chunk_t *storage_src,
|
||||
H5O_storage_chunk_t *storage_dst, hid_t dxpl_id);
|
||||
H5O_storage_chunk_t *storage_dst);
|
||||
static herr_t H5D__bt2_idx_size(const H5D_chk_idx_info_t *idx_info, hsize_t *size);
|
||||
static herr_t H5D__bt2_idx_reset(H5O_storage_chunk_t *storage, hbool_t reset_addr);
|
||||
static herr_t H5D__bt2_idx_dump(const H5O_storage_chunk_t *storage,
|
||||
@ -664,7 +658,7 @@ H5D__btree2_idx_depend(const H5D_chk_idx_info_t *idx_info)
|
||||
oloc.addr = idx_info->storage->u.btree.dset_ohdr_addr;
|
||||
|
||||
/* Get header */
|
||||
if(NULL == (oh = H5O_protect(&oloc, idx_info->dxpl_id, H5AC__READ_ONLY_FLAG, TRUE)))
|
||||
if(NULL == (oh = H5O_protect(&oloc, H5AC__READ_ONLY_FLAG, TRUE)))
|
||||
HGOTO_ERROR(H5E_DATASET, H5E_CANTPROTECT, FAIL, "unable to protect object header")
|
||||
|
||||
/* Retrieve the dataset's object header proxy */
|
||||
@ -672,12 +666,12 @@ H5D__btree2_idx_depend(const H5D_chk_idx_info_t *idx_info)
|
||||
HGOTO_ERROR(H5E_DATASET, H5E_CANTGET, FAIL, "unable to get dataset object header proxy")
|
||||
|
||||
/* Make the v2 B-tree a child flush dependency of the dataset's object header proxy */
|
||||
if(H5B2_depend(idx_info->storage->u.btree2.bt2, idx_info->dxpl_id, oh_proxy) < 0)
|
||||
if(H5B2_depend(idx_info->storage->u.btree2.bt2, oh_proxy) < 0)
|
||||
HGOTO_ERROR(H5E_DATASET, H5E_CANTDEPEND, FAIL, "unable to create flush dependency on object header proxy")
|
||||
|
||||
done:
|
||||
/* Release the object header from the cache */
|
||||
if(oh && H5O_unprotect(&oloc, idx_info->dxpl_id, oh, H5AC__NO_FLAGS_SET) < 0)
|
||||
if(oh && H5O_unprotect(&oloc, oh, H5AC__NO_FLAGS_SET) < 0)
|
||||
HDONE_ERROR(H5E_DATASET, H5E_CANTUNPROTECT, FAIL, "unable to release object header")
|
||||
|
||||
FUNC_LEAVE_NOAPI(ret_value)
|
||||
@ -726,7 +720,7 @@ H5D__bt2_idx_open(const H5D_chk_idx_info_t *idx_info)
|
||||
u_ctx.dim = idx_info->layout->dim;
|
||||
|
||||
/* Open v2 B-tree for the chunk index */
|
||||
if(NULL == (idx_info->storage->u.btree2.bt2 = H5B2_open(idx_info->f, idx_info->dxpl_id, idx_info->storage->idx_addr, &u_ctx)))
|
||||
if(NULL == (idx_info->storage->u.btree2.bt2 = H5B2_open(idx_info->f, idx_info->storage->idx_addr, &u_ctx)))
|
||||
HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "can't open v2 B-tree for tracking chunked dataset")
|
||||
|
||||
/* Check for SWMR writes to the file */
|
||||
@ -798,7 +792,7 @@ H5D__bt2_idx_create(const H5D_chk_idx_info_t *idx_info)
|
||||
u_ctx.dim = idx_info->layout->dim;
|
||||
|
||||
/* Create the v2 B-tree for the chunked dataset */
|
||||
if(NULL == (idx_info->storage->u.btree2.bt2 = H5B2_create(idx_info->f, idx_info->dxpl_id, &bt2_cparam, &u_ctx)))
|
||||
if(NULL == (idx_info->storage->u.btree2.bt2 = H5B2_create(idx_info->f, &bt2_cparam, &u_ctx)))
|
||||
HGOTO_ERROR(H5E_DATASET, H5E_CANTCREATE, FAIL, "can't create v2 B-tree for tracking chunked dataset")
|
||||
|
||||
/* Retrieve the v2 B-tree's address in the file */
|
||||
@ -947,7 +941,7 @@ H5D__bt2_idx_insert(const H5D_chk_idx_info_t *idx_info, H5D_chunk_ud_t *udata,
|
||||
bt2_udata.rec.scaled[u] = udata->common.scaled[u];
|
||||
|
||||
/* Update record for v2 B-tree (could be insert or modify) */
|
||||
if(H5B2_update(bt2, idx_info->dxpl_id, &bt2_udata, H5D__bt2_mod_cb, &bt2_udata) < 0)
|
||||
if(H5B2_update(bt2, &bt2_udata, H5D__bt2_mod_cb, &bt2_udata) < 0)
|
||||
HGOTO_ERROR(H5E_DATASET, H5E_CANTUPDATE, FAIL, "unable to update record in v2 B-tree")
|
||||
|
||||
done:
|
||||
@ -1041,7 +1035,7 @@ H5D__bt2_idx_get_addr(const H5D_chk_idx_info_t *idx_info, H5D_chunk_ud_t *udata)
|
||||
bt2_udata.rec.scaled[u] = udata->common.scaled[u];
|
||||
|
||||
/* Go get chunk information from v2 B-tree */
|
||||
if(H5B2_find(bt2, idx_info->dxpl_id, &bt2_udata, H5D__bt2_found_cb, &found_rec) < 0)
|
||||
if(H5B2_find(bt2, &bt2_udata, H5D__bt2_found_cb, &found_rec) < 0)
|
||||
HGOTO_ERROR(H5E_HEAP, H5E_NOTFOUND, FAIL, "can't find object in v2 B-tree")
|
||||
|
||||
/* Set common info for the chunk */
|
||||
@ -1155,7 +1149,7 @@ H5D__bt2_idx_iterate(const H5D_chk_idx_info_t *idx_info,
|
||||
udata.udata = chunk_udata;
|
||||
|
||||
/* Iterate over the records in the v2 B-tree */
|
||||
if((ret_value = H5B2_iterate(bt2, idx_info->dxpl_id, H5D__bt2_idx_iterate_cb, &udata)) < 0)
|
||||
if((ret_value = H5B2_iterate(bt2, H5D__bt2_idx_iterate_cb, &udata)) < 0)
|
||||
HERROR(H5E_DATASET, H5E_BADITER, "unable to iterate over chunk v2 B-tree");
|
||||
|
||||
done:
|
||||
@ -1182,18 +1176,17 @@ static herr_t
|
||||
H5D__bt2_remove_cb(const void *_record, void *_udata)
|
||||
{
|
||||
const H5D_chunk_rec_t *record = (const H5D_chunk_rec_t *)_record; /* The native record */
|
||||
H5D_bt2_remove_ud_t *udata = (H5D_bt2_remove_ud_t *)_udata; /* User data for removal callback */
|
||||
H5F_t *f = (H5F_t *)_udata; /* User data for removal callback */
|
||||
herr_t ret_value = SUCCEED; /* Return value */
|
||||
|
||||
FUNC_ENTER_STATIC
|
||||
|
||||
/* Sanity checks */
|
||||
HDassert(udata);
|
||||
HDassert(udata->f);
|
||||
HDassert(f);
|
||||
|
||||
/* Free the space in the file for the object being removed */
|
||||
H5_CHECK_OVERFLOW(record->nbytes, uint32_t, hsize_t);
|
||||
if(H5MF_xfree(udata->f, H5FD_MEM_DRAW, udata->dxpl_id, record->chunk_addr, (hsize_t)record->nbytes) < 0)
|
||||
if(H5MF_xfree(f, H5FD_MEM_DRAW, record->chunk_addr, (hsize_t)record->nbytes) < 0)
|
||||
HGOTO_ERROR(H5E_DATASET, H5E_CANTFREE, FAIL, "unable to free chunk")
|
||||
|
||||
done:
|
||||
@ -1216,7 +1209,6 @@ static herr_t
|
||||
H5D__bt2_idx_remove(const H5D_chk_idx_info_t *idx_info, H5D_chunk_common_ud_t *udata)
|
||||
{
|
||||
H5B2_t *bt2; /* v2 B-tree handle for indexing chunks */
|
||||
H5D_bt2_remove_ud_t remove_udata; /* User data for removal callback */
|
||||
H5D_bt2_ud_t bt2_udata; /* User data for v2 B-tree find call */
|
||||
unsigned u; /* Local index variable */
|
||||
herr_t ret_value = SUCCEED; /* Return value */
|
||||
@ -1245,10 +1237,6 @@ H5D__bt2_idx_remove(const H5D_chk_idx_info_t *idx_info, H5D_chunk_common_ud_t *u
|
||||
/* Set convenience pointer to v2 B-tree structure */
|
||||
bt2 = idx_info->storage->u.btree2.bt2;
|
||||
|
||||
/* Initialize user data for removal callback */
|
||||
remove_udata.f = idx_info->f;
|
||||
remove_udata.dxpl_id = idx_info->dxpl_id;
|
||||
|
||||
/* Prepare user data for compare callback */
|
||||
bt2_udata.ndims = idx_info->layout->ndims - 1;
|
||||
|
||||
@ -1258,7 +1246,7 @@ H5D__bt2_idx_remove(const H5D_chk_idx_info_t *idx_info, H5D_chunk_common_ud_t *u
|
||||
|
||||
/* Remove the record for the "dataset chunk" object from the v2 B-tree */
|
||||
/* (space in the file for the object is freed in the 'remove' callback) */
|
||||
if(H5B2_remove(bt2, idx_info->dxpl_id, &bt2_udata, (H5F_INTENT(idx_info->f) & H5F_ACC_SWMR_WRITE) ? NULL : H5D__bt2_remove_cb, &remove_udata) < 0)
|
||||
if(H5B2_remove(bt2, &bt2_udata, (H5F_INTENT(idx_info->f) & H5F_ACC_SWMR_WRITE) ? NULL : H5D__bt2_remove_cb, idx_info->f) < 0)
|
||||
HGOTO_ERROR(H5E_DATASET, H5E_CANTREMOVE, FAIL, "can't remove object from B-tree")
|
||||
|
||||
done:
|
||||
@ -1289,7 +1277,6 @@ done:
|
||||
static herr_t
|
||||
H5D__bt2_idx_delete(const H5D_chk_idx_info_t *idx_info)
|
||||
{
|
||||
H5D_bt2_remove_ud_t remove_udata; /* User data for removal callback */
|
||||
H5B2_remove_t remove_op; /* The removal callback */
|
||||
H5D_bt2_ctx_ud_t u_ctx; /* data for context call */
|
||||
herr_t ret_value = SUCCEED; /* Return value */
|
||||
@ -1311,10 +1298,6 @@ H5D__bt2_idx_delete(const H5D_chk_idx_info_t *idx_info)
|
||||
u_ctx.chunk_size = idx_info->layout->size;
|
||||
u_ctx.dim = idx_info->layout->dim;
|
||||
|
||||
/* Initialize user data for removal callback */
|
||||
remove_udata.f = idx_info->f;
|
||||
remove_udata.dxpl_id = idx_info->dxpl_id;
|
||||
|
||||
/* Set remove operation. Do not remove chunks in SWMR_WRITE mode */
|
||||
if(H5F_INTENT(idx_info->f) & H5F_ACC_SWMR_WRITE)
|
||||
remove_op = NULL;
|
||||
@ -1323,7 +1306,7 @@ H5D__bt2_idx_delete(const H5D_chk_idx_info_t *idx_info)
|
||||
|
||||
/* Delete the v2 B-tree */
|
||||
/*(space in the file for each object is freed in the 'remove' callback) */
|
||||
if(H5B2_delete(idx_info->f, idx_info->dxpl_id, idx_info->storage->idx_addr, &u_ctx, remove_op, &remove_udata) < 0)
|
||||
if(H5B2_delete(idx_info->f, idx_info->storage->idx_addr, &u_ctx, remove_op, idx_info->f) < 0)
|
||||
HGOTO_ERROR(H5E_DATASET, H5E_CANTDELETE, FAIL, "can't delete v2 B-tree")
|
||||
|
||||
idx_info->storage->idx_addr = HADDR_UNDEF;
|
||||
@ -1374,7 +1357,7 @@ H5D__bt2_idx_copy_setup(const H5D_chk_idx_info_t *idx_info_src,
|
||||
HGOTO_ERROR(H5E_DATASET, H5E_CANTOPENOBJ, FAIL, "can't open v2 B-tree")
|
||||
|
||||
/* Set copied metadata tag */
|
||||
H5_BEGIN_TAG(idx_info_dst->dxpl_id, H5AC__COPIED_TAG, FAIL);
|
||||
H5_BEGIN_TAG(H5AC__COPIED_TAG);
|
||||
|
||||
/* Create v2 B-tree that describes the chunked dataset in the destination file */
|
||||
if(H5D__bt2_idx_create(idx_info_dst) < 0)
|
||||
@ -1382,7 +1365,7 @@ H5D__bt2_idx_copy_setup(const H5D_chk_idx_info_t *idx_info_src,
|
||||
HDassert(H5F_addr_defined(idx_info_dst->storage->idx_addr));
|
||||
|
||||
/* Reset metadata tag */
|
||||
H5_END_TAG(FAIL);
|
||||
H5_END_TAG
|
||||
|
||||
done:
|
||||
FUNC_LEAVE_NOAPI(ret_value)
|
||||
@ -1402,7 +1385,7 @@ done:
|
||||
*/
|
||||
static herr_t
|
||||
H5D__bt2_idx_copy_shutdown(H5O_storage_chunk_t *storage_src,
|
||||
H5O_storage_chunk_t *storage_dst, hid_t H5_ATTR_UNUSED dxpl_id)
|
||||
H5O_storage_chunk_t *storage_dst)
|
||||
{
|
||||
herr_t ret_value = SUCCEED; /* Return value */
|
||||
|
||||
@ -1415,12 +1398,12 @@ H5D__bt2_idx_copy_shutdown(H5O_storage_chunk_t *storage_src,
|
||||
HDassert(storage_dst->u.btree2.bt2);
|
||||
|
||||
/* Close v2 B-tree for source file */
|
||||
if(H5B2_close(storage_src->u.btree2.bt2, dxpl_id) < 0)
|
||||
if(H5B2_close(storage_src->u.btree2.bt2) < 0)
|
||||
HGOTO_ERROR(H5E_DATASET, H5E_CANTCLOSEOBJ, FAIL, "unable to close v2 B-tree")
|
||||
storage_src->u.btree2.bt2 = NULL;
|
||||
|
||||
/* Close v2 B-tree for destination file */
|
||||
if(H5B2_close(storage_dst->u.btree2.bt2, dxpl_id) < 0)
|
||||
if(H5B2_close(storage_dst->u.btree2.bt2) < 0)
|
||||
HGOTO_ERROR(H5E_DATASET, H5E_CANTCLOSEOBJ, FAIL, "unable to close v2 B-tree")
|
||||
storage_dst->u.btree2.bt2 = NULL;
|
||||
|
||||
@ -1466,12 +1449,12 @@ H5D__bt2_idx_size(const H5D_chk_idx_info_t *idx_info, hsize_t *index_size)
|
||||
bt2_cdset = idx_info->storage->u.btree2.bt2;
|
||||
|
||||
/* Get v2 B-tree size for indexing chunked dataset */
|
||||
if(H5B2_size(bt2_cdset, idx_info->dxpl_id, index_size) < 0)
|
||||
if(H5B2_size(bt2_cdset, index_size) < 0)
|
||||
HGOTO_ERROR(H5E_SYM, H5E_CANTGET, FAIL, "can't retrieve v2 B-tree storage info for chunked dataset")
|
||||
|
||||
done:
|
||||
/* Close v2 B-tree index */
|
||||
if(bt2_cdset && H5B2_close(bt2_cdset, idx_info->dxpl_id) < 0)
|
||||
if(bt2_cdset && H5B2_close(bt2_cdset) < 0)
|
||||
HDONE_ERROR(H5E_SYM, H5E_CLOSEERROR, FAIL, "can't close v2 B-tree for tracking chunked dataset")
|
||||
idx_info->storage->u.btree2.bt2 = NULL;
|
||||
|
||||
@ -1564,7 +1547,7 @@ H5D__bt2_idx_dest(const H5D_chk_idx_info_t *idx_info)
|
||||
HGOTO_ERROR(H5E_DATASET, H5E_CANTOPENOBJ, FAIL, "can't patch v2 B-tree file pointer")
|
||||
|
||||
/* Close v2 B-tree */
|
||||
if(H5B2_close(idx_info->storage->u.btree2.bt2, idx_info->dxpl_id) < 0)
|
||||
if(H5B2_close(idx_info->storage->u.btree2.bt2) < 0)
|
||||
HGOTO_ERROR(H5E_DATASET, H5E_CANTCLOSEOBJ, FAIL, "can't close v2 B-tree")
|
||||
idx_info->storage->u.btree2.bt2 = NULL;
|
||||
} /* end if */
|
||||
|
511
src/H5Dchunk.c
511
src/H5Dchunk.c
File diff suppressed because it is too large
Load Diff
@ -67,8 +67,8 @@ static ssize_t H5D__compact_readvv(const H5D_io_info_t *io_info,
|
||||
static ssize_t H5D__compact_writevv(const H5D_io_info_t *io_info,
|
||||
size_t dset_max_nseq, size_t *dset_curr_seq, size_t dset_size_arr[], hsize_t dset_offset_arr[],
|
||||
size_t mem_max_nseq, size_t *mem_curr_seq, size_t mem_size_arr[], hsize_t mem_offset_arr[]);
|
||||
static herr_t H5D__compact_flush(H5D_t *dset, hid_t dxpl_id);
|
||||
static herr_t H5D__compact_dest(H5D_t *dset, hid_t dxpl_id);
|
||||
static herr_t H5D__compact_flush(H5D_t *dset);
|
||||
static herr_t H5D__compact_dest(H5D_t *dset);
|
||||
|
||||
|
||||
/*********************/
|
||||
@ -117,7 +117,7 @@ H5FL_BLK_EXTERN(type_conv);
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
herr_t
|
||||
H5D__compact_fill(const H5D_t *dset, hid_t dxpl_id)
|
||||
H5D__compact_fill(const H5D_t *dset)
|
||||
{
|
||||
H5D_fill_buf_info_t fb_info; /* Dataset's fill buffer info */
|
||||
hbool_t fb_info_init = FALSE; /* Whether the fill value buffer has been initialized */
|
||||
@ -126,7 +126,6 @@ H5D__compact_fill(const H5D_t *dset, hid_t dxpl_id)
|
||||
FUNC_ENTER_PACKAGE
|
||||
|
||||
/* Check args */
|
||||
HDassert(TRUE == H5P_isa_class(dxpl_id, H5P_DATASET_XFER));
|
||||
HDassert(dset && H5D_COMPACT == dset->shared->layout.type);
|
||||
HDassert(dset->shared->layout.storage.u.compact.buf);
|
||||
HDassert(dset->shared->type);
|
||||
@ -137,14 +136,14 @@ H5D__compact_fill(const H5D_t *dset, hid_t dxpl_id)
|
||||
if(H5D__fill_init(&fb_info, dset->shared->layout.storage.u.compact.buf,
|
||||
NULL, NULL, NULL, NULL,
|
||||
&dset->shared->dcpl_cache.fill, dset->shared->type,
|
||||
dset->shared->type_id, (size_t)0, dset->shared->layout.storage.u.compact.size, dxpl_id) < 0)
|
||||
dset->shared->type_id, (size_t)0, dset->shared->layout.storage.u.compact.size) < 0)
|
||||
HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "can't initialize fill buffer info")
|
||||
fb_info_init = TRUE;
|
||||
|
||||
/* Check for VL datatype & non-default fill value */
|
||||
if(fb_info.has_vlen_fill_type)
|
||||
/* Fill the buffer with VL datatype fill values */
|
||||
if(H5D__fill_refill_vl(&fb_info, fb_info.elmts_per_buf, dxpl_id) < 0)
|
||||
if(H5D__fill_refill_vl(&fb_info, fb_info.elmts_per_buf) < 0)
|
||||
HGOTO_ERROR(H5E_DATASET, H5E_CANTCONVERT, FAIL, "can't refill fill value buffer")
|
||||
|
||||
done:
|
||||
@ -357,7 +356,7 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static herr_t
|
||||
H5D__compact_flush(H5D_t *dset, hid_t dxpl_id)
|
||||
H5D__compact_flush(H5D_t *dset)
|
||||
{
|
||||
herr_t ret_value = SUCCEED; /* Return value */
|
||||
|
||||
@ -369,7 +368,7 @@ H5D__compact_flush(H5D_t *dset, hid_t dxpl_id)
|
||||
/* Check if the buffered compact information is dirty */
|
||||
if(dset->shared->layout.storage.u.compact.dirty) {
|
||||
dset->shared->layout.storage.u.compact.dirty = FALSE;
|
||||
if(H5O_msg_write(&(dset->oloc), H5O_LAYOUT_ID, 0, H5O_UPDATE_TIME, &(dset->shared->layout), dxpl_id) < 0) {
|
||||
if(H5O_msg_write(&(dset->oloc), H5O_LAYOUT_ID, 0, H5O_UPDATE_TIME, &(dset->shared->layout)) < 0) {
|
||||
dset->shared->layout.storage.u.compact.dirty = TRUE;
|
||||
HGOTO_ERROR(H5E_FILE, H5E_CANTINIT, FAIL, "unable to update layout message")
|
||||
}
|
||||
@ -393,7 +392,7 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static herr_t
|
||||
H5D__compact_dest(H5D_t *dset, hid_t H5_ATTR_UNUSED dxpl_id)
|
||||
H5D__compact_dest(H5D_t *dset)
|
||||
{
|
||||
FUNC_ENTER_STATIC_NOERR
|
||||
|
||||
@ -421,8 +420,7 @@ H5D__compact_dest(H5D_t *dset, hid_t H5_ATTR_UNUSED dxpl_id)
|
||||
*/
|
||||
herr_t
|
||||
H5D__compact_copy(H5F_t *f_src, H5O_storage_compact_t *_storage_src, H5F_t *f_dst,
|
||||
H5O_storage_compact_t *storage_dst, H5T_t *dt_src, H5O_copy_t *cpy_info,
|
||||
hid_t dxpl_id)
|
||||
H5O_storage_compact_t *storage_dst, H5T_t *dt_src, H5O_copy_t *cpy_info)
|
||||
{
|
||||
hid_t tid_src = -1; /* Datatype ID for source datatype */
|
||||
hid_t tid_dst = -1; /* Datatype ID for destination datatype */
|
||||
@ -470,7 +468,7 @@ H5D__compact_copy(H5F_t *f_src, H5O_storage_compact_t *_storage_src, H5F_t *f_ds
|
||||
if(NULL == (dt_mem = H5T_copy(dt_src, H5T_COPY_TRANSIENT)))
|
||||
HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "unable to copy")
|
||||
if((tid_mem = H5I_register(H5I_DATATYPE, dt_mem, FALSE)) < 0) {
|
||||
H5T_close(dt_mem);
|
||||
(void)H5T_close_real(dt_mem);
|
||||
HGOTO_ERROR(H5E_DATATYPE, H5E_CANTREGISTER, FAIL, "unable to register memory datatype")
|
||||
} /* end if */
|
||||
|
||||
@ -478,18 +476,18 @@ H5D__compact_copy(H5F_t *f_src, H5O_storage_compact_t *_storage_src, H5F_t *f_ds
|
||||
if(NULL == (dt_dst = H5T_copy(dt_src, H5T_COPY_TRANSIENT)))
|
||||
HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "unable to copy")
|
||||
if(H5T_set_loc(dt_dst, f_dst, H5T_LOC_DISK) < 0) {
|
||||
H5T_close(dt_dst);
|
||||
(void)H5T_close_real(dt_dst);
|
||||
HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "cannot mark datatype on disk")
|
||||
} /* end if */
|
||||
if((tid_dst = H5I_register(H5I_DATATYPE, dt_dst, FALSE)) < 0) {
|
||||
H5T_close(dt_dst);
|
||||
(void)H5T_close_real(dt_dst);
|
||||
HGOTO_ERROR(H5E_DATATYPE, H5E_CANTREGISTER, FAIL, "unable to register destination file datatype")
|
||||
} /* end if */
|
||||
|
||||
/* Set up the conversion functions */
|
||||
if(NULL == (tpath_src_mem = H5T_path_find(dt_src, dt_mem, NULL, NULL, dxpl_id, FALSE)))
|
||||
if(NULL == (tpath_src_mem = H5T_path_find(dt_src, dt_mem)))
|
||||
HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to convert between src and mem datatypes")
|
||||
if(NULL == (tpath_mem_dst = H5T_path_find(dt_mem, dt_dst, NULL, NULL, dxpl_id, FALSE)))
|
||||
if(NULL == (tpath_mem_dst = H5T_path_find(dt_mem, dt_dst)))
|
||||
HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to convert between mem and dst datatypes")
|
||||
|
||||
/* Determine largest datatype size */
|
||||
@ -537,7 +535,7 @@ H5D__compact_copy(H5F_t *f_src, H5O_storage_compact_t *_storage_src, H5F_t *f_ds
|
||||
HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "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, dxpl_id) < 0)
|
||||
if(H5T_convert(tpath_src_mem, tid_src, tid_mem, nelmts, (size_t)0, (size_t)0, buf, bkg) < 0)
|
||||
HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "datatype conversion failed")
|
||||
|
||||
/* Copy into another buffer, to reclaim memory later */
|
||||
@ -547,12 +545,12 @@ H5D__compact_copy(H5F_t *f_src, H5O_storage_compact_t *_storage_src, H5F_t *f_ds
|
||||
HDmemset(bkg, 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, dxpl_id) < 0)
|
||||
if(H5T_convert(tpath_mem_dst, tid_mem, tid_dst, nelmts, (size_t)0, (size_t)0, buf, bkg) < 0)
|
||||
HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "datatype conversion failed")
|
||||
|
||||
HDmemcpy(storage_dst->buf, buf, storage_dst->size);
|
||||
|
||||
if(H5D_vlen_reclaim(tid_mem, buf_space, dxpl_id, reclaim_buf) < 0)
|
||||
if(H5D_vlen_reclaim(tid_mem, buf_space, reclaim_buf) < 0)
|
||||
HGOTO_ERROR(H5E_DATASET, H5E_BADITER, FAIL, "unable to reclaim variable-length data")
|
||||
} /* end if */
|
||||
else if(H5T_get_class(dt_src, FALSE) == H5T_REFERENCE) {
|
||||
@ -565,7 +563,7 @@ H5D__compact_copy(H5F_t *f_src, H5O_storage_compact_t *_storage_src, H5F_t *f_ds
|
||||
ref_count = storage_src->size / H5T_get_size(dt_src);
|
||||
|
||||
/* Copy objects referenced in source buffer to destination file and set destination elements */
|
||||
if(H5O_copy_expand_ref(f_src, storage_src->buf, dxpl_id, f_dst,
|
||||
if(H5O_copy_expand_ref(f_src, storage_src->buf, f_dst,
|
||||
storage_dst->buf, ref_count, H5T_get_ref_type(dt_src), cpy_info) < 0)
|
||||
HGOTO_ERROR(H5E_DATASET, H5E_CANTCOPY, FAIL, "unable to copy reference attribute")
|
||||
} /* end if */
|
||||
|
115
src/H5Dcontig.c
115
src/H5Dcontig.c
@ -32,6 +32,7 @@
|
||||
/* Headers */
|
||||
/***********/
|
||||
#include "H5private.h" /* Generic Functions */
|
||||
#include "H5CXprivate.h" /* API Contexts */
|
||||
#include "H5Dpkg.h" /* Dataset functions */
|
||||
#include "H5Eprivate.h" /* Error handling */
|
||||
#include "H5Fprivate.h" /* Files */
|
||||
@ -60,7 +61,6 @@ typedef struct H5D_contig_readvv_sieve_ud_t {
|
||||
H5D_rdcdc_t *dset_contig; /* Cached information about contiguous data */
|
||||
const H5D_contig_storage_t *store_contig; /* Contiguous storage info for this I/O operation */
|
||||
unsigned char *rbuf; /* Pointer to buffer to fill */
|
||||
hid_t dxpl_id; /* DXPL for operation */
|
||||
} H5D_contig_readvv_sieve_ud_t;
|
||||
|
||||
/* Callback info for [plain] readvv operation */
|
||||
@ -68,7 +68,6 @@ typedef struct H5D_contig_readvv_ud_t {
|
||||
H5F_t *file; /* File for dataset */
|
||||
haddr_t dset_addr; /* Address of dataset */
|
||||
unsigned char *rbuf; /* Pointer to buffer to fill */
|
||||
hid_t dxpl_id; /* DXPL for operation */
|
||||
} H5D_contig_readvv_ud_t;
|
||||
|
||||
/* Callback info for sieve buffer writevv operation */
|
||||
@ -77,7 +76,6 @@ typedef struct H5D_contig_writevv_sieve_ud_t {
|
||||
H5D_rdcdc_t *dset_contig; /* Cached information about contiguous data */
|
||||
const H5D_contig_storage_t *store_contig; /* Contiguous storage info for this I/O operation */
|
||||
const unsigned char *wbuf; /* Pointer to buffer to write */
|
||||
hid_t dxpl_id; /* DXPL for operation */
|
||||
} H5D_contig_writevv_sieve_ud_t;
|
||||
|
||||
/* Callback info for [plain] writevv operation */
|
||||
@ -85,7 +83,6 @@ typedef struct H5D_contig_writevv_ud_t {
|
||||
H5F_t *file; /* File for dataset */
|
||||
haddr_t dset_addr; /* Address of dataset */
|
||||
const unsigned char *wbuf; /* Pointer to buffer to write */
|
||||
hid_t dxpl_id; /* DXPL for operation */
|
||||
} H5D_contig_writevv_ud_t;
|
||||
|
||||
|
||||
@ -95,8 +92,7 @@ typedef struct H5D_contig_writevv_ud_t {
|
||||
|
||||
/* Layout operation callbacks */
|
||||
static herr_t H5D__contig_construct(H5F_t *f, H5D_t *dset);
|
||||
static herr_t H5D__contig_init(H5F_t *f, hid_t dxpl_id, const H5D_t *dset,
|
||||
hid_t dapl_id);
|
||||
static herr_t H5D__contig_init(H5F_t *f, const H5D_t *dset, hid_t dapl_id);
|
||||
static herr_t H5D__contig_io_init(const H5D_io_info_t *io_info, const H5D_type_info_t *type_info,
|
||||
hsize_t nelmts, const H5S_t *file_space, const H5S_t *mem_space,
|
||||
H5D_chunk_map_t *cm);
|
||||
@ -106,7 +102,7 @@ static ssize_t H5D__contig_readvv(const H5D_io_info_t *io_info,
|
||||
static ssize_t H5D__contig_writevv(const H5D_io_info_t *io_info,
|
||||
size_t dset_max_nseq, size_t *dset_curr_seq, size_t dset_len_arr[], hsize_t dset_offset_arr[],
|
||||
size_t mem_max_nseq, size_t *mem_curr_seq, size_t mem_len_arr[], hsize_t mem_offset_arr[]);
|
||||
static herr_t H5D__contig_flush(H5D_t *dset, hid_t dxpl_id);
|
||||
static herr_t H5D__contig_flush(H5D_t *dset);
|
||||
|
||||
/* Helper routines */
|
||||
static herr_t H5D__contig_write_one(H5D_io_info_t *io_info, hsize_t offset,
|
||||
@ -162,7 +158,7 @@ H5FL_BLK_EXTERN(type_conv);
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
herr_t
|
||||
H5D__contig_alloc(H5F_t *f, hid_t dxpl_id, H5O_storage_contig_t *storage /*out */ )
|
||||
H5D__contig_alloc(H5F_t *f, H5O_storage_contig_t *storage /*out */ )
|
||||
{
|
||||
herr_t ret_value = SUCCEED; /* Return value */
|
||||
|
||||
@ -173,7 +169,7 @@ H5D__contig_alloc(H5F_t *f, hid_t dxpl_id, H5O_storage_contig_t *storage /*out *
|
||||
HDassert(storage);
|
||||
|
||||
/* Allocate space for the contiguous data */
|
||||
if(HADDR_UNDEF == (storage->addr = H5MF_alloc(f, H5FD_MEM_DRAW, dxpl_id, storage->size)))
|
||||
if(HADDR_UNDEF == (storage->addr = H5MF_alloc(f, H5FD_MEM_DRAW, storage->size)))
|
||||
HGOTO_ERROR(H5E_IO, H5E_NOSPACE, FAIL, "unable to reserve file space")
|
||||
|
||||
done:
|
||||
@ -199,11 +195,10 @@ H5D__contig_fill(const H5D_io_info_t *io_info)
|
||||
const H5D_t *dset = io_info->dset; /* the dataset pointer */
|
||||
H5D_io_info_t ioinfo; /* Dataset I/O info */
|
||||
H5D_storage_t store; /* Union of storage info for dataset */
|
||||
H5D_dxpl_cache_t _dxpl_cache; /* Data transfer property cache buffer */
|
||||
H5D_dxpl_cache_t *dxpl_cache = &_dxpl_cache; /* Data transfer property cache */
|
||||
hssize_t snpoints; /* Number of points in space (for error checking) */
|
||||
size_t npoints; /* Number of points in space */
|
||||
hsize_t offset; /* Offset of dataset */
|
||||
size_t max_temp_buf; /* Maximum size of temporary buffer */
|
||||
#ifdef H5_HAVE_PARALLEL
|
||||
MPI_Comm mpi_comm = MPI_COMM_NULL; /* MPI communicator for file */
|
||||
int mpi_rank = (-1); /* This process's rank */
|
||||
@ -211,8 +206,6 @@ H5D__contig_fill(const H5D_io_info_t *io_info)
|
||||
hbool_t blocks_written = FALSE; /* Flag to indicate that chunk was actually written */
|
||||
hbool_t using_mpi = FALSE; /* Flag to indicate that the file is being accessed with an MPI-capable file driver */
|
||||
#endif /* H5_HAVE_PARALLEL */
|
||||
hid_t md_dxpl_id = io_info->md_dxpl_id;
|
||||
hid_t raw_dxpl_id = io_info->raw_dxpl_id;
|
||||
H5D_fill_buf_info_t fb_info; /* Dataset's fill buffer info */
|
||||
hbool_t fb_info_init = FALSE; /* Whether the fill value buffer has been initialized */
|
||||
herr_t ret_value = SUCCEED; /* Return value */
|
||||
@ -220,8 +213,6 @@ H5D__contig_fill(const H5D_io_info_t *io_info)
|
||||
FUNC_ENTER_PACKAGE
|
||||
|
||||
/* Check args */
|
||||
HDassert(TRUE == H5P_isa_class(md_dxpl_id, H5P_DATASET_XFER));
|
||||
HDassert(TRUE == H5P_isa_class(raw_dxpl_id, H5P_DATASET_XFER));
|
||||
HDassert(dset && H5D_CONTIGUOUS == dset->shared->layout.type);
|
||||
HDassert(H5F_addr_defined(dset->shared->layout.storage.u.contig.addr));
|
||||
HDassert(dset->shared->layout.storage.u.contig.size > 0);
|
||||
@ -244,10 +235,6 @@ H5D__contig_fill(const H5D_io_info_t *io_info)
|
||||
} /* end if */
|
||||
#endif /* H5_HAVE_PARALLEL */
|
||||
|
||||
/* Fill the DXPL cache values for later use */
|
||||
if(H5D__get_dxpl_cache(raw_dxpl_id, &dxpl_cache) < 0)
|
||||
HGOTO_ERROR(H5E_DATASET, H5E_CANTGET, FAIL, "can't fill dxpl cache")
|
||||
|
||||
/* Initialize storage info for this dataset */
|
||||
store.contig.dset_addr = dset->shared->layout.storage.u.contig.addr;
|
||||
store.contig.dset_size = dset->shared->layout.storage.u.contig.size;
|
||||
@ -257,11 +244,14 @@ H5D__contig_fill(const H5D_io_info_t *io_info)
|
||||
HGOTO_ERROR(H5E_DATASET, H5E_CANTGET, FAIL, "dataset has negative number of elements")
|
||||
H5_CHECKED_ASSIGN(npoints, size_t, snpoints, hssize_t);
|
||||
|
||||
/* Get the maximum size of temporary buffers */
|
||||
if(H5CX_get_max_temp_buf(&max_temp_buf) < 0)
|
||||
HGOTO_ERROR(H5E_DATASET, H5E_CANTGET, FAIL, "can't retrieve max. temp. buf size")
|
||||
|
||||
/* Initialize the fill value buffer */
|
||||
if(H5D__fill_init(&fb_info, NULL, NULL, NULL, NULL, NULL,
|
||||
&dset->shared->dcpl_cache.fill,
|
||||
dset->shared->type, dset->shared->type_id, npoints,
|
||||
dxpl_cache->max_temp_buf, md_dxpl_id) < 0)
|
||||
dset->shared->type, dset->shared->type_id, npoints, max_temp_buf) < 0)
|
||||
HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "can't initialize fill buffer info")
|
||||
fb_info_init = TRUE;
|
||||
|
||||
@ -269,7 +259,7 @@ H5D__contig_fill(const H5D_io_info_t *io_info)
|
||||
offset = 0;
|
||||
|
||||
/* Simple setup for dataset I/O info struct */
|
||||
H5D_BUILD_IO_INFO_WRT(&ioinfo, dset, dxpl_cache, H5AC_ind_read_dxpl_id, raw_dxpl_id, &store, fb_info.fill_buf);
|
||||
H5D_BUILD_IO_INFO_WRT(&ioinfo, dset, &store, fb_info.fill_buf);
|
||||
|
||||
/*
|
||||
* Fill the entire current extent with the fill value. We can do
|
||||
@ -289,7 +279,7 @@ H5D__contig_fill(const H5D_io_info_t *io_info)
|
||||
/* Check for VL datatype & non-default fill value */
|
||||
if(fb_info.has_vlen_fill_type)
|
||||
/* Re-fill the buffer to use for this I/O operation */
|
||||
if(H5D__fill_refill_vl(&fb_info, curr_points, md_dxpl_id) < 0)
|
||||
if(H5D__fill_refill_vl(&fb_info, curr_points) < 0)
|
||||
HGOTO_ERROR(H5E_DATASET, H5E_CANTCONVERT, FAIL, "can't refill fill value buffer")
|
||||
|
||||
#ifdef H5_HAVE_PARALLEL
|
||||
@ -352,7 +342,7 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
herr_t
|
||||
H5D__contig_delete(H5F_t *f, hid_t dxpl_id, const H5O_storage_t *storage)
|
||||
H5D__contig_delete(H5F_t *f, const H5O_storage_t *storage)
|
||||
{
|
||||
herr_t ret_value = SUCCEED; /* Return value */
|
||||
|
||||
@ -363,7 +353,7 @@ H5D__contig_delete(H5F_t *f, hid_t dxpl_id, const H5O_storage_t *storage)
|
||||
HDassert(storage);
|
||||
|
||||
/* Free the file space for the chunk */
|
||||
if(H5MF_xfree(f, H5FD_MEM_DRAW, dxpl_id, storage->u.contig.addr, storage->u.contig.size) < 0)
|
||||
if(H5MF_xfree(f, H5FD_MEM_DRAW, storage->u.contig.addr, storage->u.contig.size) < 0)
|
||||
HGOTO_ERROR(H5E_DATASET, H5E_CANTFREE, FAIL, "unable to free contiguous storage space")
|
||||
|
||||
done:
|
||||
@ -402,7 +392,7 @@ H5D__contig_construct(H5F_t *f, H5D_t *dset)
|
||||
|
||||
/*
|
||||
* The maximum size of the dataset cannot exceed the storage size.
|
||||
* Also, only the slowest varying dimension of a simple data space
|
||||
* Also, only the slowest varying dimension of a simple dataspace
|
||||
* can be extendible (currently only for external data storage).
|
||||
*/
|
||||
|
||||
@ -459,8 +449,8 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static herr_t
|
||||
H5D__contig_init(H5F_t H5_ATTR_UNUSED *f, hid_t H5_ATTR_UNUSED dxpl_id,
|
||||
const H5D_t *dset, hid_t H5_ATTR_UNUSED dapl_id)
|
||||
H5D__contig_init(H5F_t H5_ATTR_UNUSED *f, const H5D_t *dset,
|
||||
hid_t H5_ATTR_UNUSED dapl_id)
|
||||
{
|
||||
hsize_t tmp_size; /* Temporary holder for raw data size */
|
||||
size_t tmp_sieve_buf_size; /* Temporary holder for sieve buffer size */
|
||||
@ -734,7 +724,7 @@ H5D__contig_readvv_sieve_cb(hsize_t dst_off, hsize_t src_off, size_t len,
|
||||
if(NULL == dset_contig->sieve_buf) {
|
||||
/* Check if we can actually hold the I/O request in the sieve buffer */
|
||||
if(len > dset_contig->sieve_buf_size) {
|
||||
if(H5F_block_read(file, H5FD_MEM_DRAW, addr, len, udata->dxpl_id, buf) < 0)
|
||||
if(H5F_block_read(file, H5FD_MEM_DRAW, addr, len, buf) < 0)
|
||||
HGOTO_ERROR(H5E_DATASET, H5E_READERROR, FAIL, "block read failed")
|
||||
} /* end if */
|
||||
else {
|
||||
@ -757,7 +747,7 @@ H5D__contig_readvv_sieve_cb(hsize_t dst_off, hsize_t src_off, size_t len,
|
||||
H5_CHECKED_ASSIGN(dset_contig->sieve_size, size_t, min, hsize_t);
|
||||
|
||||
/* Read the new sieve buffer */
|
||||
if(H5F_block_read(file, H5FD_MEM_DRAW, dset_contig->sieve_loc, dset_contig->sieve_size, udata->dxpl_id, dset_contig->sieve_buf) < 0)
|
||||
if(H5F_block_read(file, H5FD_MEM_DRAW, dset_contig->sieve_loc, dset_contig->sieve_size, dset_contig->sieve_buf) < 0)
|
||||
HGOTO_ERROR(H5E_DATASET, H5E_READERROR, FAIL, "block read failed")
|
||||
|
||||
/* Grab the data out of the buffer (must be first piece of data in buffer ) */
|
||||
@ -793,7 +783,7 @@ H5D__contig_readvv_sieve_cb(hsize_t dst_off, hsize_t src_off, size_t len,
|
||||
/* Flush the sieve buffer, if it's dirty */
|
||||
if(dset_contig->sieve_dirty) {
|
||||
/* Write to file */
|
||||
if(H5F_block_write(file, H5FD_MEM_DRAW, sieve_start, sieve_size, udata->dxpl_id, dset_contig->sieve_buf) < 0)
|
||||
if(H5F_block_write(file, H5FD_MEM_DRAW, sieve_start, sieve_size, dset_contig->sieve_buf) < 0)
|
||||
HGOTO_ERROR(H5E_DATASET, H5E_WRITEERROR, FAIL, "block write failed")
|
||||
|
||||
/* Reset sieve buffer dirty flag */
|
||||
@ -802,7 +792,7 @@ H5D__contig_readvv_sieve_cb(hsize_t dst_off, hsize_t src_off, size_t len,
|
||||
} /* end if */
|
||||
|
||||
/* Read directly into the user's buffer */
|
||||
if(H5F_block_read(file, H5FD_MEM_DRAW, addr, len, udata->dxpl_id, buf) < 0)
|
||||
if(H5F_block_read(file, H5FD_MEM_DRAW, addr, len, buf) < 0)
|
||||
HGOTO_ERROR(H5E_DATASET, H5E_READERROR, FAIL, "block read failed")
|
||||
} /* end if */
|
||||
/* Element size fits within the buffer size */
|
||||
@ -810,7 +800,7 @@ H5D__contig_readvv_sieve_cb(hsize_t dst_off, hsize_t src_off, size_t len,
|
||||
/* Flush the sieve buffer if it's dirty */
|
||||
if(dset_contig->sieve_dirty) {
|
||||
/* Write to file */
|
||||
if(H5F_block_write(file, H5FD_MEM_DRAW, sieve_start, sieve_size, udata->dxpl_id, dset_contig->sieve_buf) < 0)
|
||||
if(H5F_block_write(file, H5FD_MEM_DRAW, sieve_start, sieve_size, dset_contig->sieve_buf) < 0)
|
||||
HGOTO_ERROR(H5E_DATASET, H5E_WRITEERROR, FAIL, "block write failed")
|
||||
|
||||
/* Reset sieve buffer dirty flag */
|
||||
@ -841,7 +831,7 @@ H5D__contig_readvv_sieve_cb(hsize_t dst_off, hsize_t src_off, size_t len,
|
||||
sieve_end = sieve_start + sieve_size;
|
||||
|
||||
/* Read the new sieve buffer */
|
||||
if(H5F_block_read(file, H5FD_MEM_DRAW, dset_contig->sieve_loc, dset_contig->sieve_size, udata->dxpl_id, dset_contig->sieve_buf) < 0)
|
||||
if(H5F_block_read(file, H5FD_MEM_DRAW, dset_contig->sieve_loc, dset_contig->sieve_size, dset_contig->sieve_buf) < 0)
|
||||
HGOTO_ERROR(H5E_DATASET, H5E_READERROR, FAIL, "block read failed")
|
||||
|
||||
/* Grab the data out of the buffer (must be first piece of data in buffer ) */
|
||||
@ -880,7 +870,7 @@ H5D__contig_readvv_cb(hsize_t dst_off, hsize_t src_off, size_t len, void *_udata
|
||||
|
||||
/* Write data */
|
||||
if(H5F_block_read(udata->file, H5FD_MEM_DRAW, (udata->dset_addr + dst_off),
|
||||
len, udata->dxpl_id, (udata->rbuf + src_off)) < 0)
|
||||
len, (udata->rbuf + src_off)) < 0)
|
||||
HGOTO_ERROR(H5E_DATASET, H5E_WRITEERROR, FAIL, "block write failed")
|
||||
|
||||
done:
|
||||
@ -933,7 +923,6 @@ H5D__contig_readvv(const H5D_io_info_t *io_info,
|
||||
udata.dset_contig = &(io_info->dset->shared->cache.contig);
|
||||
udata.store_contig = &(io_info->store->contig);
|
||||
udata.rbuf = (unsigned char *)io_info->u.rbuf;
|
||||
udata.dxpl_id = io_info->raw_dxpl_id;
|
||||
|
||||
/* Call generic sequence operation routine */
|
||||
if((ret_value = H5VM_opvv(dset_max_nseq, dset_curr_seq, dset_len_arr, dset_off_arr,
|
||||
@ -948,7 +937,6 @@ H5D__contig_readvv(const H5D_io_info_t *io_info,
|
||||
udata.file = io_info->dset->oloc.file;
|
||||
udata.dset_addr = io_info->store->contig.dset_addr;
|
||||
udata.rbuf = (unsigned char *)io_info->u.rbuf;
|
||||
udata.dxpl_id = io_info->raw_dxpl_id;
|
||||
|
||||
/* Call generic sequence operation routine */
|
||||
if((ret_value = H5VM_opvv(dset_max_nseq, dset_curr_seq, dset_len_arr, dset_off_arr,
|
||||
@ -1011,7 +999,7 @@ H5D__contig_writevv_sieve_cb(hsize_t dst_off, hsize_t src_off, size_t len,
|
||||
if(NULL == dset_contig->sieve_buf) {
|
||||
/* Check if we can actually hold the I/O request in the sieve buffer */
|
||||
if(len > dset_contig->sieve_buf_size) {
|
||||
if(H5F_block_write(file, H5FD_MEM_DRAW, addr, len, udata->dxpl_id, buf) < 0)
|
||||
if(H5F_block_write(file, H5FD_MEM_DRAW, addr, len, buf) < 0)
|
||||
HGOTO_ERROR(H5E_DATASET, H5E_WRITEERROR, FAIL, "block write failed")
|
||||
} /* end if */
|
||||
else {
|
||||
@ -1040,7 +1028,7 @@ H5D__contig_writevv_sieve_cb(hsize_t dst_off, hsize_t src_off, size_t len,
|
||||
/* Check if there is any point in reading the data from the file */
|
||||
if(dset_contig->sieve_size > len) {
|
||||
/* Read the new sieve buffer */
|
||||
if(H5F_block_read(file, H5FD_MEM_DRAW, dset_contig->sieve_loc, dset_contig->sieve_size, udata->dxpl_id, dset_contig->sieve_buf) < 0)
|
||||
if(H5F_block_read(file, H5FD_MEM_DRAW, dset_contig->sieve_loc, dset_contig->sieve_size, dset_contig->sieve_buf) < 0)
|
||||
HGOTO_ERROR(H5E_DATASET, H5E_READERROR, FAIL, "block read failed")
|
||||
} /* end if */
|
||||
|
||||
@ -1080,7 +1068,7 @@ H5D__contig_writevv_sieve_cb(hsize_t dst_off, hsize_t src_off, size_t len,
|
||||
/* Flush the sieve buffer, if it's dirty */
|
||||
if(dset_contig->sieve_dirty) {
|
||||
/* Write to file */
|
||||
if(H5F_block_write(file, H5FD_MEM_DRAW, sieve_start, sieve_size, udata->dxpl_id, dset_contig->sieve_buf) < 0)
|
||||
if(H5F_block_write(file, H5FD_MEM_DRAW, sieve_start, sieve_size, dset_contig->sieve_buf) < 0)
|
||||
HGOTO_ERROR(H5E_DATASET, H5E_WRITEERROR, FAIL, "block write failed")
|
||||
|
||||
/* Reset sieve buffer dirty flag */
|
||||
@ -1093,7 +1081,7 @@ H5D__contig_writevv_sieve_cb(hsize_t dst_off, hsize_t src_off, size_t len,
|
||||
} /* end if */
|
||||
|
||||
/* Write directly from the user's buffer */
|
||||
if(H5F_block_write(file, H5FD_MEM_DRAW, addr, len, udata->dxpl_id, buf) < 0)
|
||||
if(H5F_block_write(file, H5FD_MEM_DRAW, addr, len, buf) < 0)
|
||||
HGOTO_ERROR(H5E_DATASET, H5E_WRITEERROR, FAIL, "block write failed")
|
||||
} /* end if */
|
||||
/* Element size fits within the buffer size */
|
||||
@ -1133,7 +1121,7 @@ H5D__contig_writevv_sieve_cb(hsize_t dst_off, hsize_t src_off, size_t len,
|
||||
/* Flush the sieve buffer if it's dirty */
|
||||
if(dset_contig->sieve_dirty) {
|
||||
/* Write to file */
|
||||
if(H5F_block_write(file, H5FD_MEM_DRAW, sieve_start, sieve_size, udata->dxpl_id, dset_contig->sieve_buf) < 0)
|
||||
if(H5F_block_write(file, H5FD_MEM_DRAW, sieve_start, sieve_size, dset_contig->sieve_buf) < 0)
|
||||
HGOTO_ERROR(H5E_DATASET, H5E_WRITEERROR, FAIL, "block write failed")
|
||||
|
||||
/* Reset sieve buffer dirty flag */
|
||||
@ -1166,7 +1154,7 @@ H5D__contig_writevv_sieve_cb(hsize_t dst_off, hsize_t src_off, size_t len,
|
||||
/* Check if there is any point in reading the data from the file */
|
||||
if(dset_contig->sieve_size > len) {
|
||||
/* Read the new sieve buffer */
|
||||
if(H5F_block_read(file, H5FD_MEM_DRAW, dset_contig->sieve_loc, dset_contig->sieve_size, udata->dxpl_id, dset_contig->sieve_buf) < 0)
|
||||
if(H5F_block_read(file, H5FD_MEM_DRAW, dset_contig->sieve_loc, dset_contig->sieve_size, dset_contig->sieve_buf) < 0)
|
||||
HGOTO_ERROR(H5E_DATASET, H5E_READERROR, FAIL, "block read failed")
|
||||
} /* end if */
|
||||
|
||||
@ -1206,7 +1194,7 @@ H5D__contig_writevv_cb(hsize_t dst_off, hsize_t src_off, size_t len, void *_udat
|
||||
FUNC_ENTER_STATIC
|
||||
|
||||
/* Write data */
|
||||
if(H5F_block_write(udata->file, H5FD_MEM_DRAW, (udata->dset_addr + dst_off), len, udata->dxpl_id, (udata->wbuf + src_off)) < 0)
|
||||
if(H5F_block_write(udata->file, H5FD_MEM_DRAW, (udata->dset_addr + dst_off), len, (udata->wbuf + src_off)) < 0)
|
||||
HGOTO_ERROR(H5E_DATASET, H5E_WRITEERROR, FAIL, "block write failed")
|
||||
|
||||
done:
|
||||
@ -1259,7 +1247,6 @@ H5D__contig_writevv(const H5D_io_info_t *io_info,
|
||||
udata.dset_contig = &(io_info->dset->shared->cache.contig);
|
||||
udata.store_contig = &(io_info->store->contig);
|
||||
udata.wbuf = (const unsigned char *)io_info->u.wbuf;
|
||||
udata.dxpl_id = io_info->raw_dxpl_id;
|
||||
|
||||
/* Call generic sequence operation routine */
|
||||
if((ret_value = H5VM_opvv(dset_max_nseq, dset_curr_seq, dset_len_arr, dset_off_arr,
|
||||
@ -1274,7 +1261,6 @@ H5D__contig_writevv(const H5D_io_info_t *io_info,
|
||||
udata.file = io_info->dset->oloc.file;
|
||||
udata.dset_addr = io_info->store->contig.dset_addr;
|
||||
udata.wbuf = (const unsigned char *)io_info->u.wbuf;
|
||||
udata.dxpl_id = io_info->raw_dxpl_id;
|
||||
|
||||
/* Call generic sequence operation routine */
|
||||
if((ret_value = H5VM_opvv(dset_max_nseq, dset_curr_seq, dset_len_arr, dset_off_arr,
|
||||
@ -1301,7 +1287,7 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static herr_t
|
||||
H5D__contig_flush(H5D_t *dset, hid_t H5_ATTR_UNUSED dxpl_id)
|
||||
H5D__contig_flush(H5D_t *dset)
|
||||
{
|
||||
herr_t ret_value = SUCCEED; /* Return value */
|
||||
|
||||
@ -1310,9 +1296,8 @@ H5D__contig_flush(H5D_t *dset, hid_t H5_ATTR_UNUSED dxpl_id)
|
||||
/* Sanity check */
|
||||
HDassert(dset);
|
||||
|
||||
/* Flush any data in sieve buffer - use the raw data dxpl since
|
||||
the one passed in is a metadata dxpl. */
|
||||
if(H5D__flush_sieve_buf(dset, H5AC_rawdata_dxpl_id) < 0)
|
||||
/* Flush any data in sieve buffer */
|
||||
if(H5D__flush_sieve_buf(dset) < 0)
|
||||
HGOTO_ERROR(H5E_DATASET, H5E_CANTFLUSH, FAIL, "unable to flush sieve buffer")
|
||||
|
||||
done:
|
||||
@ -1335,7 +1320,7 @@ done:
|
||||
herr_t
|
||||
H5D__contig_copy(H5F_t *f_src, const H5O_storage_contig_t *storage_src,
|
||||
H5F_t *f_dst, H5O_storage_contig_t *storage_dst, H5T_t *dt_src,
|
||||
H5O_copy_t *cpy_info, hid_t dxpl_id)
|
||||
H5O_copy_t *cpy_info)
|
||||
{
|
||||
haddr_t addr_src; /* File offset in source dataset */
|
||||
haddr_t addr_dst; /* File offset in destination dataset */
|
||||
@ -1379,7 +1364,7 @@ H5D__contig_copy(H5F_t *f_src, const H5O_storage_contig_t *storage_src,
|
||||
HDassert(dt_src);
|
||||
|
||||
/* Allocate space for destination raw data */
|
||||
if(H5D__contig_alloc(f_dst, dxpl_id, storage_dst) < 0)
|
||||
if(H5D__contig_alloc(f_dst, storage_dst) < 0)
|
||||
HGOTO_ERROR(H5E_IO, H5E_CANTINIT, FAIL, "unable to allocate contiguous storage")
|
||||
|
||||
/* Set up number of bytes to copy, and initial buffer size */
|
||||
@ -1400,7 +1385,7 @@ H5D__contig_copy(H5F_t *f_src, const H5O_storage_contig_t *storage_src,
|
||||
if(NULL == (dt_mem = H5T_copy(dt_src, H5T_COPY_TRANSIENT)))
|
||||
HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "unable to copy")
|
||||
if((tid_mem = H5I_register(H5I_DATATYPE, dt_mem, FALSE)) < 0) {
|
||||
H5T_close(dt_mem);
|
||||
(void)H5T_close_real(dt_mem);
|
||||
HGOTO_ERROR(H5E_DATASET, H5E_CANTREGISTER, FAIL, "unable to register memory datatype")
|
||||
} /* end if */
|
||||
|
||||
@ -1408,18 +1393,18 @@ H5D__contig_copy(H5F_t *f_src, const H5O_storage_contig_t *storage_src,
|
||||
if(NULL == (dt_dst = H5T_copy(dt_src, H5T_COPY_TRANSIENT)))
|
||||
HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to copy")
|
||||
if(H5T_set_loc(dt_dst, f_dst, H5T_LOC_DISK) < 0) {
|
||||
H5T_close(dt_dst);
|
||||
(void)H5T_close_real(dt_dst);
|
||||
HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "cannot mark datatype on disk")
|
||||
} /* end if */
|
||||
if((tid_dst = H5I_register(H5I_DATATYPE, dt_dst, FALSE)) < 0) {
|
||||
H5T_close(dt_dst);
|
||||
(void)H5T_close_real(dt_dst);
|
||||
HGOTO_ERROR(H5E_DATASET, H5E_CANTREGISTER, FAIL, "unable to register destination file datatype")
|
||||
} /* end if */
|
||||
|
||||
/* Set up the conversion functions */
|
||||
if(NULL == (tpath_src_mem = H5T_path_find(dt_src, dt_mem, NULL, NULL, dxpl_id, FALSE)))
|
||||
if(NULL == (tpath_src_mem = H5T_path_find(dt_src, dt_mem)))
|
||||
HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to convert between src and mem datatypes")
|
||||
if(NULL == (tpath_mem_dst = H5T_path_find(dt_mem, dt_dst, NULL, NULL, dxpl_id, FALSE)))
|
||||
if(NULL == (tpath_mem_dst = H5T_path_find(dt_mem, dt_dst)))
|
||||
HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to convert between mem and dst datatypes")
|
||||
|
||||
/* Determine largest datatype size */
|
||||
@ -1531,14 +1516,14 @@ H5D__contig_copy(H5F_t *f_src, const H5O_storage_contig_t *storage_src,
|
||||
|
||||
HDmemcpy(buf, base_sieve_buf, src_nbytes);
|
||||
} else
|
||||
/* Read raw data from source file - use raw dxpl because passed in one is metadata */
|
||||
if(H5F_block_read(f_src, H5FD_MEM_DRAW, addr_src, src_nbytes, H5AC_rawdata_dxpl_id, buf) < 0)
|
||||
/* Read raw data from source file */
|
||||
if(H5F_block_read(f_src, H5FD_MEM_DRAW, addr_src, src_nbytes, buf) < 0)
|
||||
HGOTO_ERROR(H5E_DATASET, H5E_READERROR, FAIL, "unable to read raw data")
|
||||
|
||||
/* Perform datatype conversion, if necessary */
|
||||
if(is_vlen) {
|
||||
/* 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, dxpl_id) < 0)
|
||||
if(H5T_convert(tpath_src_mem, tid_src, tid_mem, nelmts, (size_t)0, (size_t)0, buf, bkg) < 0)
|
||||
HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "datatype conversion failed")
|
||||
|
||||
/* Copy into another buffer, to reclaim memory later */
|
||||
@ -1548,11 +1533,11 @@ H5D__contig_copy(H5F_t *f_src, const H5O_storage_contig_t *storage_src,
|
||||
HDmemset(bkg, 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, dxpl_id) < 0)
|
||||
if(H5T_convert(tpath_mem_dst, tid_mem, tid_dst, nelmts, (size_t)0, (size_t)0, buf, bkg) < 0)
|
||||
HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "datatype conversion failed")
|
||||
|
||||
/* Reclaim space from variable length data */
|
||||
if(H5D_vlen_reclaim(tid_mem, buf_space, dxpl_id, reclaim_buf) < 0)
|
||||
if(H5D_vlen_reclaim(tid_mem, buf_space, reclaim_buf) < 0)
|
||||
HGOTO_ERROR(H5E_DATASET, H5E_BADITER, FAIL, "unable to reclaim variable-length data")
|
||||
} /* end if */
|
||||
else if(fix_ref) {
|
||||
@ -1564,7 +1549,7 @@ H5D__contig_copy(H5F_t *f_src, const H5O_storage_contig_t *storage_src,
|
||||
ref_count = src_nbytes / H5T_get_size(dt_src);
|
||||
|
||||
/* Copy the reference elements */
|
||||
if(H5O_copy_expand_ref(f_src, buf, dxpl_id, f_dst, bkg, ref_count, H5T_get_ref_type(dt_src), cpy_info) < 0)
|
||||
if(H5O_copy_expand_ref(f_src, buf, f_dst, bkg, ref_count, H5T_get_ref_type(dt_src), cpy_info) < 0)
|
||||
HGOTO_ERROR(H5E_DATASET, H5E_CANTCOPY, FAIL, "unable to copy reference attribute")
|
||||
|
||||
/* After fix ref, copy the new reference elements to the buffer to write out */
|
||||
@ -1575,8 +1560,8 @@ H5D__contig_copy(H5F_t *f_src, const H5O_storage_contig_t *storage_src,
|
||||
HDmemset(buf, 0, src_nbytes);
|
||||
} /* end if */
|
||||
|
||||
/* Write raw data to destination file - use raw dxpl because passed in one is metadata */
|
||||
if(H5F_block_write(f_dst, H5FD_MEM_DRAW, addr_dst, dst_nbytes, H5AC_rawdata_dxpl_id, buf) < 0)
|
||||
/* Write raw data to destination file */
|
||||
if(H5F_block_write(f_dst, H5FD_MEM_DRAW, addr_dst, dst_nbytes, buf) < 0)
|
||||
HGOTO_ERROR(H5E_DATASET, H5E_WRITEERROR, FAIL, "unable to write raw data")
|
||||
|
||||
/* Adjust loop variables */
|
||||
|
@ -22,6 +22,7 @@
|
||||
/* Headers */
|
||||
/***********/
|
||||
#include "H5private.h" /* Generic Functions */
|
||||
#include "H5CXprivate.h" /* API Contexts */
|
||||
#include "H5Dpkg.h" /* Datasets */
|
||||
#include "H5Eprivate.h" /* Error handling */
|
||||
#include "H5Iprivate.h" /* IDs */
|
||||
@ -88,7 +89,7 @@ H5Ddebug(hid_t dset_id)
|
||||
|
||||
/* Print B-tree information */
|
||||
if(H5D_CHUNKED == dset->shared->layout.type)
|
||||
(void)H5D__chunk_dump_index(dset, H5AC_ind_read_dxpl_id, stdout);
|
||||
(void)H5D__chunk_dump_index(dset, stdout);
|
||||
else if(H5D_CONTIGUOUS == dset->shared->layout.type)
|
||||
HDfprintf(stdout, " %-10s %a\n", "Address:", dset->shared->layout.storage.u.contig.addr);
|
||||
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user