int MPID_nem_newmad_anysource_matched(MPID_Request *rreq) { /* This function is called when an anysource request in the posted receive queue is matched and dequeued */ nm_sr_request_t *nmad_request = NULL; int ret; int matched = FALSE; #ifdef DEBUG fprintf(stdout,"========> Any Source : MPID_nem_newmad_anysource_matched , req is %p\n",rreq); #endif MPID_NEM_NMAD_GET_REQ_FROM_HASH(rreq,nmad_request); if(nmad_request != NULL) { #ifdef DEBUG fprintf(stdout,"========> Any Source nmad req found :%p \n",nmad_request); #endif ret = nm_sr_rcancel(mpid_nem_newmad_session,nmad_request); if (ret != NM_ESUCCESS) { #ifdef DEBUG fprintf(stdout,"========> Any Source nmad req (%p) not cancelled \n",nmad_request); #endif size_t size; nm_tag_t match_info; MPIU_Assert(MPIDI_Request_get_type(rreq) != MPIDI_REQUEST_TYPE_GET_RESP); ret = nm_sr_rwait(mpid_nem_newmad_session,nmad_request); MPIU_Assert(ret == NM_ESUCCESS); nm_sr_request_unset_completion_queue(mpid_nem_newmad_session,nmad_request); nm_sr_get_rtag(mpid_nem_newmad_session,nmad_request,&match_info); nm_sr_get_size(mpid_nem_newmad_session,nmad_request,&size); MPID_nem_newmad_handle_rreq(rreq,match_info, size); matched = TRUE; } else { MPID_Segment_free(rreq->dev.segment_ptr); if (REQ_FIELD(rreq,iov) != NULL) MPIU_Free(REQ_FIELD(rreq,iov)); } MPIU_Free(nmad_request); } return matched; }
int MPID_nem_newmad_cancel_recv(MPIDI_VC_t *vc, MPID_Request *rreq) { nm_sr_request_t *nmad_req = NULL; int mpi_errno = MPI_SUCCESS; int ret; nmad_req = &(REQ_FIELD(rreq,newmad_req)); ret = nm_sr_rcancel(mpid_nem_newmad_session,nmad_req); if (ret == NM_ESUCCESS) { rreq->status.cancelled = TRUE; } else { rreq->status.cancelled = FALSE; } fn_exit: return mpi_errno; fn_fail: ATTRIBUTE((unused)) goto fn_exit; }