+#ifdef HAVE_TRACING
+ //save requests information for tracing
+ int i;
+ xbt_dynar_t srcs = xbt_dynar_new (sizeof(int), xbt_free);
+ xbt_dynar_t dsts = xbt_dynar_new (sizeof(int), xbt_free);
+ xbt_dynar_t recvs = xbt_dynar_new (sizeof(int), xbt_free);
+ for (i = 0; i < count; i++){
+ MPI_Request req = requests[i]; //already received requests are no longer valid
+ if (req){
+ int *asrc = xbt_new(int, 1);
+ int *adst = xbt_new(int, 1);
+ int *arecv = xbt_new(int, 1);
+ *asrc = req->src;
+ *adst = req->dst;
+ *arecv = req->recv;
+ xbt_dynar_insert_at (srcs, i, asrc);
+ xbt_dynar_insert_at (dsts, i, adst);
+ xbt_dynar_insert_at (recvs, i, arecv);
+ }else{
+ int *t = xbt_new(int, 1);
+ xbt_dynar_insert_at (srcs, i, t);
+ xbt_dynar_insert_at (dsts, i, t);
+ xbt_dynar_insert_at (recvs, i, t);
+ }
+ }
+
+ //search for a suitable request to give the rank of current mpi proc
+ MPI_Request req = NULL;
+ for (i = 0; i < count && req == NULL; i++) {
+ req = requests[i];
+ }
+ MPI_Comm comm = (req)->comm;
+ int rank_traced = smpi_comm_rank(comm);
+ TRACE_smpi_ptp_in (rank_traced, -1, -1, __FUNCTION__);
+#endif