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/f7384c546de181f59b8a57cb35f3a4b45c... commit f7384c546de181f59b8a57cb35f3a4b45c35db48 Author: Ken Raffenetti <[email protected]> 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 <[email protected]> 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