[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