static void *mca_oob_ud_complete_dispatch(int fd, int flags, void *context) { mca_oob_ud_req_t *req; OPAL_THREAD_LOCK(&mca_oob_ud_component.ud_match_lock); while (NULL != (req = (mca_oob_ud_req_t *) opal_list_remove_first (&mca_oob_ud_component.ud_event_queued_reqs))) { OPAL_THREAD_UNLOCK(&mca_oob_ud_component.ud_match_lock); OPAL_OUTPUT_VERBOSE((10, mca_oob_base_output, "%s oob:ud:event_process processing request %p", ORTE_NAME_PRINT(ORTE_PROC_MY_NAME), (void *) req)); req->req_list = NULL; switch (req->type) { case MCA_OOB_UD_REQ_RECV: case MCA_OOB_UD_REQ_UNEX: if (req->state == MCA_OOB_UD_REQ_COMPLETE) { mca_oob_ud_recv_complete (req); } else { mca_oob_ud_req_append_to_list (req, &mca_oob_ud_component.ud_active_recvs); mca_oob_ud_recv_try (req); } break; case MCA_OOB_UD_REQ_SEND: if (req->state == MCA_OOB_UD_REQ_COMPLETE) { mca_oob_ud_send_complete (req, ORTE_SUCCESS); } else { mca_oob_ud_req_append_to_list (req, &mca_oob_ud_component.ud_active_sends); mca_oob_ud_send_try (req); } break; default: break; } OPAL_THREAD_LOCK(&mca_oob_ud_component.ud_match_lock); } return NULL; }
static void mca_oob_ud_send_try_to (int fd, short event, void *ctx) { OPAL_THREAD_LOCK(&mca_oob_ud_component.ud_match_lock); (void) mca_oob_ud_send_try ((mca_oob_ud_req_t *) ctx); OPAL_THREAD_UNLOCK(&mca_oob_ud_component.ud_match_lock); }