diff --git a/src/slurmctld/proc_req.c b/src/slurmctld/proc_req.c
index f9e4a6430c81ace1b5ba2498d8a9a59a7bc1f551..a42326e434cfb7c5990cf12e7cd8cb5bd4f01753 100644
--- a/src/slurmctld/proc_req.c
+++ b/src/slurmctld/proc_req.c
@@ -1681,9 +1681,15 @@ static void _slurm_rpc_submit_batch_job(slurm_msg_t * msg)
 		      (unsigned int) uid);
 	}
 	if (error_code == SLURM_SUCCESS) {
-		if ((job_desc_msg->job_id != SLURM_BATCH_SCRIPT)
-		&&  (find_job_record(job_desc_msg->job_id) != NULL)) {
-
+		lock_slurmctld(job_write_lock);
+		if (job_desc_msg->job_id != SLURM_BATCH_SCRIPT) {
+			job_ptr = find_job_record(job_desc_msg->job_id);
+			if (job_ptr && IS_JOB_FINISHED(job_ptr))
+				job_ptr = NULL;
+		} else
+			job_ptr = NULL;
+
+		if (job_ptr) {	/* Active job allocation */
 #ifdef HAVE_FRONT_END	/* Limited job step support */
 			/* Non-super users not permitted to run job steps on front-end.
 	 		 * A single slurmd can not handle a heavy load. */
@@ -1691,10 +1697,10 @@ static void _slurm_rpc_submit_batch_job(slurm_msg_t * msg)
 				info("Attempt to execute batch job step by uid=%u",
 					(unsigned int) uid);
 				slurm_send_rc_msg(msg, ESLURM_BATCH_ONLY);
+				unlock_slurmctld(job_write_lock);
 				return;
 			}
 #endif
-			lock_slurmctld(job_write_lock);
 			error_code = _launch_batch_step(job_desc_msg, uid,
 							&step_id);
 			unlock_slurmctld(job_write_lock);
@@ -1722,7 +1728,7 @@ static void _slurm_rpc_submit_batch_job(slurm_msg_t * msg)
 			return;
 		}
 
-		lock_slurmctld(job_write_lock);
+		/* Create new job allocation */
 		error_code = job_allocate(job_desc_msg, 
 				job_desc_msg->immediate, false,
 				false, uid, &job_ptr);