void orte_show_help_finalize(void) { if (!ready) { return; } ready = false; /* Shutdown show_help, showing final messages */ if (orte_process_info.hnp) { show_accumulated_duplicates(0, 0, NULL); OBJ_DESTRUCT(&abd_tuples); if (show_help_timer_set) { opal_evtimer_del(&show_help_timer_event); } /* cancel the recv */ orte_rml.recv_cancel(ORTE_NAME_WILDCARD, ORTE_RML_TAG_SHOW_HELP); return; } }
int orte_pls_base_orted_kill_local_procs(opal_list_t *daemons, orte_jobid_t job, struct timeval *timeout) { int rc; orte_buffer_t cmd; orte_daemon_cmd_flag_t command=ORTE_DAEMON_KILL_LOCAL_PROCS; opal_list_item_t *item; orte_pls_daemon_info_t *dmn; opal_event_t* event = NULL; OPAL_TRACE(1); OBJ_CONSTRUCT(&cmd, orte_buffer_t); /* pack the command */ if (ORTE_SUCCESS != (rc = orte_dss.pack(&cmd, &command, 1, ORTE_DAEMON_CMD))) { ORTE_ERROR_LOG(rc); OBJ_DESTRUCT(&cmd); return rc; } /* pack the jobid */ if (ORTE_SUCCESS != (rc = orte_dss.pack(&cmd, &job, 1, ORTE_JOBID))) { ORTE_ERROR_LOG(rc); OBJ_DESTRUCT(&cmd); return rc; } /* send the commands as fast as we can */ for (item = opal_list_get_first(daemons); item != opal_list_get_end(daemons); item = opal_list_get_next(item)) { dmn = (orte_pls_daemon_info_t*)item; if (0 > orte_rml.send_buffer_nb(dmn->name, &cmd, ORTE_RML_TAG_PLS_ORTED, 0, orte_pls_base_orted_send_cb, NULL)) { ORTE_ERROR_LOG(ORTE_ERR_COMM_FAILURE); OBJ_DESTRUCT(&cmd); return rc; } orted_cmd_num_active++; } OBJ_DESTRUCT(&cmd); /* post the receive for the ack's */ rc = orte_rml.recv_buffer_nb(ORTE_NAME_WILDCARD, ORTE_RML_TAG_PLS_ORTED_ACK, ORTE_RML_NON_PERSISTENT, orte_pls_base_cmd_ack, NULL); if (rc != ORTE_SUCCESS) { ORTE_ERROR_LOG(rc); return rc; } /* define the default completion status */ completion_status = ORTE_SUCCESS; /* wait for all commands to have been received */ OPAL_THREAD_LOCK(&orte_pls_base.orted_cmd_lock); if (orted_cmd_num_active > 0) { /* setup a delay to give the orteds time to complete their departure - wake us up if they * don't exit by the prescribed time */ if (NULL != timeout && /* only do this if the user gave us a time to wait */ NULL != (event = (opal_event_t*)malloc(sizeof(opal_event_t)))) { opal_evtimer_set(event, orte_pls_base_orted_default_wakeup, NULL); opal_evtimer_add(event, timeout); } /* now go to sleep until woken up */ opal_condition_wait(&orte_pls_base.orted_cmd_cond, &orte_pls_base.orted_cmd_lock); } OPAL_THREAD_UNLOCK(&orte_pls_base.orted_cmd_lock); /* log an error if one occurred */ if (ORTE_SUCCESS != completion_status) { ORTE_ERROR_LOG(completion_status); } /* if started, kill the timer event so it doesn't hit us later */ if (NULL != event) { opal_evtimer_del(event); free(event); } /* we're done! */ return completion_status; }