summaryrefslogtreecommitdiffstats
path: root/testpar/t_file.c
diff options
context:
space:
mode:
authorjhendersonHDF <jhenderson@hdfgroup.org>2023-08-18 20:59:25 (GMT)
committerGitHub <noreply@github.com>2023-08-18 20:59:25 (GMT)
commit98b8fa7469345ec024acd9c4ee192fd60015b9e3 (patch)
tree303554ab76cede81966b4d70f4d55eccb4885239 /testpar/t_file.c
parent7025c5f10918638254bec883abacbebf148d79cf (diff)
downloadhdf5-98b8fa7469345ec024acd9c4ee192fd60015b9e3.zip
hdf5-98b8fa7469345ec024acd9c4ee192fd60015b9e3.tar.gz
hdf5-98b8fa7469345ec024acd9c4ee192fd60015b9e3.tar.bz2
Fix assertion failure during file close on error (#3387)
Diffstat (limited to 'testpar/t_file.c')
-rw-r--r--testpar/t_file.c51
1 files changed, 51 insertions, 0 deletions
diff --git a/testpar/t_file.c b/testpar/t_file.c
index 314a60c..9338344 100644
--- a/testpar/t_file.c
+++ b/testpar/t_file.c
@@ -1009,3 +1009,54 @@ test_delete(void)
VRFY((SUCCEED == ret), "H5Pclose");
} /* end test_delete() */
+
+/*
+ * Tests for an assertion failure during file close that used
+ * to occur when the library fails to create a file in parallel
+ * due to an invalid library version bounds setting
+ */
+void
+test_invalid_libver_bounds_file_close_assert(void)
+{
+ const char *filename = NULL;
+ MPI_Comm comm = MPI_COMM_WORLD;
+ MPI_Info info = MPI_INFO_NULL;
+ herr_t ret;
+ hid_t fid = H5I_INVALID_HID;
+ hid_t fapl_id = H5I_INVALID_HID;
+ hid_t fcpl_id = H5I_INVALID_HID;
+
+ filename = (const char *)GetTestParameters();
+
+ /* set up MPI parameters */
+ MPI_Comm_size(MPI_COMM_WORLD, &mpi_size);
+ MPI_Comm_rank(MPI_COMM_WORLD, &mpi_rank);
+
+ /* setup file access plist */
+ fapl_id = H5Pcreate(H5P_FILE_ACCESS);
+ VRFY((fapl_id != H5I_INVALID_HID), "H5Pcreate");
+ ret = H5Pset_fapl_mpio(fapl_id, comm, info);
+ VRFY((SUCCEED == ret), "H5Pset_fapl_mpio");
+ ret = H5Pset_libver_bounds(fapl_id, H5F_LIBVER_EARLIEST, H5F_LIBVER_V18);
+ VRFY((SUCCEED == ret), "H5Pset_libver_bounds");
+
+ /* setup file creation plist */
+ fcpl_id = H5Pcreate(H5P_FILE_CREATE);
+ VRFY((fcpl_id != H5I_INVALID_HID), "H5Pcreate");
+
+ ret = H5Pset_file_space_strategy(fcpl_id, H5F_FSPACE_STRATEGY_PAGE, TRUE, 1);
+ VRFY((SUCCEED == ret), "H5Pset_file_space_strategy");
+
+ /* create the file */
+ H5E_BEGIN_TRY
+ {
+ fid = H5Fcreate(filename, H5F_ACC_TRUNC, fcpl_id, fapl_id);
+ }
+ H5E_END_TRY
+ VRFY((fid == H5I_INVALID_HID), "H5Fcreate");
+
+ ret = H5Pclose(fapl_id);
+ VRFY((SUCCEED == ret), "H5Pclose");
+ ret = H5Pclose(fcpl_id);
+ VRFY((SUCCEED == ret), "H5Pclose");
+}