{
if (comm == MPI_COMM_NULL)
return MPI_ERR_COMM;
- if ((sendbuf == nullptr) || ((comm->rank() == root) && recvbuf == nullptr))
+ if ((sendbuf == nullptr && sendcount > 0) || ((comm->rank() == root) && recvbuf == nullptr && recvcount > 0))
return MPI_ERR_BUFFER;
if (((sendbuf != MPI_IN_PLACE && sendcount > 0) && (sendtype == MPI_DATATYPE_NULL)) ||
((comm->rank() == root) && (recvtype == MPI_DATATYPE_NULL)))
MPI_Datatype recvtype, MPI_Comm comm, MPI_Request* request)
{
CHECK_ARGS(comm == MPI_COMM_NULL, MPI_ERR_COMM, "Iallgather: the communicator cannot be MPI_COMM_NULL");
- CHECK_ARGS(recvbuf == nullptr, MPI_ERR_BUFFER, "Iallgather: param 4 recvbuf cannot be NULL");
+ CHECK_ARGS(recvbuf == nullptr && recvcount > 0, MPI_ERR_BUFFER, "Iallgather: param 4 recvbuf cannot be NULL");
CHECK_ARGS(sendbuf == nullptr && sendcount > 0, MPI_ERR_BUFFER,
"Iallgather: param 1 sendbuf cannot be NULL when sendcound > 0");
CHECK_ARGS((sendbuf != MPI_IN_PLACE) && (sendtype == MPI_DATATYPE_NULL), MPI_ERR_TYPE,
int retval = 0;
smpi_bench_end();
- if (*request == MPI_REQUEST_NULL) {
- retval = MPI_ERR_ARG;
- } else {
+ if (*request != MPI_REQUEST_NULL) {
simgrid::smpi::Request::unref(request);
retval = MPI_SUCCESS;
}
return simgrid::smpi::Request::grequest_complete(request);
}
-
int PMPI_Request_get_status( MPI_Request request, int *flag, MPI_Status *status){
if(request==MPI_REQUEST_NULL){
*flag=1;
simgrid::smpi::Status::empty(status);
- return MPI_ERR_REQUEST;
+ return MPI_SUCCESS;
} else if (flag==NULL || status ==NULL){
return MPI_ERR_ARG;
}