From: degomme Date: Fri, 8 Apr 2016 20:54:15 +0000 (+0200) Subject: try to get rid of random crashes in RMA. X-Git-Tag: v3_13~111^2 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/4e3cf537964f44e15188df5f0ba822b562c17a04 try to get rid of random crashes in RMA. dynar_to_array releases the win->requests array, allocate the new one immediately after. Because if we wait after the mpi_waitall, we may have other processes try to add requests in the old one. --- diff --git a/src/smpi/smpi_rma.cpp b/src/smpi/smpi_rma.cpp index a5083ce263..a5464743a9 100644 --- a/src/smpi/smpi_rma.cpp +++ b/src/smpi/smpi_rma.cpp @@ -120,9 +120,9 @@ int smpi_mpi_win_fence( int assert, MPI_Win win){ } MPI_Request* treqs = static_cast(xbt_dynar_to_array(reqs)); + win->requests=xbt_dynar_new(sizeof(MPI_Request), NULL); smpi_mpi_waitall(size,treqs,MPI_STATUSES_IGNORE); xbt_free(treqs); - win->requests=xbt_dynar_new(sizeof(MPI_Request), NULL); } win->assert = assert; @@ -359,9 +359,9 @@ int smpi_mpi_win_complete(MPI_Win win){ } MPI_Request* treqs = static_cast(xbt_dynar_to_array(reqqs)); + win->requests=xbt_dynar_new(sizeof(MPI_Request), NULL); smpi_mpi_waitall(size,treqs,MPI_STATUSES_IGNORE); xbt_free(treqs); - win->requests=xbt_dynar_new(sizeof(MPI_Request), NULL); win->opened--; //we're closed for business ! return MPI_SUCCESS; } @@ -408,9 +408,9 @@ int smpi_mpi_win_wait(MPI_Win win){ } MPI_Request* treqs = static_cast(xbt_dynar_to_array(reqqs)); + win->requests=xbt_dynar_new(sizeof(MPI_Request), NULL); smpi_mpi_waitall(size,treqs,MPI_STATUSES_IGNORE); xbt_free(treqs); - win->requests=xbt_dynar_new(sizeof(MPI_Request), NULL); win->opened--; //we're opened for business ! return MPI_SUCCESS; }