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(×licer_thread_id, &thread_attr_msg, - _timeslicer_thread, NULL)) - fatal("pthread_create %m"); - + while (pthread_create(×licer_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);