diff --git a/ompi/mca/pml/dr/pml_dr_sendreq.c b/ompi/mca/pml/dr/pml_dr_sendreq.c index 164c1b33c7..9f8c2a1d53 100644 --- a/ompi/mca/pml/dr/pml_dr_sendreq.c +++ b/ompi/mca/pml/dr/pml_dr_sendreq.c @@ -302,8 +302,9 @@ static void mca_pml_dr_frag_completion( assert(sendreq->req_bytes_delivered <= sendreq->req_send.req_bytes_packed); /* is this vfrag in the process of being retransmitted */ - if(vfrag->vf_idx != vfrag->vf_len) { + if(vfrag->vf_state & MCA_PML_DR_VFRAG_RETRANS) { opal_list_remove_item(&sendreq->req_retrans, (opal_list_item_t*)vfrag); + vfrag->vf_state &= ~MCA_PML_DR_VFRAG_RETRANS; } /* record vfrag id to drop duplicate acks */ @@ -817,6 +818,7 @@ int mca_pml_dr_send_request_schedule(mca_pml_dr_send_request_t* sendreq) if(vfrag->vf_idx == vfrag->vf_len) { OPAL_THREAD_LOCK(&ompi_request_lock); opal_list_remove_item(&sendreq->req_retrans, (opal_list_item_t*)vfrag); + vfrag->vf_state &= ~MCA_PML_DR_VFRAG_RETRANS; OPAL_THREAD_UNLOCK(&ompi_request_lock); } } diff --git a/ompi/mca/pml/dr/pml_dr_sendreq.h b/ompi/mca/pml/dr/pml_dr_sendreq.h index c809fe7b8a..4fceb36b92 100644 --- a/ompi/mca/pml/dr/pml_dr_sendreq.h +++ b/ompi/mca/pml/dr/pml_dr_sendreq.h @@ -316,12 +316,12 @@ do { #define MCA_PML_DR_SEND_REQUEST_VFRAG_RETRANS(sendreq, vfrag) \ do { \ - if(vfrag->vf_idx == vfrag->vf_len || \ - (vfrag->vf_wdog_cnt == 0 && vfrag->vf_ack_cnt == 0)) { \ - opal_list_append(&(sendreq)->req_retrans, (opal_list_item_t*)vfrag); \ + if(((vfrag)->vf_state & MCA_PML_DR_VFRAG_RETRANS) == 0) { \ + opal_list_append(&(sendreq)->req_retrans, (opal_list_item_t*)(vfrag));\ + (vfrag)->vf_state |= MCA_PML_DR_VFRAG_RETRANS; \ } \ - vfrag->vf_idx = 0; \ - vfrag->vf_state = 0; \ + (vfrag)->vf_state &= ~MCA_PML_DR_VFRAG_NACKED; \ + (vfrag)->vf_idx = 0; \ } while(0) /* @@ -360,7 +360,7 @@ do { \ do { \ mca_btl_base_descriptor_t *des_old, *des_new; \ OPAL_THREAD_ADD64(&vfrag->vf_pending,1); \ - OPAL_OUTPUT((0, "%s:%d:%s, retransmitting eager\n", __FILE__, __LINE__, __func__)); \ + OPAL_OUTPUT((0, "%s:%d:%s: retransmitting eager\n", __FILE__, __LINE__, __func__)); \ assert(sendreq->req_descriptor->des_src != NULL); \ \ OPAL_THREAD_ADD32(&sendreq->req_pipeline_depth,1); \ @@ -391,7 +391,7 @@ do { \ mca_btl_base_descriptor_t *des_old, *des_new; \ mca_pml_dr_hdr_t *hdr; \ \ - opal_output(0, "%s:%d:%s, (re)transmitting rndv probe\n", __FILE__, __LINE__, __func__); \ + opal_output(0, "%s:%d:%s: (re)transmitting rndv probe\n", __FILE__, __LINE__, __func__); \ OPAL_THREAD_ADD32(&sendreq->req_pipeline_depth,1); \ OPAL_THREAD_ADD64(&vfrag->vf_pending,1); \ (vfrag)->vf_state &= ~MCA_PML_DR_VFRAG_NACKED; \ diff --git a/ompi/mca/pml/dr/pml_dr_vfrag.h b/ompi/mca/pml/dr/pml_dr_vfrag.h index aa02afa4f4..66a2593633 100644 --- a/ompi/mca/pml/dr/pml_dr_vfrag.h +++ b/ompi/mca/pml/dr/pml_dr_vfrag.h @@ -31,6 +31,7 @@ extern "C" { #define MCA_PML_DR_VFRAG_NACKED 0x01 #define MCA_PML_DR_VFRAG_RNDV 0x02 +#define MCA_PML_DR_VFRAG_RETRANS 0x04 struct mca_pml_dr_vfrag_t { opal_list_item_t super;