#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;
}
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;
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{
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();