+ int count_requests=0;
+ unsigned int i=0;
+
+ count_requests=xbt_dynar_length(reqq[smpi_comm_rank(MPI_COMM_WORLD)]);
+
+ if (count_requests>0) {
+ MPI_Request requests[count_requests];
+ MPI_Status status[count_requests];
+
+ /* The reqq is an array of dynars. Its index corresponds to the rank.
+ Thus each rank saves its own requests to the array request. */
+ xbt_dynar_foreach(reqq[smpi_comm_rank(MPI_COMM_WORLD)],i,requests[i]);
+
+ #ifdef HAVE_TRACING
+ //save information from requests
+
+ xbt_dynar_t srcs = xbt_dynar_new(sizeof(int), NULL);
+ xbt_dynar_t dsts = xbt_dynar_new(sizeof(int), NULL);
+ xbt_dynar_t recvs = xbt_dynar_new(sizeof(int), NULL);
+ for (i = 0; i < count_requests; i++) {
+ if(requests[i]){
+ int *asrc = xbt_new(int, 1);
+ int *adst = xbt_new(int, 1);
+ int *arecv = xbt_new(int, 1);
+ *asrc = requests[i]->src;
+ *adst = requests[i]->dst;
+ *arecv = requests[i]->recv;
+ xbt_dynar_insert_at(srcs, i, asrc);
+ xbt_dynar_insert_at(dsts, i, adst);
+ xbt_dynar_insert_at(recvs, i, arecv);
+ xbt_free(asrc);
+ xbt_free(adst);
+ xbt_free(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);
+ xbt_free(t);
+ }
+ }
+ int rank_traced = smpi_process_index();
+ TRACE_smpi_computing_out(rank_traced);
+
+ TRACE_smpi_ptp_in(rank_traced, -1, -1, __FUNCTION__, count_requests);
+ #endif
+
+ smpi_mpi_waitall(count_requests, requests, status);
+
+ #ifdef HAVE_TRACING
+ for (i = 0; i < count_requests; i++) {
+ int src_traced, dst_traced, is_wait_for_receive;
+ xbt_dynar_get_cpy(srcs, i, &src_traced);
+ xbt_dynar_get_cpy(dsts, i, &dst_traced);
+ xbt_dynar_get_cpy(recvs, i, &is_wait_for_receive);
+ if (is_wait_for_receive) {
+ TRACE_smpi_recv(rank_traced, src_traced, dst_traced);
+ }
+ }
+ TRACE_smpi_ptp_out(rank_traced, -1, -1, __FUNCTION__);
+ //clean-up of dynars
+ xbt_dynar_free(&srcs);
+ xbt_dynar_free(&dsts);
+ xbt_dynar_free(&recvs);
+ TRACE_smpi_computing_in(rank_traced);
+ #endif
+
+ xbt_dynar_reset(reqq[smpi_comm_rank(MPI_COMM_WORLD)]);
+ }