[mpich-commits] [mpich] MPICH primary repository branch, master, updated. v3.1.3-194-gf7384c5

Service Account noreply at mpich.org
Thu Nov 13 07:38:02 CST 2014


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  f7384c546de181f59b8a57cb35f3a4b45c35db48 (commit)
      from  ed819382454bfd187f30d0861df35bb919cb93a8 (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/f7384c546de181f59b8a57cb35f3a4b45c35db48

commit f7384c546de181f59b8a57cb35f3a4b45c35db48
Author: Ken Raffenetti <raffenet at mcs.anl.gov>
Date:   Wed Nov 12 12:26:36 2014 -0600

    portals4: better dtype mismatch detection
    
    The previous code only detected a datatype mismatch when the message
    was copied out of the unexpected queue. Now it will throw an error
    in both cases.
    
    We also set the error in the status object to match the default ch3
    behavior. This fixed an issue where the request would not be freed
    and cause extra debugging output at MPI_Finalize.
    
    Signed-off-by: Antonio Pena Monferrer <apenya at mcs.anl.gov>

diff --git a/src/mpid/ch3/channels/nemesis/netmod/portals4/ptl_recv.c b/src/mpid/ch3/channels/nemesis/netmod/portals4/ptl_recv.c
index 0440972..ec6d90a 100644
--- a/src/mpid/ch3/channels/nemesis/netmod/portals4/ptl_recv.c
+++ b/src/mpid/ch3/channels/nemesis/netmod/portals4/ptl_recv.c
@@ -84,23 +84,24 @@ static int handler_recv_dequeue_complete(const ptl_event_t *e)
 {
     int mpi_errno = MPI_SUCCESS;
     MPID_Request *const rreq = e->user_ptr;
+    int is_contig;
+    MPI_Aint last;
+    MPI_Aint dt_true_lb;
+    MPIDI_msg_sz_t data_sz;
+    MPID_Datatype *dt_ptr ATTRIBUTE((unused));
+
     MPIDI_STATE_DECL(MPID_STATE_HANDLER_RECV_DEQUEUE_COMPLETE);
 
     MPIDI_FUNC_ENTER(MPID_STATE_HANDLER_RECV_DEQUEUE_COMPLETE);
 
     MPIU_Assert(e->type == PTL_EVENT_PUT || e->type == PTL_EVENT_PUT_OVERFLOW);
+
+    MPIDI_Datatype_get_info(rreq->dev.user_count, rreq->dev.datatype, is_contig, data_sz, dt_ptr, dt_true_lb);
     
     dequeue_req(e);
 
     if (e->type == PTL_EVENT_PUT_OVERFLOW) {
         /* unpack the data from unexpected buffer */
-        int is_contig;
-        MPI_Aint last;
-        MPI_Aint dt_true_lb;
-        MPIDI_msg_sz_t data_sz ATTRIBUTE((unused));
-        MPID_Datatype *dt_ptr ATTRIBUTE((unused));
-
-        MPIDI_Datatype_get_info(rreq->dev.user_count, rreq->dev.datatype, is_contig, data_sz, dt_ptr, dt_true_lb);
         MPIU_DBG_MSG_D(CH3_CHANNEL, VERBOSE, "is_contig = %d", is_contig);
 
         if (is_contig) {
@@ -108,8 +109,12 @@ static int handler_recv_dequeue_complete(const ptl_event_t *e)
         } else {
             last = e->mlength;
             MPID_Segment_unpack(rreq->dev.segment_ptr, rreq->dev.segment_first, &last, e->start);
-            MPIU_ERR_CHKANDJUMP(last != e->mlength, mpi_errno, MPI_ERR_OTHER, "**dtypemismatch");
+            if (last != e->mlength)
+                MPIU_ERR_SET(rreq->status.MPI_ERROR, MPI_ERR_TYPE, "**dtypemismatch");
         }
+    } else {
+        if (!is_contig && data_sz != e->mlength)
+            MPIU_ERR_SET(rreq->status.MPI_ERROR, MPI_ERR_TYPE, "**dtypemismatch");
     }
     
     mpi_errno = handler_recv_complete(e);

-----------------------------------------------------------------------

Summary of changes:
 .../channels/nemesis/netmod/portals4/ptl_recv.c    |   21 ++++++++++++-------
 1 files changed, 13 insertions(+), 8 deletions(-)


hooks/post-receive
-- 
MPICH primary repository


More information about the commits mailing list