]> AND Public Git Repository - simgrid.git/blobdiff - src/smpi/bindings/smpi_pmpi_request.cpp
Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Sonar wants one declaration per line.
[simgrid.git] / src / smpi / bindings / smpi_pmpi_request.cpp
index 78db9c0bde0641de755decab5a4ddf801ef1a796..0f7c0ce421e7de18f92ee329171a17a9530e9051 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (c) 2007-2020. The SimGrid Team. All rights reserved.          */
+/* Copyright (c) 2007-2021. The SimGrid Team. All rights reserved.          */
 
 /* This program is free software; you can redistribute it and/or modify it
  * under the terms of the license (GNU LGPL) which comes with this package. */
@@ -22,8 +22,8 @@ static int getPid(MPI_Comm comm, int id)
   CHECK_BUFFER(1, buf, count)\
   CHECK_COUNT(2, count)\
   CHECK_TYPE(3, datatype)\
-  CHECK_PROC(4, dst)\
-  CHECK_RANK(4, dst, comm)\
+  if(dst!= MPI_PROC_NULL)\
+    CHECK_RANK(4, dst, comm)\
   CHECK_TAG(5, tag)\
   CHECK_COMM(6)\
 
@@ -38,8 +38,7 @@ static int getPid(MPI_Comm comm, int id)
   CHECK_BUFFER(1, buf, count)\
   CHECK_COUNT(2, count)\
   CHECK_TYPE(3, datatype)\
-  CHECK_PROC(4, src)\
-  if(src!=MPI_ANY_SOURCE)\
+  if(src!=MPI_ANY_SOURCE && src!=MPI_PROC_NULL)\
     CHECK_RANK(4, src, comm)\
   CHECK_TAG(5, tag)\
   CHECK_COMM(6)
@@ -427,8 +426,8 @@ int PMPI_Sendrecv(const void* sendbuf, int sendcount, MPI_Datatype sendtype, int
     int src_traced         = getPid(comm, src);
 
     // FIXME: Hack the way to trace this one
-    auto* dst_hack = new std::vector<int>();
-    auto* src_hack = new std::vector<int>();
+    auto dst_hack = std::make_shared<std::vector<int>>();
+    auto src_hack = std::make_shared<std::vector<int>>();
     dst_hack->push_back(dst_traced);
     src_hack->push_back(src_traced);
     TRACE_smpi_comm_in(my_proc_id, __func__,
@@ -762,7 +761,15 @@ int PMPI_Status_set_elements(MPI_Status* status, MPI_Datatype datatype, int coun
     return MPI_ERR_ARG;
   }
   simgrid::smpi::Status::set_elements(status,datatype, count);
-  return MPI_SUCCESS;  
+  return MPI_SUCCESS;
+}
+
+int PMPI_Status_set_elements_x(MPI_Status* status, MPI_Datatype datatype, MPI_Count count){
+  if(status==MPI_STATUS_IGNORE){
+    return MPI_ERR_ARG;
+  }
+  simgrid::smpi::Status::set_elements(status,datatype, static_cast<int>(count));
+  return MPI_SUCCESS;
 }
 
 int PMPI_Grequest_start( MPI_Grequest_query_function *query_fn, MPI_Grequest_free_function *free_fn, MPI_Grequest_cancel_function *cancel_fn, void *extra_state, MPI_Request *request){