diff --git a/orte/mca/plm/base/plm_base_launch_support.c b/orte/mca/plm/base/plm_base_launch_support.c index bb1e6b4717..41712bdc26 100644 --- a/orte/mca/plm/base/plm_base_launch_support.c +++ b/orte/mca/plm/base/plm_base_launch_support.c @@ -1083,14 +1083,26 @@ int orte_plm_base_orted_append_basic_args(int *argc, char ***argv, /* check for debug flags */ if (orte_debug_flag) { - opal_argv_append(argc, argv, "--debug"); + opal_argv_append(argc, argv, "-mca"); + opal_argv_append(argc, argv, "orte_debug"); + opal_argv_append(argc, argv, "1"); } if (orte_debug_daemons_flag) { - opal_argv_append(argc, argv, "--debug-daemons"); + opal_argv_append(argc, argv, "-mca"); + opal_argv_append(argc, argv, "orte_debug_daemons"); + opal_argv_append(argc, argv, "1"); } if (orte_debug_daemons_file_flag) { - opal_argv_append(argc, argv, "--debug-daemons-file"); + opal_argv_append(argc, argv, "-mca"); + opal_argv_append(argc, argv, "orte_debug_daemons_file"); + opal_argv_append(argc, argv, "1"); } + if (orte_leave_session_attached) { + opal_argv_append(argc, argv, "-mca"); + opal_argv_append(argc, argv, "orte_leave_session_attached"); + opal_argv_append(argc, argv, "1"); + } + if (orted_spin_flag) { opal_argv_append(argc, argv, "--spin"); } @@ -1302,15 +1314,10 @@ int orte_plm_base_orted_append_basic_args(int *argc, char ***argv, } } if (!ignore) { - /* even if it is a single word, we have to try and quote it - * because it could contain a special character like a colon - * or semicolon */ - (void)asprintf(&tmp_force, "\"%s\"", orted_cmd_line[i+2]); /* pass it along */ opal_argv_append(argc, argv, orted_cmd_line[i]); opal_argv_append(argc, argv, orted_cmd_line[i+1]); - opal_argv_append(argc, argv, tmp_force); - free(tmp_force); + opal_argv_append(argc, argv, orted_cmd_line[i+2]); } } } diff --git a/orte/mca/plm/rsh/plm_rsh_module.c b/orte/mca/plm/rsh/plm_rsh_module.c index b61cde48c8..5bb3b21062 100644 --- a/orte/mca/plm/rsh/plm_rsh_module.c +++ b/orte/mca/plm/rsh/plm_rsh_module.c @@ -573,16 +573,12 @@ static int setup_launch(int *argcptr, char ***argvptr, */ cnt = opal_argv_count(orted_cmd_line); for (i=0; i < cnt; i+=3) { - if (NULL != strchr(orted_cmd_line[i+2], ' ')) { + if (NULL == strchr(orted_cmd_line[i+2], ' ')) { continue; } - /* protect the value with quotes */ - (void)asprintf(¶m, "\"%s\"", orted_cmd_line[i+2]); - /* now pass it along */ opal_argv_append(&argc, &argv, orted_cmd_line[i]); opal_argv_append(&argc, &argv, orted_cmd_line[i+1]); - opal_argv_append(&argc, &argv, param); - free(param); + opal_argv_append(&argc, &argv, orted_cmd_line[i+2]); } /* unless told otherwise... */ @@ -611,22 +607,32 @@ static int setup_launch(int *argcptr, char ***argvptr, } } if (!found) { - char *p2; /* add it */ opal_argv_append(&argc, &argv, "-mca"); opal_argv_append(&argc, &argv, param); - /* there could be multi-word values here, or - * values with special characters, so protect - * the value with quotes */ - (void)asprintf(&p2, "\"%s\"", value); - opal_argv_append(&argc, &argv, p2); - free(p2); + opal_argv_append(&argc, &argv, value); } free(param); } } } + /* in the rsh environment, we can append multi-word arguments + * by enclosing them in quotes. Check for any multi-word + * mca params passed to mpirun and protect them + */ + for (i=0; NULL != argv[i]; i++) { + if (0 != strcmp("-mca", argv[i])) { + continue; + } + if (NULL == strchr(argv[i+2], ' ')) { + continue; + } + (void)asprintf(¶m, "\"%s\"", argv[i+2]); + free(argv[i+2]); + argv[i+2] = param; + } + value = opal_argv_join(argv, ' '); if (sysconf(_SC_ARG_MAX) < (int)strlen(value)) { orte_show_help("help-plm-rsh.txt", "cmd-line-too-long",