From: suter Date: Wed, 6 Nov 2013 17:39:48 +0000 (+0100) Subject: handle pending asynchronous requests on finalize (should be harmless in X-Git-Tag: v3_11_beta~377 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/a09da6c17ad98c22da2c043958f60e0336e9942b handle pending asynchronous requests on finalize (should be harmless in most cases, everybody should has completed) --- diff --git a/src/smpi/smpi_replay.c b/src/smpi/smpi_replay.c index a57b594011..507957f0e9 100644 --- a/src/smpi/smpi_replay.c +++ b/src/smpi/smpi_replay.c @@ -965,10 +965,23 @@ void smpi_replay_init(int *argc, char***argv){ int smpi_replay_finalize(){ double sim_time= 1.; /* One active process will stop. Decrease the counter*/ - active_processes--; XBT_DEBUG("There are %lu elements in reqq[*]", xbt_dynar_length(reqq[smpi_comm_rank(MPI_COMM_WORLD)])); - xbt_dynar_free(&reqq[smpi_comm_rank(MPI_COMM_WORLD)]); + if (!xbt_dynar_is_empty(reqq[smpi_comm_rank(MPI_COMM_WORLD)])){ + int count_requests=xbt_dynar_length(reqq[smpi_comm_rank(MPI_COMM_WORLD)]); + MPI_Request requests[count_requests]; + MPI_Status status[count_requests]; + unsigned int i; + + xbt_dynar_foreach(reqq[smpi_comm_rank(MPI_COMM_WORLD)],i,requests[i]); + smpi_mpi_waitall(count_requests, requests, status); + active_processes--; + } else { + active_processes--; + } + + xbt_dynar_free_container(&(reqq[smpi_comm_rank(MPI_COMM_WORLD)])); + if(!active_processes){ /* Last process alive speaking */ /* end the simulated timer */