Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Add option smpi/errors-are-fatal to allow users to bypass MPI errors returned by...
[simgrid.git] / src / smpi / mpi / smpi_file.cpp
index e5f00dd..82c5e2f 100644 (file)
@@ -21,7 +21,7 @@
 
 XBT_LOG_NEW_DEFAULT_SUBCATEGORY(smpi_io, smpi, "Logging specific to SMPI (RMA operations)");
 
-MPI_Errhandler SMPI_default_File_Errhandler = MPI_ERRORS_RETURN;
+MPI_Errhandler SMPI_default_File_Errhandler =  _smpi_cfg_default_errhandler_is_error ? MPI_ERRORS_ARE_FATAL : MPI_ERRORS_RETURN;;
 
 namespace simgrid{
 namespace smpi{
@@ -30,8 +30,8 @@ namespace smpi{
     if (info_ != MPI_INFO_NULL)
       info_->ref();
     std::string fullname=filename;
-    if (simgrid::s4u::Host::current()->get_disks().empty())
-      xbt_die("SMPI/IO : Trying to open file on a diskless host ! Add one to your platform file");
+    xbt_assert(not simgrid::s4u::Host::current()->get_disks().empty(),
+               "SMPI/IO : Trying to open file on a diskless host ! Add one to your platform file");
 
     size_t found=fullname.find('/');
     //in case no fullpath is provided ... just pick the first mountpoint.
@@ -81,7 +81,7 @@ namespace smpi{
     }
     delete win_;
     delete file_;
-    F2C::free_f(this->c2f());
+    F2C::free_f(this->f2c_id());
     if (info_ != MPI_INFO_NULL)
       simgrid::smpi::Info::unref(info_);
     if (errhandler_ != MPI_ERRHANDLER_NULL)
@@ -121,15 +121,15 @@ namespace smpi{
 
   int File::seek(MPI_Offset offset, int whence){
     switch(whence){
-      case(MPI_SEEK_SET):
+      case MPI_SEEK_SET:
         XBT_VERB("Seeking in MPI_File %s, setting offset %lld", file_->get_path(), offset);
         file_->seek(offset,SEEK_SET);
         break;
-      case(MPI_SEEK_CUR):
+      case MPI_SEEK_CUR:
         XBT_VERB("Seeking in MPI_File %s, current offset + %lld", file_->get_path(), offset);
         file_->seek(offset,SEEK_CUR);
         break;
-      case(MPI_SEEK_END):
+      case MPI_SEEK_END:
         XBT_VERB("Seeking in MPI_File %s, end offset + %lld", file_->get_path(), offset);
         file_->seek(offset,SEEK_END);
         break;
@@ -284,6 +284,11 @@ namespace smpi{
     return file_->size();
   }
 
+  void File::set_size(int size)
+  {
+    file_->write(size, true);
+  }
+
   int File::flags() const
   {
     return flags_;
@@ -296,9 +301,6 @@ namespace smpi{
 
   MPI_Info File::info()
   {
-    if (info_ == MPI_INFO_NULL)
-      info_ = new Info();
-    info_->ref();
     return info_;
   }