From db851eaf612a7822372da53b791b396cbec88a70 Mon Sep 17 00:00:00 2001 From: Augustin Degomme Date: Mon, 19 Aug 2019 10:50:38 +0200 Subject: [PATCH] For File, we can change the default error handler by specifying MPI_FILE_NULL as the fh argument --- src/smpi/bindings/smpi_pmpi_file.cpp | 16 ++++++++++------ src/smpi/mpi/smpi_file.cpp | 4 +++- 2 files changed, 13 insertions(+), 7 deletions(-) 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(); -- 2.20.1