From b881e598d39fad44b7ecaae9b1ab3e41bd194e53 Mon Sep 17 00:00:00 2001 From: Morris Jette <jette@schedmd.com> Date: Fri, 8 Aug 2014 11:23:34 -0700 Subject: [PATCH] Fix MaxJobCount for job arrays This part handles the decrement portion of logic. --- src/slurmctld/job_mgr.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/slurmctld/job_mgr.c b/src/slurmctld/job_mgr.c index d42b25c2e92..686454ccdcb 100644 --- a/src/slurmctld/job_mgr.c +++ b/src/slurmctld/job_mgr.c @@ -3532,7 +3532,6 @@ static void _create_job_array(struct job_record *job_ptr, job_specs->array_bitmap = NULL; job_ptr->array_recs->task_cnt = bit_set_count(job_ptr->array_recs->task_id_bitmap); - } /* @@ -6832,7 +6831,7 @@ static void _list_delete_job(void *job_entry) { struct job_record *job_ptr = (struct job_record *) job_entry; struct job_record **job_pptr, *tmp_ptr; - int i; + int job_array_size, i; xassert(job_entry); xassert (job_ptr->magic == JOB_MAGIC); @@ -6850,6 +6849,12 @@ static void _list_delete_job(void *job_entry) else *job_pptr = job_ptr->job_next; + if (job_ptr->array_recs) { + job_array_size = MAX(1, job_ptr->array_recs->task_cnt); + } else { + job_array_size = 1; + } + /* Remove the record from job array hash tables, if applicable */ if (job_ptr->array_task_id != NO_VAL) { job_pptr = &job_array_hash_j[ @@ -6921,7 +6926,12 @@ static void _list_delete_job(void *job_entry) step_list_purge(job_ptr); select_g_select_jobinfo_free(job_ptr->select_jobinfo); xfree(job_ptr->wckey); - job_count--; + if (job_array_size > job_count) { + error("job_count underflow"); + job_count = 0; + } else { + job_count -= job_array_size; + } xfree(job_ptr); } -- GitLab