diff --git a/src/mca/ptl/sm/src/ptl_sm_component.c b/src/mca/ptl/sm/src/ptl_sm_component.c index 9b15557ecb..3077fc9846 100644 --- a/src/mca/ptl/sm/src/ptl_sm_component.c +++ b/src/mca/ptl/sm/src/ptl_sm_component.c @@ -324,9 +324,6 @@ int mca_ptl_sm_component_progress(mca_ptl_tstamp_t tstamp) header_ptr = (mca_ptl_sm_frag_t *)( (char *)header_ptr+ mca_ptl_sm_component.sm_offset); - /* set the owning ptl */ - header_ptr->super.frag_base.frag_owner=(mca_ptl_base_module_t *) - (&mca_ptl_sm); /* figure out what type of message this is */ switch @@ -334,6 +331,9 @@ int mca_ptl_sm_component_progress(mca_ptl_tstamp_t tstamp) { case MCA_PTL_HDR_TYPE_MATCH: + /* set the owning ptl */ + header_ptr->super.frag_base.frag_owner= + (mca_ptl_base_module_t *) (&mca_ptl_sm); /* attempt match */ matching_header= &(header_ptr->super.frag_base. frag_header.hdr_match); @@ -349,6 +349,9 @@ int mca_ptl_sm_component_progress(mca_ptl_tstamp_t tstamp) break; case MCA_PTL_HDR_TYPE_FRAG: + /* set the owning ptl */ + header_ptr->super.frag_base.frag_owner= + (mca_ptl_base_module_t *) (&mca_ptl_sm); /* second and beyond fragment - just need to deliver * the data, and ack */ mca_ptl_sm_matched((mca_ptl_base_module_t *)&mca_ptl_sm, @@ -364,8 +367,9 @@ int mca_ptl_sm_component_progress(mca_ptl_tstamp_t tstamp) * the shared memory buffers */ base_send_req=header_ptr->super.frag_base.frag_header. hdr_frag.hdr_src_ptr.pval; - ((mca_ptl_base_recv_frag_t *)header_ptr)-> - frag_base.frag_owner->ptl_send_progress( + header_ptr->send_ptl->ptl_send_progress( + /*((mca_ptl_base_recv_frag_t *)header_ptr)-> + frag_base.frag_owner->ptl_send_progress(*/ (mca_ptl_base_module_t *)&mca_ptl_sm, base_send_req, header_ptr->super.frag_base.frag_size); diff --git a/src/mca/ptl/sm/src/ptl_sm_frag.c b/src/mca/ptl/sm/src/ptl_sm_frag.c index 884864566e..ed9dd371e9 100644 --- a/src/mca/ptl/sm/src/ptl_sm_frag.c +++ b/src/mca/ptl/sm/src/ptl_sm_frag.c @@ -44,6 +44,9 @@ static void mca_ptl_sm_first_frag_construct(mca_ptl_sm_frag_t* frag) /* set local rank */ frag->queue_index=mca_ptl_sm_component.my_smp_rank; + /* set pointer to the sending ptl */ + frag->send_ptl=(mca_ptl_base_module_t *)(&mca_ptl_sm); + /* set buffer pointer */ ptr=((char *)frag)+sizeof(mca_ptl_sm_frag_t)+ mca_ptl_sm_component.fragment_alignment; @@ -77,6 +80,9 @@ static void mca_ptl_sm_second_frag_construct(mca_ptl_sm_frag_t* frag) /* set local rank */ frag->queue_index=mca_ptl_sm_component.my_smp_rank; + /* set pointer to the sending ptl */ + frag->send_ptl=(mca_ptl_base_module_t *)(&mca_ptl_sm); + /* set buffer pointer */ ptr=((char *)frag)+sizeof(mca_ptl_sm_frag_t)+ mca_ptl_sm_component.fragment_alignment; diff --git a/src/mca/ptl/sm/src/ptl_sm_frag.h b/src/mca/ptl/sm/src/ptl_sm_frag.h index 4bab7dc444..3db96b5ab2 100644 --- a/src/mca/ptl/sm/src/ptl_sm_frag.h +++ b/src/mca/ptl/sm/src/ptl_sm_frag.h @@ -34,6 +34,7 @@ struct mca_ptl_sm_frag_t { size_t buff_length; /**< size of buffer */ int queue_index; /**< local process index, cached for fast acking */ + struct mca_ptl_base_module_t* send_ptl; /**< PTL that is selected for first fragment */ void *buff; /**< pointer to buffer */ void *buff_offset_from_segment_base; /**< pointer to buffer, relative to base of the