summaryrefslogtreecommitdiffstats
path: root/src/H5Fint.c
diff options
context:
space:
mode:
authorjhendersonHDF <jhenderson@hdfgroup.org>2021-02-24 10:24:47 (GMT)
committerGitHub <noreply@github.com>2021-02-24 10:24:47 (GMT)
commit7c507003c7585837dace9bbbec9fde7a80802dbf (patch)
treeaed5375b53055c2c57cadf4886f2eb3aaccd602f /src/H5Fint.c
parent2d8913c615b337d18fc35c74decff9a589a632d1 (diff)
downloadhdf5-7c507003c7585837dace9bbbec9fde7a80802dbf.zip
hdf5-7c507003c7585837dace9bbbec9fde7a80802dbf.tar.gz
hdf5-7c507003c7585837dace9bbbec9fde7a80802dbf.tar.bz2
Fix for HDFFV-11109 - Copy MPI comm and info object into output FAPL from H5F_get_access_plist (#342) (#374)
* Avoid freeing MPI_COMM_WORLD in H5_mpi_comm_free * Copy MPI Comm and Info to new FAPL in H5F_get_access_plist
Diffstat (limited to 'src/H5Fint.c')
-rw-r--r--src/H5Fint.c28
1 files changed, 22 insertions, 6 deletions
diff --git a/src/H5Fint.c b/src/H5Fint.c
index c0aa979..2fbbd37 100644
--- a/src/H5Fint.c
+++ b/src/H5Fint.c
@@ -414,24 +414,40 @@ H5F_get_access_plist(H5F_t *f, hbool_t app_ref)
if (f->shared->efc)
efc_size = H5F__efc_max_nfiles(f->shared->efc);
if (H5P_set(new_plist, H5F_ACS_EFC_SIZE_NAME, &efc_size) < 0)
- HGOTO_ERROR(H5E_FILE, H5E_CANTGET, H5I_INVALID_HID, "can't set elink file cache size")
+ HGOTO_ERROR(H5E_FILE, H5E_CANTSET, H5I_INVALID_HID, "can't set elink file cache size")
if (f->shared->page_buf != NULL) {
if (H5P_set(new_plist, H5F_ACS_PAGE_BUFFER_SIZE_NAME, &(f->shared->page_buf->max_size)) < 0)
- HGOTO_ERROR(H5E_FILE, H5E_CANTGET, H5I_INVALID_HID, "can't set page buffer size")
+ HGOTO_ERROR(H5E_FILE, H5E_CANTSET, H5I_INVALID_HID, "can't set page buffer size")
if (H5P_set(new_plist, H5F_ACS_PAGE_BUFFER_MIN_META_PERC_NAME,
&(f->shared->page_buf->min_meta_perc)) < 0)
- HGOTO_ERROR(H5E_FILE, H5E_CANTGET, H5I_INVALID_HID,
+ HGOTO_ERROR(H5E_FILE, H5E_CANTSET, H5I_INVALID_HID,
"can't set minimum metadata fraction of page buffer")
if (H5P_set(new_plist, H5F_ACS_PAGE_BUFFER_MIN_RAW_PERC_NAME, &(f->shared->page_buf->min_raw_perc)) <
0)
- HGOTO_ERROR(H5E_FILE, H5E_CANTGET, H5I_INVALID_HID,
+ HGOTO_ERROR(H5E_FILE, H5E_CANTSET, H5I_INVALID_HID,
"can't set minimum raw data fraction of page buffer")
} /* end if */
#ifdef H5_HAVE_PARALLEL
if (H5P_set(new_plist, H5_COLL_MD_READ_FLAG_NAME, &(f->shared->coll_md_read)) < 0)
- HGOTO_ERROR(H5E_FILE, H5E_CANTGET, H5I_INVALID_HID, "can't set collective metadata read flag")
+ HGOTO_ERROR(H5E_FILE, H5E_CANTSET, H5I_INVALID_HID, "can't set collective metadata read flag")
if (H5P_set(new_plist, H5F_ACS_COLL_MD_WRITE_FLAG_NAME, &(f->shared->coll_md_write)) < 0)
- HGOTO_ERROR(H5E_FILE, H5E_CANTGET, H5I_INVALID_HID, "can't set collective metadata read flag")
+ HGOTO_ERROR(H5E_FILE, H5E_CANTSET, H5I_INVALID_HID, "can't set collective metadata read flag")
+ if (H5F_HAS_FEATURE(f, H5FD_FEAT_HAS_MPI)) {
+ MPI_Comm mpi_comm;
+ MPI_Info mpi_info;
+
+ /* Retrieve and set MPI communicator */
+ if (MPI_COMM_NULL == (mpi_comm = H5F_mpi_get_comm(f)))
+ HGOTO_ERROR(H5E_FILE, H5E_CANTGET, H5I_INVALID_HID, "can't get MPI communicator")
+ if (H5P_set(new_plist, H5F_ACS_MPI_PARAMS_COMM_NAME, &mpi_comm) < 0)
+ HGOTO_ERROR(H5E_FILE, H5E_CANTSET, H5I_INVALID_HID, "can't set MPI communicator")
+
+ /* Retrieve and set MPI info object */
+ if (H5P_get(old_plist, H5F_ACS_MPI_PARAMS_INFO_NAME, &mpi_info) < 0)
+ HGOTO_ERROR(H5E_FILE, H5E_CANTGET, H5I_INVALID_HID, "can't get MPI info object")
+ if (H5P_set(new_plist, H5F_ACS_MPI_PARAMS_INFO_NAME, &mpi_info) < 0)
+ HGOTO_ERROR(H5E_FILE, H5E_CANTSET, H5I_INVALID_HID, "can't set MPI info object")
+ }
#endif /* H5_HAVE_PARALLEL */
if (H5P_set(new_plist, H5F_ACS_META_CACHE_INIT_IMAGE_CONFIG_NAME, &(f->shared->mdc_initCacheImageCfg)) <
0)