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/0b3640682130339f69e5391560d39b771c... commit 0b3640682130339f69e5391560d39b771c04bad4 Author: James Dinan <[email protected]> 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