From 4e3cf537964f44e15188df5f0ba822b562c17a04 Mon Sep 17 00:00:00 2001 From: degomme Date: Fri, 8 Apr 2016 22:54:15 +0200 Subject: [PATCH] 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. --- src/smpi/smpi_rma.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) 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; } -- 2.20.1