From fa69c5cc1088f59dc0e4a6f1548932341d995ca7 Mon Sep 17 00:00:00 2001 From: Gleb Natapov Date: Tue, 28 Aug 2007 07:43:06 +0000 Subject: [PATCH] If a memory on a sender's size is not registered don't register it on a receive side too. Otherwise a content of the recvreq->req_rdma array is replaced later without freeing previous content and refcount on registration in mpool become wrong. This commit was SVN r15978. --- ompi/mca/pml/ob1/pml_ob1_recvreq.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/ompi/mca/pml/ob1/pml_ob1_recvreq.c b/ompi/mca/pml/ob1/pml_ob1_recvreq.c index cb8e370c28..74ef680fad 100644 --- a/ompi/mca/pml/ob1/pml_ob1_recvreq.c +++ b/ompi/mca/pml/ob1/pml_ob1_recvreq.c @@ -254,16 +254,16 @@ static int mca_pml_ob1_recv_request_ack( rdma_num != 0) { unsigned char *base; ompi_convertor_get_current_pointer( &recvreq->req_recv.req_base.req_convertor, (void**)&(base) ); - - recvreq->req_rdma_cnt = mca_pml_ob1_rdma_btls( bml_endpoint, - base, - recvreq->req_recv.req_bytes_packed, - recvreq->req_rdma ); + + if(hdr->hdr_match.hdr_common.hdr_flags & MCA_PML_OB1_HDR_FLAGS_PIN) + recvreq->req_rdma_cnt = mca_pml_ob1_rdma_btls(bml_endpoint, + base, recvreq->req_recv.req_bytes_packed, + recvreq->req_rdma ); + else + recvreq->req_rdma_cnt = 0; /* memory is already registered on both sides */ - if (hdr->hdr_match.hdr_common.hdr_flags & MCA_PML_OB1_HDR_FLAGS_PIN && - recvreq->req_rdma_cnt != 0) { - + if (recvreq->req_rdma_cnt != 0) { recvreq->req_send_offset = hdr->hdr_msg_length; /* are rdma devices available for long rdma protocol */ } else if(bml_endpoint->btl_send_limit < hdr->hdr_msg_length) {