From badc6253af8927a42771cc2d1b74c228c8c83272 Mon Sep 17 00:00:00 2001
From: Moe Jette <jette1@llnl.gov>
Date: Tue, 10 Oct 2006 19:24:16 +0000
Subject: [PATCH] send conf task_prolog, task_epilog, and propagate_prio from
 slurmd down to slurmstepd in order to avoid having to parse slurm.conf in
 slurmstepd for each step.

---
 src/slurmd/common/slurmstepd_init.c | 12 ++++++++++++
 src/slurmd/slurmd/slurmd.c          |  1 +
 src/slurmd/slurmd/slurmd.h          |  2 ++
 src/slurmd/slurmstepd/mgr.c         |  7 +++++--
 src/slurmd/slurmstepd/slurmstepd.c  |  4 ----
 5 files changed, 20 insertions(+), 6 deletions(-)

diff --git a/src/slurmd/common/slurmstepd_init.c b/src/slurmd/common/slurmstepd_init.c
index f88b1c57a0d..e01676ba84a 100644
--- a/src/slurmd/common/slurmstepd_init.c
+++ b/src/slurmd/common/slurmstepd_init.c
@@ -44,7 +44,10 @@ extern void pack_slurmd_conf_lite(slurmd_conf_t *conf, Buf buffer)
 	packstr(conf->spooldir, buffer);
 	packstr(conf->node_name, buffer);
 	packstr(conf->logfile, buffer);
+	packstr(conf->task_prolog, buffer);
+	packstr(conf->task_epilog, buffer);
 	pack16(conf->job_acct_freq, buffer);
+	pack16(conf->propagate_prio, buffer);
 	pack32(conf->debug_level, buffer);
 	pack32(conf->daemonize, buffer);
 	pack32((uint32_t)conf->slurm_user_id, buffer);
@@ -59,7 +62,10 @@ extern int unpack_slurmd_conf_lite_no_alloc(slurmd_conf_t *conf, Buf buffer)
 	safe_unpackstr_xmalloc(&conf->spooldir, &uint16_tmp, buffer);
 	safe_unpackstr_xmalloc(&conf->node_name, &uint16_tmp, buffer);
 	safe_unpackstr_xmalloc(&conf->logfile, &uint16_tmp, buffer);
+	safe_unpackstr_xmalloc(&conf->task_prolog, &uint16_tmp, buffer);
+	safe_unpackstr_xmalloc(&conf->task_epilog, &uint16_tmp, buffer);
 	safe_unpack16(&conf->job_acct_freq, buffer);
+	safe_unpack16(&conf->propagate_prio, buffer);
 	safe_unpack32(&uint32_tmp, buffer);
 	conf->debug_level = uint32_tmp;
 	safe_unpack32(&uint32_tmp, buffer);
@@ -71,5 +77,11 @@ extern int unpack_slurmd_conf_lite_no_alloc(slurmd_conf_t *conf, Buf buffer)
 
 unpack_error:
 	error("unpack_error in unpack_slurmd_conf_lite_no_alloc: %m");
+	xfree(conf->hostname);
+	xfree(conf->spooldir);
+	xfree(conf->node_name);
+	xfree(conf->logfile);
+	xfree(conf->task_prolog);
+	xfree(conf->task_epilog);
 	return SLURM_ERROR;
 }
diff --git a/src/slurmd/slurmd/slurmd.c b/src/slurmd/slurmd/slurmd.c
index 757e66252be..11d278b8e0c 100644
--- a/src/slurmd/slurmd/slurmd.c
+++ b/src/slurmd/slurmd/slurmd.c
@@ -564,6 +564,7 @@ _read_config()
 	_free_and_set(&conf->task_epilog, xstrdup(cf->task_epilog));
 	_free_and_set(&conf->pubkey,   path_pubkey);
 	
+	conf->propagate_prio = cf->propagate_prio_process;
 	conf->job_acct_freq = cf->job_acct_freq;
 
 	if ( (conf->node_name == NULL) ||
diff --git a/src/slurmd/slurmd/slurmd.h b/src/slurmd/slurmd/slurmd.h
index 8b565f9b8ca..8fb9b92f246 100644
--- a/src/slurmd/slurmd/slurmd.h
+++ b/src/slurmd/slurmd/slurmd.h
@@ -102,6 +102,8 @@ typedef struct slurmd_config {
 	pthread_mutex_t config_mutex;	/* lock for slurmd_config access   */
 	uint16_t        job_acct_freq;
 	uint16_t	use_pam;
+	uint16_t	propagate_prio;	/* PropagatePrioProcess flag */
+        
 } slurmd_conf_t;
 
 slurmd_conf_t * conf;
diff --git a/src/slurmd/slurmstepd/mgr.c b/src/slurmd/slurmstepd/mgr.c
index 84594d2d756..b1fbfe48ef4 100644
--- a/src/slurmd/slurmstepd/mgr.c
+++ b/src/slurmd/slurmstepd/mgr.c
@@ -636,6 +636,10 @@ job_manager(slurmd_job_t *job)
 
 	debug3("Entered job_manager for %u.%u pid=%lu",
 	       job->jobid, job->stepid, (unsigned long) job->jmgr_pid);
+	if (slurm_proctrack_init() != SLURM_SUCCESS) {
+		rc = SLURM_FAILURE;
+		goto fail1;
+	}
 	
 	if (!job->batch &&
 	    (interconnect_preinit(job->switch_job) < 0)) {
@@ -775,7 +779,6 @@ _fork_all_tasks(slurmd_job_t *job)
 	int *writefds; /* array of write file descriptors */
 	int *readfds; /* array of read file descriptors */
 	int fdpair[2];
-	uint16_t propagate_prio = slurm_get_propagate_prio_process();
 	struct priv_state sprivs;
 	jobacct_id_t jobacct_id;
 
@@ -874,7 +877,7 @@ _fork_all_tasks(slurmd_job_t *job)
 					close(readfds[j]);
 			}
 
-			if (propagate_prio == 1)
+			if (conf->propagate_prio == 1)
 				_set_prio_process(job);
 
  			if (_become_user(job, &sprivs) < 0) {
diff --git a/src/slurmd/slurmstepd/slurmstepd.c b/src/slurmd/slurmstepd/slurmstepd.c
index 243b16b4bd3..1deb6e6400b 100644
--- a/src/slurmd/slurmstepd/slurmstepd.c
+++ b/src/slurmd/slurmstepd/slurmstepd.c
@@ -89,11 +89,7 @@ main (int argc, char *argv[])
 	conf = xmalloc(sizeof(*conf));
 	conf->argv = &argv;
 	conf->argc = &argc;
-	conf->task_prolog = slurm_get_task_prolog();
-	conf->task_epilog = slurm_get_task_epilog();
 	init_setproctitle(argc, argv);
-	if (slurm_proctrack_init() != SLURM_SUCCESS)
-		return SLURM_FAILURE;
 
 	_init_from_slurmd(STDIN_FILENO, argv, &cli, &self, &msg,
 			  &ngids, &gids);
-- 
GitLab