From d5a05c4b89d7f805df41c6d0a6e76580cbf222b3 Mon Sep 17 00:00:00 2001
From: Moe Jette <jette1@llnl.gov>
Date: Tue, 8 Jul 2003 21:55:31 +0000
Subject: [PATCH] slurmctld/agent.c kills a non-startable batch job and
 releases its allocation.

---
 src/slurmctld/agent.c | 17 ++++++++++++++++-
 1 file changed, 16 insertions(+), 1 deletion(-)

diff --git a/src/slurmctld/agent.c b/src/slurmctld/agent.c
index 3004e02685a..2f8bce72944 100644
--- a/src/slurmctld/agent.c
+++ b/src/slurmctld/agent.c
@@ -496,6 +496,9 @@ static void *_thread_per_node_rpc(void *args)
 	/* Locks: Write write node */
 	slurmctld_lock_t node_write_lock =
 	    { NO_LOCK, NO_LOCK, WRITE_LOCK, NO_LOCK };
+	/* Locks: Write job, write node */
+	slurmctld_lock_t job_write_lock = { 
+		NO_LOCK, WRITE_LOCK, WRITE_LOCK, NO_LOCK };
 #endif
 	xassert(args != NULL);
 
@@ -549,7 +552,19 @@ static void *_thread_per_node_rpc(void *args)
 			 * only do when last node registers */
 		}
 		unlock_slurmctld(node_write_lock);
-	} 
+	}
+
+	/* SPECIAL CASE: Kill non-startable batch job */
+	if ((msg_type == REQUEST_BATCH_JOB_LAUNCH) && rc) {
+		batch_job_launch_msg_t *launch_msg_ptr = task_ptr->msg_args_ptr;
+		uint32_t job_id = launch_msg_ptr->job_id;
+		info("Killing non-startable batch job %u: %s", job_id, slurm_strerror(rc));
+		thread_state = DSH_DONE;
+		lock_slurmctld(job_write_lock);
+		job_signal(job_id, SIGKILL, 0);
+		unlock_slurmctld(job_write_lock);
+		goto cleanup;
+	}
 #endif
 
 	switch (rc) {
-- 
GitLab