From: Augustin Degomme Date: Mon, 19 Aug 2019 08:50:38 +0000 (+0200) Subject: For File, we can change the default error handler by specifying MPI_FILE_NULL as... X-Git-Tag: v3.24~153 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/db851eaf612a7822372da53b791b396cbec88a70 For File, we can change the default error handler by specifying MPI_FILE_NULL as the fh argument --- diff --git a/src/smpi/bindings/smpi_pmpi_file.cpp b/src/smpi/bindings/smpi_pmpi_file.cpp index 42e336a011..41e1a383bd 100644 --- a/src/smpi/bindings/smpi_pmpi_file.cpp +++ b/src/smpi/bindings/smpi_pmpi_file.cpp @@ -8,6 +8,8 @@ #include "smpi_file.hpp" #include "smpi_datatype.hpp" +extern MPI_Errhandler SMPI_default_File_Errhandler; + int PMPI_File_open(MPI_Comm comm, const char *filename, int amode, MPI_Info info, MPI_File *fh){ if (comm == MPI_COMM_NULL) return MPI_ERR_COMM; @@ -370,20 +372,22 @@ int PMPI_File_create_errhandler(MPI_File_errhandler_function* function, MPI_Errh } int PMPI_File_get_errhandler(MPI_File file, MPI_Errhandler* errhandler){ - if (file == nullptr) { - return MPI_ERR_FILE; - } else if (errhandler==nullptr){ + if (errhandler==nullptr){ return MPI_ERR_ARG; + } else if (file == MPI_FILE_NULL) { + *errhandler = SMPI_default_File_Errhandler; + return MPI_SUCCESS; } *errhandler=file->errhandler(); return MPI_SUCCESS; } int PMPI_File_set_errhandler(MPI_File file, MPI_Errhandler errhandler){ - if (file == nullptr) { - return MPI_ERR_FILE; - } else if (errhandler==nullptr){ + if (errhandler==nullptr){ return MPI_ERR_ARG; + } else if (file == MPI_FILE_NULL) { + SMPI_default_File_Errhandler = errhandler; + return MPI_SUCCESS; } file->set_errhandler(errhandler); return MPI_SUCCESS; diff --git a/src/smpi/mpi/smpi_file.cpp b/src/smpi/mpi/smpi_file.cpp index a7d4c60283..b47984eec6 100644 --- a/src/smpi/mpi/smpi_file.cpp +++ b/src/smpi/mpi/smpi_file.cpp @@ -19,6 +19,8 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(smpi_io, smpi, "Logging specific to SMPI (RMA operations)"); +MPI_Errhandler SMPI_default_File_Errhandler = MPI_ERRORS_RETURN; + namespace simgrid{ namespace smpi{ @@ -28,7 +30,7 @@ namespace smpi{ if (comm_->rank() == 0) { int size= comm_->size() + FP_SIZE; list_ = new char[size]; - errhandler_=MPI_ERRORS_RETURN; + errhandler_= SMPI_default_File_Errhandler; memset(list_, 0, size); shared_file_pointer_ = new MPI_Offset(); shared_mutex_ = s4u::Mutex::create();