Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Memory leak.
[simgrid.git] / src / smpi / bindings / smpi_pmpi.cpp
index b0f7cc3..b50e9e3 100644 (file)
@@ -8,9 +8,9 @@
 #include "simgrid/s4u/Host.hpp"
 #include "smpi_comm.hpp"
 #include "smpi_datatype_derived.hpp"
-#include "smpi_process.hpp"
 #include "smpi_status.hpp"
 #include "src/simix/ActorImpl.hpp"
+#include "src/smpi/include/smpi_actor.hpp"
 
 XBT_LOG_NEW_DEFAULT_SUBCATEGORY(smpi_pmpi, smpi, "Logging specific to SMPI (pmpi)");
 
@@ -34,7 +34,7 @@ int PMPI_Init(int *argc, char ***argv)
   int already_init;
   MPI_Initialized(&already_init);
   if(already_init == 0){
-    simgrid::smpi::Process::init(argc, argv);
+    simgrid::smpi::ActorExt::init(argc, argv);
     smpi_process()->mark_as_initialized();
     int rank = simgrid::s4u::this_actor::get_pid();
     TRACE_smpi_init(rank);
@@ -209,12 +209,16 @@ int PMPI_Error_class(int errorcode, int* errorclass) {
 }
 
 int PMPI_Error_string(int errorcode, char* string, int* resultlen){
-  static const char *smpi_error_string[] = {
-    FOREACH_ERROR(GENERATE_STRING)
-  };
-  *resultlen = strlen(smpi_error_string[errorcode]);
-  strncpy(string, smpi_error_string[errorcode], *resultlen);
-  return MPI_SUCCESS;  
+  if (errorcode<0 || string ==nullptr){
+    return MPI_ERR_ARG;
+  } else {
+    static const char *smpi_error_string[] = {
+      FOREACH_ERROR(GENERATE_STRING)
+    };
+    *resultlen = strlen(smpi_error_string[errorcode]);
+    strncpy(string, smpi_error_string[errorcode], *resultlen);
+    return MPI_SUCCESS;  
+  }
 }
 
 int PMPI_Keyval_create(MPI_Copy_function* copy_fn, MPI_Delete_function* delete_fn, int* keyval, void* extra_state) {