diff --git a/ompi/mca/pml/ob1/pml_ob1_sendreq.c b/ompi/mca/pml/ob1/pml_ob1_sendreq.c index 9573e4653c..932392500e 100644 --- a/ompi/mca/pml/ob1/pml_ob1_sendreq.c +++ b/ompi/mca/pml/ob1/pml_ob1_sendreq.c @@ -1093,7 +1093,10 @@ int mca_pml_ob1_send_request_put_frag( mca_pml_ob1_rdma_frag_t* frag ) /* send fragment by copy in/out */ mca_pml_ob1_send_request_copy_in_out(sendreq, frag->rdma_hdr.hdr_rdma.hdr_rdma_offset, frag->rdma_length); - mca_pml_ob1_send_request_schedule(sendreq); + /* if a pointer to a receive request is not set it means that + * ACK was not yet received. Don't schedule sends before ACK */ + if(NULL != sendreq->req_recv.pval) + mca_pml_ob1_send_request_schedule(sendreq); } return OMPI_ERR_OUT_OF_RESOURCE; } diff --git a/ompi/mca/pml/ob1/pml_ob1_sendreq.h b/ompi/mca/pml/ob1/pml_ob1_sendreq.h index 5c3d276b12..d06b69ed78 100644 --- a/ompi/mca/pml/ob1/pml_ob1_sendreq.h +++ b/ompi/mca/pml/ob1/pml_ob1_sendreq.h @@ -147,6 +147,7 @@ get_request_from_send_pending(mca_pml_ob1_send_pending_t *type) comm, \ sendmode, \ persistent); \ + (sendreq)->req_recv.pval = NULL; \ }