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) {
|
rdma_num != 0) {
|
||||||
unsigned char *base;
|
unsigned char *base;
|
||||||
ompi_convertor_get_current_pointer( &recvreq->req_recv.req_base.req_convertor, (void**)&(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,
|
if(hdr->hdr_match.hdr_common.hdr_flags & MCA_PML_OB1_HDR_FLAGS_PIN)
|
||||||
base,
|
recvreq->req_rdma_cnt = mca_pml_ob1_rdma_btls(bml_endpoint,
|
||||||
recvreq->req_recv.req_bytes_packed,
|
base, recvreq->req_recv.req_bytes_packed,
|
||||||
recvreq->req_rdma );
|
recvreq->req_rdma );
|
||||||
|
else
|
||||||
|
recvreq->req_rdma_cnt = 0;
|
||||||
|
|
||||||
/* memory is already registered on both sides */
|
/* memory is already registered on both sides */
|
||||||
if (hdr->hdr_match.hdr_common.hdr_flags & MCA_PML_OB1_HDR_FLAGS_PIN &&
|
if (recvreq->req_rdma_cnt != 0) {
|
||||||
recvreq->req_rdma_cnt != 0) {
|
|
||||||
|
|
||||||
recvreq->req_send_offset = hdr->hdr_msg_length;
|
recvreq->req_send_offset = hdr->hdr_msg_length;
|
||||||
/* are rdma devices available for long rdma protocol */
|
/* are rdma devices available for long rdma protocol */
|
||||||
} else if(bml_endpoint->btl_send_limit < hdr->hdr_msg_length) {
|
} else if(bml_endpoint->btl_send_limit < hdr->hdr_msg_length) {
|
||||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user