int MPID_nem_mxm_vc_terminate(MPIDI_VC_t * vc) { int mpi_errno = MPI_SUCCESS; MPID_nem_mxm_vc_area *vc_area = VC_BASE(vc); MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MXM_VC_TERMINATE); MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MXM_VC_TERMINATE); if (vc->state != MPIDI_VC_STATE_CLOSED) { /* VC is terminated as a result of a fault. Complete * outstanding sends with an error and terminate connection * immediately. */ MPIR_ERR_SET1(mpi_errno, MPI_ERR_OTHER, "**comm_fail", "**comm_fail %d", vc->pg_rank); } else { while (vc_area->pending_sends > 0) MPID_nem_mxm_poll(FALSE); } mpi_errno = MPIDI_CH3U_Handle_connection(vc, MPIDI_VC_EVENT_TERMINATED); if (mpi_errno) MPIR_ERR_POP(mpi_errno); fn_exit: MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MXM_VC_TERMINATE); return mpi_errno; fn_fail: goto fn_exit; }
int MPID_nem_ptl_vc_terminated(MPIDI_VC_t *vc) { /* This is called when the VC is to be terminated once all queued sends have been sent. */ int mpi_errno = MPI_SUCCESS; MPIR_FUNC_VERBOSE_STATE_DECL(MPID_NEM_PTL_VC_TERMINATED); MPIR_FUNC_VERBOSE_ENTER(MPID_NEM_PTL_VC_TERMINATED); mpi_errno = MPIDI_CH3U_Handle_connection(vc, MPIDI_VC_EVENT_TERMINATED); if(mpi_errno) MPIR_ERR_POP(mpi_errno); fn_exit: MPIR_FUNC_VERBOSE_EXIT(MPID_NEM_PTL_VC_TERMINATED); return mpi_errno; fn_fail: MPL_DBG_MSG_FMT(MPIDI_CH3_DBG_CHANNEL, VERBOSE, (MPL_DBG_FDEST, "failure. mpi_errno = %d", mpi_errno)); goto fn_exit; }
int MPID_nem_newmad_vc_terminate (MPIDI_VC_t *vc) { /* FIXME: Check to make sure that it's OK to terminate the connection without making sure that all sends have been sent */ return MPIDI_CH3U_Handle_connection (vc, MPIDI_VC_EVENT_TERMINATED); }