Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
For File, we can change the default error handler by specifying MPI_FILE_NULL as...
authorAugustin Degomme <adegomme@gmail.com>
Mon, 19 Aug 2019 08:50:38 +0000 (10:50 +0200)
committerAugustin Degomme <adegomme@gmail.com>
Mon, 19 Aug 2019 08:50:38 +0000 (10:50 +0200)
src/smpi/bindings/smpi_pmpi_file.cpp
src/smpi/mpi/smpi_file.cpp

index 42e336a..41e1a38 100644 (file)
@@ -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;
index a7d4c60..b47984e 100644 (file)
@@ -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();