From 31d2797a2fcea73eb2288eac2f233f14d80f096c Mon Sep 17 00:00:00 2001 From: Gleb Natapov Date: Sun, 11 May 2008 12:40:55 +0000 Subject: [PATCH] If RDMA PUT is received before ACK and registration of memory fails don't start sending fragment by copy in/out before ACK is received as we don't know pointer to receive request yet. Pipeline protocol sometimes doesn't send ACK though, so this case is still broken. This commit was SVN r18423. --- ompi/mca/pml/ob1/pml_ob1_sendreq.c | 5 ++++- ompi/mca/pml/ob1/pml_ob1_sendreq.h | 1 + 2 files changed, 5 insertions(+), 1 deletion(-) 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; \ }