X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/09304e54d26cb2a5b0d3f67bd31f95c982d7c299..b607723dc69ada062d044b5525b132584115a70a:/src/smpi/smpi_win.cpp diff --git a/src/smpi/smpi_win.cpp b/src/smpi/smpi_win.cpp index 28f399f4d0..e2d6b5f3a8 100644 --- a/src/smpi/smpi_win.cpp +++ b/src/smpi/smpi_win.cpp @@ -559,9 +559,6 @@ int Win::wait(){ } int Win::lock(int lock_type, int rank, int assert){ - if(opened_!=0) - return MPI_ERR_WIN; - MPI_Win target_win = connected_wins_[rank]; if ((lock_type == MPI_LOCK_EXCLUSIVE && target_win->mode_ != MPI_LOCK_SHARED)|| target_win->mode_ == MPI_LOCK_EXCLUSIVE){ @@ -575,9 +572,10 @@ int Win::lock(int lock_type, int rank, int assert){ target_win->lockers_.push_back(comm_->rank()); - int finished = finish_comms(); + int finished = finish_comms(rank); XBT_DEBUG("Win_lock %d - Finished %d RMA calls", rank, finished); - + finished = target_win->finish_comms(rank_); + XBT_DEBUG("Win_lock target %d - Finished %d RMA calls", rank, finished); return MPI_SUCCESS; } @@ -593,9 +591,6 @@ int Win::lock_all(int assert){ } int Win::unlock(int rank){ - if(opened_!=0) - return MPI_ERR_WIN; - MPI_Win target_win = connected_wins_[rank]; int target_mode = target_win->mode_; target_win->mode_= 0; @@ -604,9 +599,10 @@ int Win::unlock(int rank){ xbt_mutex_release(target_win->lock_mut_); } - int finished = finish_comms(); + int finished = finish_comms(rank); XBT_DEBUG("Win_unlock %d - Finished %d RMA calls", rank, finished); - + finished = target_win->finish_comms(rank_); + XBT_DEBUG("Win_unlock target %d - Finished %d RMA calls", rank, finished); return MPI_SUCCESS; } @@ -683,7 +679,7 @@ int Win::finish_comms(int rank){ std::vector* myreqqs = new std::vector(); std::vector::iterator iter = reqqs->begin(); while (iter != reqqs->end()){ - if(((*iter)->src() == rank) || ((*iter)->dst() == rank)){ + if(((*iter)!=MPI_REQUEST_NULL) && (((*iter)->src() == rank) || ((*iter)->dst() == rank))){ myreqqs->push_back(*iter); iter = reqqs->erase(iter); size++;