- for (i = 0; i < valid_count; i++) {
- int src_traced = srcs[i];
- int dst_traced = dsts[i];
- int is_wait_for_receive = recvs[i];
- if (is_wait_for_receive) {
- TRACE_smpi_recv(rank_traced, src_traced, dst_traced);
+ for (i = 0; i < count; i++) {
+ if(valid[i]){
+ //int src_traced = srcs[*index];
+ //the src may not have been known at the beginning of the recv (MPI_ANY_SOURCE)
+
+ int dst_traced = dsts[i];
+ int is_wait_for_receive = recvs[i];
+ if (is_wait_for_receive) {
+ int src_traced = (status!=MPI_STATUSES_IGNORE) ?
+ smpi_group_rank(smpi_comm_group(comms[i]), status[i].MPI_SOURCE) :
+ srcs[i];
+ TRACE_smpi_recv(rank_traced, src_traced, dst_traced);
+ }