+// TODO: cheinrich: Move declaration to other file? Rename this function - it's used for PMPI_Wait*?
+static void trace_smpi_recv_helper(MPI_Request* request, MPI_Status* status);
+static void trace_smpi_recv_helper(MPI_Request* request, MPI_Status* status)
+{
+ MPI_Request req = *request;
+ if (req != MPI_REQUEST_NULL) { // Received requests become null
+ int src_traced = req->src();
+ // the src may not have been known at the beginning of the recv (MPI_ANY_SOURCE)
+ int dst_traced = req->dst();
+ if (req->flags() & RECV) { // Is this request a wait for RECV?
+ if (src_traced == MPI_ANY_SOURCE)
+ src_traced = (status != MPI_STATUSES_IGNORE) ? req->comm()->group()->rank(status->MPI_SOURCE) : req->src();
+ TRACE_smpi_recv(src_traced, dst_traced, req->tag());
+ }
+ }
+}
+