Browse Source

mpi/src: do not call MPI_Wait if the request is already completed (from a previous call to MPI_Test)

Nathalie Furmento 9 years ago
parent
commit
40a94e40df
1 changed files with 6 additions and 4 deletions
  1. 6 4
      mpi/src/starpu_mpi.c

+ 6 - 4
mpi/src/starpu_mpi.c

@@ -664,13 +664,15 @@ static void _starpu_mpi_wait_func(struct _starpu_mpi_req *waiting_req)
 	struct _starpu_mpi_req *req = waiting_req->other_request;
 
 	_STARPU_MPI_TRACE_UWAIT_BEGIN(req->node_tag.rank, req->node_tag.data_tag);
-
-	req->ret = MPI_Wait(&req->data_request, waiting_req->status);
-	STARPU_MPI_ASSERT_MSG(req->ret == MPI_SUCCESS, "MPI_Wait returning %s", _starpu_mpi_get_mpi_error_code(req->ret));
-
+	if (req->data_request != MPI_REQUEST_NULL)
+	{
+		req->ret = MPI_Wait(&req->data_request, waiting_req->status);
+		STARPU_MPI_ASSERT_MSG(req->ret == MPI_SUCCESS, "MPI_Wait returning %s", _starpu_mpi_get_mpi_error_code(req->ret));
+	}
 	_STARPU_MPI_TRACE_UWAIT_END(req->node_tag.rank, req->node_tag.data_tag);
 
 	_starpu_mpi_handle_request_termination(req);
+
 	_STARPU_MPI_LOG_OUT();
 }