[mpich-commits] [mpich] MPICH primary repository branch, master, updated. v3.0.2-4-g0b36406
mysql vizuser
noreply at mpich.org
Tue Feb 5 08:47:24 CST 2013
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "MPICH primary repository".
The branch, master has been updated
via 0b3640682130339f69e5391560d39b771c04bad4 (commit)
from f71dd6e42390021aaf91814008e7208ad3e65f64 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
http://git.mpich.org/mpich.git/commitdiff/0b3640682130339f69e5391560d39b771c04bad4
commit 0b3640682130339f69e5391560d39b771c04bad4
Author: James Dinan <dinan at mcs.anl.gov>
Date: Tue Feb 5 08:43:47 2013 -0600
BUGFIX: Unlock piggybacking for Get_accumulate
GACC operations were both piggybacking the unlock message to the origin, and
sending back a PT done packet. This was causing the origin to be unlocked
twice. When another lock operation was performed between the GACC and PT done
unlock operations, there was a synchronization race.
diff --git a/src/mpid/ch3/src/ch3u_handle_recv_req.c b/src/mpid/ch3/src/ch3u_handle_recv_req.c
index 2eaa530..2352da7 100644
--- a/src/mpid/ch3/src/ch3u_handle_recv_req.c
+++ b/src/mpid/ch3/src/ch3u_handle_recv_req.c
@@ -82,6 +82,7 @@ int MPIDI_CH3_ReqHandler_PutAccumRespComplete( MPIDI_VC_t *vc,
int *complete )
{
int mpi_errno = MPI_SUCCESS;
+ int is_gacc_op = 0;
MPID_Win *win_ptr;
MPIU_CHKPMEM_DECL(1);
MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3_REQHANDLER_PUTACCUMRESPCOMPLETE);
@@ -96,6 +97,7 @@ int MPIDI_CH3_ReqHandler_PutAccumRespComplete( MPIDI_VC_t *vc,
MPID_Request *resp_req;
MPID_IOV iov[MPID_IOV_LIMIT];
+ is_gacc_op = 1;
MPIDI_Pkt_init(get_accum_resp_pkt, MPIDI_CH3_PKT_GET_ACCUM_RESP);
get_accum_resp_pkt->request_handle = rreq->dev.resp_request_handle;
@@ -170,7 +172,7 @@ int MPIDI_CH3_ReqHandler_PutAccumRespComplete( MPIDI_VC_t *vc,
win_ptr->my_counter -= 1;
}
else {
- if ((win_ptr->current_lock_type == MPI_LOCK_SHARED) ||
+ if ((win_ptr->current_lock_type == MPI_LOCK_SHARED && !is_gacc_op) ||
(rreq->dev.single_op_opt == 1)) {
mpi_errno = MPIDI_CH3I_Send_pt_rma_done_pkt(vc, win_ptr,
rreq->dev.source_win_handle);
diff --git a/src/mpid/ch3/src/ch3u_rma_sync.c b/src/mpid/ch3/src/ch3u_rma_sync.c
index 3ffb73e..6ce857a 100644
--- a/src/mpid/ch3/src/ch3u_rma_sync.c
+++ b/src/mpid/ch3/src/ch3u_rma_sync.c
@@ -4710,6 +4710,7 @@ int MPIDI_CH3_PktHandler_PtRMADone( MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt,
*buflen = sizeof(MPIDI_CH3_Pkt_t);
MPID_Win_get_ptr(pt_rma_done_pkt->source_win_handle, win_ptr);
+ MPIU_Assert(win_ptr->targets[pt_rma_done_pkt->target_rank].remote_lock_state != MPIDI_CH3_WIN_LOCK_NONE);
if (win_ptr->targets[pt_rma_done_pkt->target_rank].remote_lock_state == MPIDI_CH3_WIN_LOCK_FLUSH)
win_ptr->targets[pt_rma_done_pkt->target_rank].remote_lock_state = MPIDI_CH3_WIN_LOCK_GRANTED;
-----------------------------------------------------------------------
Summary of changes:
src/mpid/ch3/src/ch3u_handle_recv_req.c | 4 +++-
src/mpid/ch3/src/ch3u_rma_sync.c | 1 +
2 files changed, 4 insertions(+), 1 deletions(-)
hooks/post-receive
--
MPICH primary repository
More information about the commits
mailing list