1
1

make launching multiple apps work again and some code cleanups

This commit was SVN r6498.
Этот коммит содержится в:
Tim Prins 2005-07-14 20:40:05 +00:00
родитель 1dfbd0e296
Коммит 5a12889d4e
3 изменённых файлов: 73 добавлений и 82 удалений

Просмотреть файл

@ -32,6 +32,7 @@
#include "opal/util/opal_environ.h" #include "opal/util/opal_environ.h"
#include "opal/util/path.h" #include "opal/util/path.h"
#include "opal/util/sys_info.h" #include "opal/util/sys_info.h"
#include "orte/class/orte_pointer_array.h"
#include "orte/util/proc_info.h" #include "orte/util/proc_info.h"
#include "orte/mca/errmgr/errmgr.h" #include "orte/mca/errmgr/errmgr.h"
#include "orte/mca/iof/iof.h" #include "orte/mca/iof/iof.h"
@ -59,8 +60,8 @@ orte_pls_base_module_t orte_pls_bproc_module = {
orte_pls_bproc_finalize orte_pls_bproc_finalize
}; };
static orte_process_name_t ** orte_pls_bproc_daemon_names = NULL; static orte_pointer_array_t * orte_pls_bproc_daemon_names;
static int orte_pls_bproc_num_daemons = 0; static size_t orte_pls_bproc_num_daemons = 0;
static int orte_pls_bproc_node_array(orte_rmaps_base_map_t* map, static int orte_pls_bproc_node_array(orte_rmaps_base_map_t* map,
int ** node_array, int * node_array_len); int ** node_array, int * node_array_len);
static int orte_pls_bproc_node_list(int * node_array, int node_array_len, static int orte_pls_bproc_node_list(int * node_array, int node_array_len,
@ -166,7 +167,6 @@ static int orte_pls_bproc_setup_io(orte_jobid_t jobid, struct bproc_io_t * io,
if (NULL == orte_system_info.user) { /* error condition */ if (NULL == orte_system_info.user) { /* error condition */
return OMPI_ERROR; return OMPI_ERROR;
} }
if (NULL == orte_universe_info.name) { /* error condition */ if (NULL == orte_universe_info.name) { /* error condition */
return OMPI_ERROR; return OMPI_ERROR;
} }
@ -176,7 +176,7 @@ static int orte_pls_bproc_setup_io(orte_jobid_t jobid, struct bproc_io_t * io,
ORTE_ERROR_LOG(rc); ORTE_ERROR_LOG(rc);
goto cleanup; goto cleanup;
} }
/* build the directory tree the io files will be in */
if (0 > asprintf(&frontend, "%stmp%sopenmpi-bproc-%s%s%s%s%s-%d%s%d", if (0 > asprintf(&frontend, "%stmp%sopenmpi-bproc-%s%s%s%s%s-%d%s%d",
orte_system_info.path_sep, orte_system_info.path_sep, orte_system_info.path_sep, orte_system_info.path_sep,
orte_system_info.user, orte_system_info.path_sep, orte_system_info.user, orte_system_info.path_sep,
@ -187,10 +187,8 @@ static int orte_pls_bproc_setup_io(orte_jobid_t jobid, struct bproc_io_t * io,
goto cleanup; goto cleanup;
} }
for(i = 0; i < 3; i++) for(i = 0; i < 3; i++) {
{ if(0 > asprintf(&path, "%s%s%d", frontend, orte_system_info.path_sep, i)) {
if(0 > asprintf(&path, "%s%s%d", frontend,
orte_system_info.path_sep, i)) {
rc = OMPI_ERR_OUT_OF_RESOURCE; rc = OMPI_ERR_OUT_OF_RESOURCE;
ORTE_ERROR_LOG(OMPI_ERR_OUT_OF_RESOURCE); ORTE_ERROR_LOG(OMPI_ERR_OUT_OF_RESOURCE);
goto cleanup; goto cleanup;
@ -230,17 +228,9 @@ static int orte_pls_bproc_setup_io(orte_jobid_t jobid, struct bproc_io_t * io,
* Callback for orte_wait_cb. This function decrements the number of currently * Callback for orte_wait_cb. This function decrements the number of currently
* running processes, and when this hits 0 it kills all the daemons */ * running processes, and when this hits 0 it kills all the daemons */
static void orte_pls_bproc_waitpid_cb(pid_t wpid, int status, void *data) { static void orte_pls_bproc_waitpid_cb(pid_t wpid, int status, void *data) {
int i;
orte_process_name_t * proc = (orte_process_name_t*) data; orte_process_name_t * proc = (orte_process_name_t*) data;
int rc; int rc;
/* Clean up the session directory as if we were the process
itself. This covers the case where the process died abnormally
and didn't cleanup its own session directory. */
orte_session_dir_finalize(proc);
orte_iof.iof_flush();
/* set the state of this process */ /* set the state of this process */
if(WIFEXITED(status)) { if(WIFEXITED(status)) {
rc = orte_soh.set_proc_soh(proc, ORTE_PROC_STATE_TERMINATED, status); rc = orte_soh.set_proc_soh(proc, ORTE_PROC_STATE_TERMINATED, status);
@ -257,25 +247,33 @@ static void orte_pls_bproc_waitpid_cb(pid_t wpid, int status, void *data) {
if(0 < mca_pls_bproc_component.debug) { if(0 < mca_pls_bproc_component.debug) {
opal_output(0, "in orte_pls_bproc_waitpid_cb, %d processes left\n", opal_output(0, "in orte_pls_bproc_waitpid_cb, %d processes left\n",
mca_pls_bproc_component.num_procs); mca_pls_bproc_component.num_procs);
}
if(0 > mca_pls_bproc_component.num_procs) {
opal_output(0, "pls_bproc_waitpid_cb: error: process count is less than 0.\n");
} else if(0 == mca_pls_bproc_component.num_procs && } else if(0 == mca_pls_bproc_component.num_procs &&
mca_pls_bproc_component.done_launching) { mca_pls_bproc_component.done_launching) {
orte_buffer_t ack; orte_buffer_t ack;
orte_process_name_t * proc;
size_t i;
OBJ_CONSTRUCT(&ack, orte_buffer_t); OBJ_CONSTRUCT(&ack, orte_buffer_t);
rc = orte_dps.pack(&ack, &i, 1, ORTE_BYTE); rc = orte_dps.pack(&ack, &i, 1, ORTE_BYTE);
if(rc != ORTE_SUCCESS) { if(rc != ORTE_SUCCESS) {
ORTE_ERROR_LOG(rc); ORTE_ERROR_LOG(rc);
} }
for(i = 0; i < orte_pls_bproc_num_daemons; i++) { for(i = 0; i < orte_pls_bproc_num_daemons; i++) {
rc = mca_oob_send_packed(orte_pls_bproc_daemon_names[i], &ack, proc = orte_pointer_array_get_item(orte_pls_bproc_daemon_names, i);
MCA_OOB_TAG_BPROC, 0); if(NULL == proc) {
ORTE_ERROR_LOG(rc);
continue;
}
rc = mca_oob_send_packed(proc, &ack, MCA_OOB_TAG_BPROC, 0);
if (0 > rc) { if (0 > rc) {
ORTE_ERROR_LOG(rc); ORTE_ERROR_LOG(rc);
} }
free(proc);
} }
OBJ_DESTRUCT(&ack); OBJ_DESTRUCT(&ack);
OBJ_RELEASE(orte_pls_bproc_daemon_names);
} }
OPAL_THREAD_UNLOCK(&mca_pls_bproc_component.lock); OPAL_THREAD_UNLOCK(&mca_pls_bproc_component.lock);
} }
@ -295,22 +293,23 @@ static int orte_pls_bproc_launch_app(orte_jobid_t jobid,
int node_array_len; int node_array_len;
int num_nodes; int num_nodes;
int num_processes = 0; int num_processes = 0;
int * pids = NULL; int num_daemons;
orte_vpid_t daemon_vpid_start = 0; int num_env;
int rc, i, j; int rc, i, j;
char ** argv = NULL; int * pids = NULL;
int argc; int argc;
char ** argv = NULL;
char * var, * param; char * var, * param;
char * exec_path; char * exec_path;
int num_env;
int num_daemons;
struct bproc_io_t bproc_io[3];
orte_buffer_t ack; orte_buffer_t ack;
orte_jobid_t daemon_jobid; orte_jobid_t daemon_jobid;
orte_cellid_t cellid; orte_cellid_t cellid;
orte_process_name_t * proc_name; orte_process_name_t * proc_name;
orte_vpid_t daemon_vpid_start = 0;
orte_vpid_t global_vpid_start = vpid_start; orte_vpid_t global_vpid_start = vpid_start;
size_t idx;
struct stat buf; struct stat buf;
struct bproc_io_t bproc_io[3];
OBJ_CONSTRUCT(&ack, orte_buffer_t); OBJ_CONSTRUCT(&ack, orte_buffer_t);
@ -329,12 +328,6 @@ static int orte_pls_bproc_launch_app(orte_jobid_t jobid,
ORTE_ERROR_LOG(rc); ORTE_ERROR_LOG(rc);
goto cleanup; goto cleanup;
} }
orte_pls_bproc_daemon_names = (orte_process_name_t **)
malloc(sizeof(orte_process_name_t*)*num_daemons);
if(NULL == orte_pls_bproc_daemon_names) {
ORTE_ERROR_LOG(OMPI_ERR_OUT_OF_RESOURCE);
goto cleanup;
}
if(NULL == (pids = (int*)malloc(sizeof(int) * num_daemons))) { if(NULL == (pids = (int*)malloc(sizeof(int) * num_daemons))) {
ORTE_ERROR_LOG(OMPI_ERR_OUT_OF_RESOURCE); ORTE_ERROR_LOG(OMPI_ERR_OUT_OF_RESOURCE);
goto cleanup; goto cleanup;
@ -484,7 +477,6 @@ static int orte_pls_bproc_launch_app(orte_jobid_t jobid,
/* launch the daemons */ /* launch the daemons */
rc = bproc_vexecmove(num_daemons, node_list, pids, exec_path, argv, rc = bproc_vexecmove(num_daemons, node_list, pids, exec_path, argv,
map->app->env); map->app->env);
if(rc != num_daemons) { if(rc != num_daemons) {
opal_output(0, "Failed to launch proper number of daemons."); opal_output(0, "Failed to launch proper number of daemons.");
rc = ORTE_ERROR; rc = ORTE_ERROR;
@ -501,15 +493,21 @@ static int orte_pls_bproc_launch_app(orte_jobid_t jobid,
ORTE_ERROR_LOG(rc); ORTE_ERROR_LOG(rc);
goto cleanup; goto cleanup;
} else { } else {
rc = orte_ns.create_process_name(&orte_pls_bproc_daemon_names[i], rc = orte_ns.create_process_name(&proc_name, cellid, daemon_jobid,
cellid, daemon_jobid, daemon_vpid_start + j); daemon_vpid_start + i);
if(ORTE_SUCCESS != rc) {
ORTE_ERROR_LOG(rc);
goto cleanup;
}
rc = orte_pointer_array_add(&idx, orte_pls_bproc_daemon_names,
proc_name);
if(ORTE_SUCCESS != rc) { if(ORTE_SUCCESS != rc) {
ORTE_ERROR_LOG(rc); ORTE_ERROR_LOG(rc);
goto cleanup; goto cleanup;
} }
} }
} }
orte_pls_bproc_num_daemons = num_daemons; orte_pls_bproc_num_daemons += num_daemons;
free(exec_path); free(exec_path);
exec_path = NULL; exec_path = NULL;
@ -638,8 +636,7 @@ cleanup:
* Query for the default mapping. Launch each application context * Query for the default mapping. Launch each application context
* w/ a distinct set of daemons. * w/ a distinct set of daemons.
*/ */
int orte_pls_bproc_launch(orte_jobid_t jobid) int orte_pls_bproc_launch(orte_jobid_t jobid) {
{
opal_list_item_t* item; opal_list_item_t* item;
opal_list_t mapping; opal_list_t mapping;
orte_vpid_t vpid_start; orte_vpid_t vpid_start;
@ -658,6 +655,13 @@ int orte_pls_bproc_launch(orte_jobid_t jobid)
goto cleanup; goto cleanup;
} }
/* init the list to hold the daemon names */
if(ORTE_SUCCESS != (rc = orte_pointer_array_init(&orte_pls_bproc_daemon_names,
8, 200000, 8))) {
ORTE_ERROR_LOG(rc);
goto cleanup;
}
/* do a large lock so the processes will not decrement the process count /* do a large lock so the processes will not decrement the process count
* until we are done launching */ * until we are done launching */
OPAL_THREAD_LOCK(&mca_pls_bproc_component.lock); OPAL_THREAD_LOCK(&mca_pls_bproc_component.lock);
@ -675,22 +679,19 @@ int orte_pls_bproc_launch(orte_jobid_t jobid)
} }
} }
mca_pls_bproc_component.done_launching = true; mca_pls_bproc_component.done_launching = true;
OPAL_THREAD_UNLOCK(&mca_pls_bproc_component.lock);
cleanup: cleanup:
OPAL_THREAD_UNLOCK(&mca_pls_bproc_component.lock);
while(NULL != (item = opal_list_remove_first(&mapping))) while(NULL != (item = opal_list_remove_first(&mapping)))
OBJ_RELEASE(item); OBJ_RELEASE(item);
OBJ_DESTRUCT(&mapping); OBJ_DESTRUCT(&mapping);
return rc; return rc;
} }
/** /**
* Terminate all processes associated with this job - including * Terminate all processes associated with this job - including
* daemons. * daemons.
*/ */
int orte_pls_bproc_terminate_job(orte_jobid_t jobid) {
int orte_pls_bproc_terminate_job(orte_jobid_t jobid)
{
pid_t* pids; pid_t* pids;
size_t i, num_pids; size_t i, num_pids;
int rc; int rc;
@ -721,12 +722,10 @@ int orte_pls_bproc_terminate_job(orte_jobid_t jobid)
return ORTE_SUCCESS; return ORTE_SUCCESS;
} }
/** /**
* Terminate a specific process. * Terminate a specific process.
*/ */
int orte_pls_bproc_terminate_proc(const orte_process_name_t* proc_name) int orte_pls_bproc_terminate_proc(const orte_process_name_t* proc_name) {
{
int rc; int rc;
pid_t pid; pid_t pid;
if(ORTE_SUCCESS != (rc = orte_pls_base_get_proc_pid(proc_name, &pid))) if(ORTE_SUCCESS != (rc = orte_pls_base_get_proc_pid(proc_name, &pid)))
@ -749,8 +748,7 @@ int orte_pls_bproc_terminate_proc(const orte_process_name_t* proc_name)
/** /**
* Module cleanup * Module cleanup
*/ */
int orte_pls_bproc_finalize(void) int orte_pls_bproc_finalize(void) {
{
return ORTE_SUCCESS; return ORTE_SUCCESS;
} }

Просмотреть файл

@ -53,7 +53,7 @@ orte_pls_bproc_component_t mca_pls_bproc_component = {
/** /**
* Convience functions to lookup MCA parameter values. * Convience functions to lookup MCA parameter values.
*/ */
static int orte_pls_bproc_param_register_int(const char* param_name, static int orte_pls_bproc_param_register_int(const char* param_name,
int default_value) { int default_value) {
int id = mca_base_param_register_int("pls", "bproc", param_name, NULL, int id = mca_base_param_register_int("pls", "bproc", param_name, NULL,
default_value); default_value);
@ -88,7 +88,6 @@ int orte_pls_bproc_component_open(void) {
return ORTE_SUCCESS; return ORTE_SUCCESS;
} }
int orte_pls_bproc_component_close(void) { int orte_pls_bproc_component_close(void) {
OBJ_DESTRUCT(&mca_pls_bproc_component.lock); OBJ_DESTRUCT(&mca_pls_bproc_component.lock);
return ORTE_SUCCESS; return ORTE_SUCCESS;
@ -101,7 +100,6 @@ int orte_pls_bproc_component_close(void) {
orte_pls_base_module_t* orte_pls_bproc_init(int *priority) { orte_pls_base_module_t* orte_pls_bproc_init(int *priority) {
int ret; int ret;
struct bproc_version_t version; struct bproc_version_t version;
/* are we the seed */ /* are we the seed */
if(orte_process_info.seed == false) if(orte_process_info.seed == false)

Просмотреть файл

@ -62,6 +62,7 @@ static void pls_bproc_orted_delete_dir_tree(char * path);
static int pls_bproc_orted_remove_dir(void); static int pls_bproc_orted_remove_dir(void);
static void pls_bproc_orted_kill_cb(int status, orte_process_name_t * peer, static void pls_bproc_orted_kill_cb(int status, orte_process_name_t * peer,
orte_buffer_t* buffer, int tag, void* cbdata); orte_buffer_t* buffer, int tag, void* cbdata);
/** /**
* Creates the passed directory. If the directory already exists, it and its * Creates the passed directory. If the directory already exists, it and its
* contents will be deleted then the directory will be created. * contents will be deleted then the directory will be created.
@ -94,7 +95,7 @@ static char * pls_bproc_orted_get_base_dir_name(int proc_rank, orte_jobid_t jobi
orte_sys_info(); orte_sys_info();
if (NULL == orte_universe_info.name) { /* error condition */ if (NULL == orte_universe_info.name) { /* error condition */
ORTE_ERROR_LOG(OMPI_ERROR); ORTE_ERROR_LOG(ORTE_ERROR);
return NULL; return NULL;
} }
@ -117,7 +118,7 @@ static char * pls_bproc_orted_get_base_dir_name(int proc_rank, orte_jobid_t jobi
orte_system_info.path_sep, orte_universe_info.name, orte_system_info.path_sep, orte_universe_info.name,
orte_system_info.path_sep, job, (int) app_context, orte_system_info.path_sep, job, (int) app_context,
orte_system_info.path_sep, proc_rank)) { orte_system_info.path_sep, proc_rank)) {
ORTE_ERROR_LOG(OMPI_ERROR); ORTE_ERROR_LOG(ORTE_ERROR);
path = NULL; path = NULL;
} }
free(user); free(user);
@ -143,13 +144,13 @@ static int pls_bproc_orted_link_pty(int proc_rank, char * pty_path,
frontend = pls_bproc_orted_get_base_dir_name(proc_rank, jobid, app_context); frontend = pls_bproc_orted_get_base_dir_name(proc_rank, jobid, app_context);
if(NULL == frontend) { if(NULL == frontend) {
rc = OMPI_ERROR; rc = ORTE_ERROR;
ORTE_ERROR_LOG(rc); ORTE_ERROR_LOG(rc);
goto cleanup; goto cleanup;
} }
/* check for existence and access, or create it */ /* check for existence and access, or create it */
if (OMPI_SUCCESS != (rc = pls_bproc_orted_make_dir(frontend))) { if (ORTE_SUCCESS != (rc = pls_bproc_orted_make_dir(frontend))) {
ORTE_ERROR_LOG(rc); ORTE_ERROR_LOG(rc);
goto cleanup; goto cleanup;
} }
@ -158,7 +159,7 @@ static int pls_bproc_orted_link_pty(int proc_rank, char * pty_path,
{ {
if(0 > asprintf(&link_path, "%s%s%d", frontend, if(0 > asprintf(&link_path, "%s%s%d", frontend,
orte_system_info.path_sep, i)) { orte_system_info.path_sep, i)) {
rc = OMPI_ERROR; rc = ORTE_ERROR;
ORTE_ERROR_LOG(rc); ORTE_ERROR_LOG(rc);
goto cleanup; goto cleanup;
} }
@ -169,13 +170,13 @@ static int pls_bproc_orted_link_pty(int proc_rank, char * pty_path,
if(0 != i || connect_stdin) { if(0 != i || connect_stdin) {
if(0 != symlink(pty_path, link_path)) { if(0 != symlink(pty_path, link_path)) {
perror("pls_bproc_orted could not create symlink"); perror("pls_bproc_orted could not create symlink");
rc = OMPI_ERROR; rc = ORTE_ERROR;
goto cleanup; goto cleanup;
} }
} else { /* otherwise connect stdin to /dev/null */ } else { /* otherwise connect stdin to /dev/null */
if(0 != symlink("/dev/null", link_path)) { if(0 != symlink("/dev/null", link_path)) {
perror("pls_bproc_orted could not create symlink"); perror("pls_bproc_orted could not create symlink");
rc = OMPI_ERROR; rc = ORTE_ERROR;
goto cleanup; goto cleanup;
} }
} }
@ -196,7 +197,7 @@ static int pls_bproc_orted_link_pty(int proc_rank, char * pty_path,
/** /**
* creates pipes for the io in the filesystem in the directory * creates pipes for the io in the filesystem in the directory
* /tmp/openmpi-bproc-<user>/<universe>/<jobid>-<app_context>/<proc_rank>/ * /tmp/openmpi-bproc-<user>/<universe>/<jobid>-<app_context>/<proc_rank>/
* and returns their file dexcriptors * and returns their file descriptors
* @param proc_rank the process's rank on the node * @param proc_rank the process's rank on the node
* @param jobid the jobid the proc belongs to * @param jobid the jobid the proc belongs to
* @param fd a pointer to an array of file descriptors 3 long * @param fd a pointer to an array of file descriptors 3 long
@ -211,13 +212,13 @@ static int pls_bproc_orted_link_pipes(int proc_rank, orte_jobid_t jobid, int * f
frontend = pls_bproc_orted_get_base_dir_name(proc_rank, jobid, app_context); frontend = pls_bproc_orted_get_base_dir_name(proc_rank, jobid, app_context);
if(NULL == frontend) { if(NULL == frontend) {
rc = OMPI_ERROR; rc = ORTE_ERROR;
ORTE_ERROR_LOG(rc); ORTE_ERROR_LOG(rc);
goto cleanup; goto cleanup;
} }
/* check for existence and access, or create it */ /* check for existence and access, or create it */
if (OMPI_SUCCESS != (rc = pls_bproc_orted_make_dir(frontend))) { if (ORTE_SUCCESS != (rc = pls_bproc_orted_make_dir(frontend))) {
ORTE_ERROR_LOG(rc); ORTE_ERROR_LOG(rc);
goto cleanup; goto cleanup;
} }
@ -226,7 +227,7 @@ static int pls_bproc_orted_link_pipes(int proc_rank, orte_jobid_t jobid, int * f
{ {
if(0 > asprintf(&link_path, "%s%s%d", frontend, if(0 > asprintf(&link_path, "%s%s%d", frontend,
orte_system_info.path_sep, i)) { orte_system_info.path_sep, i)) {
rc = OMPI_ERROR; rc = ORTE_ERROR;
ORTE_ERROR_LOG(rc); ORTE_ERROR_LOG(rc);
goto cleanup; goto cleanup;
} }
@ -237,10 +238,9 @@ static int pls_bproc_orted_link_pipes(int proc_rank, orte_jobid_t jobid, int * f
if(0 != i || connect_stdin) { if(0 != i || connect_stdin) {
if(0 != mkfifo(link_path, S_IRWXU)) { if(0 != mkfifo(link_path, S_IRWXU)) {
perror("pls_bproc_orted mkfifo failed"); perror("pls_bproc_orted mkfifo failed");
rc = OMPI_ERROR; rc = ORTE_ERROR;
goto cleanup; goto cleanup;
} }
/* for stdin, open write only */
if(0 == i) { if(0 == i) {
fd[i] = open(link_path, O_RDWR); fd[i] = open(link_path, O_RDWR);
} else { } else {
@ -248,13 +248,13 @@ static int pls_bproc_orted_link_pipes(int proc_rank, orte_jobid_t jobid, int * f
} }
if(-1 == fd[i]) { if(-1 == fd[i]) {
perror("pls_bproc_orted open failed"); perror("pls_bproc_orted open failed");
rc = OMPI_ERROR; rc = ORTE_ERROR;
goto cleanup; goto cleanup;
} }
} else { /* otherwise connect stdin to /dev/null */ } else { /* otherwise connect stdin to /dev/null */
if(0 != symlink("/dev/null", link_path)) { if(0 != symlink("/dev/null", link_path)) {
perror("pls_bproc_orted could not create symlink"); perror("pls_bproc_orted could not create symlink");
rc = OMPI_ERROR; rc = ORTE_ERROR;
goto cleanup; goto cleanup;
} }
} }
@ -323,13 +323,14 @@ static int pls_bproc_orted_remove_dir() {
orte_system_info.path_sep, orte_system_info.path_sep, user)) { orte_system_info.path_sep, orte_system_info.path_sep, user)) {
free(frontend); free(frontend);
ORTE_ERROR_LOG(ORTE_ERR_OUT_OF_RESOURCE); ORTE_ERROR_LOG(ORTE_ERR_OUT_OF_RESOURCE);
return OMPI_ERROR; return ORTE_ERROR;
} }
/* we do our best to clean up the directory tree, but we ignore errors*/ /* we do our best to clean up the directory tree, but we ignore errors*/
pls_bproc_orted_delete_dir_tree(frontend); pls_bproc_orted_delete_dir_tree(frontend);
free(frontend); free(frontend);
return OMPI_SUCCESS; return ORTE_SUCCESS;
} }
/** /**
* Callback function for when mpirun sends us a message saying all the child * Callback function for when mpirun sends us a message saying all the child
* procs are done */ * procs are done */
@ -342,8 +343,7 @@ static void pls_bproc_orted_kill_cb(int status, orte_process_name_t * peer,
* Setup io for the current node, then tell orterun we are ready for the actual * Setup io for the current node, then tell orterun we are ready for the actual
* processes. * processes.
*/ */
int orte_pls_bproc_orted_launch(orte_jobid_t jobid) int orte_pls_bproc_orted_launch(orte_jobid_t jobid) {
{
opal_list_t map; opal_list_t map;
orte_rmaps_base_map_t * mapping; orte_rmaps_base_map_t * mapping;
orte_rmaps_base_proc_t * proc; orte_rmaps_base_proc_t * proc;
@ -418,7 +418,7 @@ int orte_pls_bproc_orted_launch(orte_jobid_t jobid)
master[2] = master[1] = master[0]; master[2] = master[1] = master[0];
rc = pls_bproc_orted_link_pty(num_procs, pty_name, jobid, rc = pls_bproc_orted_link_pty(num_procs, pty_name, jobid,
connect_stdin, app_context); connect_stdin, app_context);
if(OMPI_SUCCESS != rc) { if(ORTE_SUCCESS != rc) {
ORTE_ERROR_LOG(rc); ORTE_ERROR_LOG(rc);
goto cleanup; goto cleanup;
} }
@ -430,7 +430,7 @@ int orte_pls_bproc_orted_launch(orte_jobid_t jobid)
} }
rc = pls_bproc_orted_link_pipes(num_procs, jobid, master, rc = pls_bproc_orted_link_pipes(num_procs, jobid, master,
connect_stdin, app_context); connect_stdin, app_context);
if(OMPI_SUCCESS != rc) { if(ORTE_SUCCESS != rc) {
ORTE_ERROR_LOG(rc); ORTE_ERROR_LOG(rc);
goto cleanup; goto cleanup;
} }
@ -466,7 +466,7 @@ int orte_pls_bproc_orted_launch(orte_jobid_t jobid)
ORTE_ERROR_LOG(rc); ORTE_ERROR_LOG(rc);
goto cleanup; goto cleanup;
} }
rc = OMPI_SUCCESS; rc = ORTE_SUCCESS;
cleanup: cleanup:
while(NULL != (item = opal_list_remove_first(&map))) { while(NULL != (item = opal_list_remove_first(&map))) {
@ -484,21 +484,16 @@ cleanup:
* Query for all processes allocated to the job and terminate * Query for all processes allocated to the job and terminate
* those on the current node. * those on the current node.
*/ */
int orte_pls_bproc_orted_terminate_job(orte_jobid_t jobid) {
int orte_pls_bproc_orted_terminate_job(orte_jobid_t jobid)
{
orte_iof.iof_flush(); orte_iof.iof_flush();
return ORTE_SUCCESS; return ORTE_SUCCESS;
} }
int orte_pls_bproc_orted_terminate_proc(const orte_process_name_t* proc) {
int orte_pls_bproc_orted_terminate_proc(const orte_process_name_t* proc)
{
return ORTE_SUCCESS; return ORTE_SUCCESS;
} }
int orte_pls_bproc_orted_finalize(void) int orte_pls_bproc_orted_finalize(void) {
{
OPAL_THREAD_LOCK(&mca_pls_bproc_orted_component.lock); OPAL_THREAD_LOCK(&mca_pls_bproc_orted_component.lock);
opal_condition_wait(&mca_pls_bproc_orted_component.condition, opal_condition_wait(&mca_pls_bproc_orted_component.condition,
&mca_pls_bproc_orted_component.lock); &mca_pls_bproc_orted_component.lock);