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.
Этот коммит содержится в:
родитель
2c29a2b4ee
Коммит
fa69c5cc10
@ -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) {
|
||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user