From 3e321fdbe1a4ff6de9c57a9a91ff2ee99e06a714 Mon Sep 17 00:00:00 2001
From: Tim Wickberg <tim@schedmd.com>
Date: Sun, 15 Oct 2017 12:51:02 -0600
Subject: [PATCH] Change function signature of _spawn_prolog_stepd

Return an error if something doesn't work out.
---
 src/slurmd/slurmd/req.c | 21 ++++++++++++++++-----
 1 file changed, 16 insertions(+), 5 deletions(-)

diff --git a/src/slurmd/slurmd/req.c b/src/slurmd/slurmd/req.c
index cec690ce22b..8dad4dab89b 100644
--- a/src/slurmd/slurmd/req.c
+++ b/src/slurmd/slurmd/req.c
@@ -1928,12 +1928,13 @@ static void _make_prolog_mem_container(slurm_msg_t *msg)
 	}
 }
 
-static void _spawn_prolog_stepd(slurm_msg_t *msg)
+static int _spawn_prolog_stepd(slurm_msg_t *msg)
 {
 	prolog_launch_msg_t *req = (prolog_launch_msg_t *)msg->data;
 	launch_tasks_request_msg_t *launch_req;
 	slurm_addr_t self;
 	slurm_addr_t *cli = &msg->orig_addr;
+	int rc = SLURM_SUCCESS;
 	int i;
 
 	launch_req = xmalloc(sizeof(launch_tasks_request_msg_t));
@@ -1982,17 +1983,25 @@ static void _spawn_prolog_stepd(slurm_msg_t *msg)
 	 */
 	if (slurm_get_stream_addr(msg->conn_fd, &self)) {
 		error("%s: slurm_get_stream_addr(): %m", __func__);
+		rc = SLURM_ERROR;
 	} else if (slurm_cred_revoked(conf->vctx, req->cred)) {
 		info("Job %u already killed, do not launch extern step",
 		     req->job_id);
+		/*
+		 * Don't set the rc to SLURM_ERROR at this point.
+		 * The job's already been killed, and returning a prolog
+		 * failure will just add more confusion. Better to just
+		 * silently terminate.
+		 */
 	} else {
 		hostset_t step_hset = hostset_create(req->nodes);
 
 		debug3("%s: call to _forkexec_slurmstepd", __func__);
-		(void) _forkexec_slurmstepd(
-			LAUNCH_TASKS, (void *)launch_req, cli,
-			&self, step_hset, msg->protocol_version);
-		debug3("%s: return from _forkexec_slurmstepd", __func__);
+		rc =  _forkexec_slurmstepd(LAUNCH_TASKS, (void *)launch_req,
+					   cli, &self, step_hset,
+					   msg->protocol_version);
+		debug3("%s: return from _forkexec_slurmstepd %d",
+		       __func__, rc);
 		if (step_hset)
 			hostset_destroy(step_hset);
 	}
@@ -2002,6 +2011,8 @@ static void _spawn_prolog_stepd(slurm_msg_t *msg)
 	xfree(launch_req->global_task_ids);
 	xfree(launch_req->tasks_to_launch);
 	xfree(launch_req);
+
+	return rc;
 }
 
 static void _rpc_prolog(slurm_msg_t *msg)
-- 
GitLab