From fd49ed47e36546f08a247edd3515619556aa07b5 Mon Sep 17 00:00:00 2001 From: Morris Jette <jette@schedmd.com> Date: Thu, 10 Aug 2017 16:10:18 -0600 Subject: [PATCH] Enable different executable and args for pack-job Modify srun logic so each pack job component can have a different executable program and arguments. --- src/srun/libsrun/opt.c | 2 +- src/srun/libsrun/srun_job.c | 19 ++++++++++--------- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/src/srun/libsrun/opt.c b/src/srun/libsrun/opt.c index 03f5f65df22..79bab260ea7 100644 --- a/src/srun/libsrun/opt.c +++ b/src/srun/libsrun/opt.c @@ -2381,7 +2381,7 @@ static void _opt_args(int argc, char **argv, int pack_offset) opt.argc = 0; if (optind < argc) { rest = argv + optind; - while (rest[opt.argc] != NULL) + while ((rest[opt.argc] != NULL) && strcmp(rest[opt.argc], ":")) opt.argc++; } diff --git a/src/srun/libsrun/srun_job.c b/src/srun/libsrun/srun_job.c index 734dea56c2b..5d2394c3d20 100644 --- a/src/srun/libsrun/srun_job.c +++ b/src/srun/libsrun/srun_job.c @@ -503,7 +503,7 @@ static void _pack_grp_test(List opt_list) */ static void _match_job_name(List opt_list) { - int cnt, i; + int cnt; ListIterator iter; opt_t *opt_local; @@ -518,13 +518,6 @@ static void _match_job_name(List opt_list) while ((opt_local = (opt_t *) list_next(iter))) { if (!opt_local->job_name) opt_local->job_name = xstrdup(opt.job_name); - if ((opt.argc != 0) && (opt_local->argc != opt.argc)) { - opt_local->argc = opt.argc; - xfree(opt_local->argv); - opt_local->argv = xmalloc(sizeof(char *) * opt.argc); - for (i = 0; i < opt.argc; i++) - opt_local->argv[i] = xstrdup(opt.argv[i]); - } } list_iterator_destroy(iter); } @@ -540,7 +533,7 @@ extern void init_srun(int argc, char **argv, bool handle_signals) { bool pack_fini = false; - int pack_argc, pack_inx, pack_argc_off; + int i, pack_argc, pack_inx, pack_argc_off; char **pack_argv; /* @@ -577,6 +570,14 @@ extern void init_srun(int argc, char **argv, error("srun parameter parsing"); exit(1); } + if ((pack_argc_off >= 0) && (pack_argc_off < pack_argc)) { + for (i = pack_argc_off; i < pack_argc; i++) { + if (!xstrcmp(pack_argv[i], ":")) { + pack_argc_off = i; + break; + } + } + } if ((pack_argc_off >= 0) && (pack_argc_off < pack_argc) && !xstrcmp(pack_argv[pack_argc_off], ":")) { /* -- GitLab