diff --git a/ompi/mca/mtl/base/mtl_base_datatype.c b/ompi/mca/mtl/base/mtl_base_datatype.c index 55f588900f..ed0cfdd56d 100644 --- a/ompi/mca/mtl/base/mtl_base_datatype.c +++ b/ompi/mca/mtl/base/mtl_base_datatype.c @@ -98,10 +98,10 @@ ompi_mtl_datatype_unpack(struct ompi_convertor_t *convertor, max_data = iov.iov_len; + ompi_convertor_unpack(convertor, &iov, &iov_count, + &max_data, &free_after); if (max_data > 0 && ompi_convertor_need_buffers(convertor)) { - ompi_convertor_unpack(convertor, &iov, &iov_count, - &max_data, &free_after); free(buffer); } diff --git a/ompi/mca/pml/cm/pml_cm_recvreq.h b/ompi/mca/pml/cm/pml_cm_recvreq.h index beeac64001..fdc3dca34e 100644 --- a/ompi/mca/pml/cm/pml_cm_recvreq.h +++ b/ompi/mca/pml/cm/pml_cm_recvreq.h @@ -137,6 +137,11 @@ do { \ MCA_PML_CM_RECV_REQUEST_RETURN( recvreq ); \ } else { \ /* initialize request status */ \ + if(recvreq->req_recv.req_base.req_ompi.req_persistent) { \ + /* rewind convertor */ \ + size_t offset = 0; \ + ompi_convertor_set_position(&recvreq->req_recv.req_convertor, &offset); \ + } \ recvreq->req_recv.req_base.req_pml_complete = true; \ MCA_PML_CM_RECV_REQUEST_MPI_COMPLETE( recvreq ); \ } \