diff --git a/src/slurmctld/gang.c b/src/slurmctld/gang.c
index 974ee09e99826b708629b824f167b68cacad40b1..be4c4269cc2da5ff1a218c3ea564476c8eae7962 100644
--- a/src/slurmctld/gang.c
+++ b/src/slurmctld/gang.c
@@ -1156,6 +1156,7 @@ static void _scan_slurm_job_list(void)
 static void _spawn_timeslicer_thread(void)
 {
 	pthread_attr_t thread_attr_msg;
+	int retries = 0;
 
 	slurm_mutex_lock( &thread_flag_mutex );
 	if (thread_running) {
@@ -1166,10 +1167,13 @@ static void _spawn_timeslicer_thread(void)
 	}
 
 	slurm_attr_init(&thread_attr_msg);
-	if (pthread_create(&timeslicer_thread_id, &thread_attr_msg,
-			_timeslicer_thread, NULL))
-		fatal("pthread_create %m");
-
+	while (pthread_create(&timeslicer_thread_id, &thread_attr_msg,
+			      _timeslicer_thread, NULL)) {
+		error("pthread_create error %m");
+		if (++retries > 3)
+			fatal("Can't create pthread");
+		usleep(10000);	/* sleep and retry */
+	}
 	slurm_attr_destroy(&thread_attr_msg);
 	thread_running = true;
 	slurm_mutex_unlock(&thread_flag_mutex);