diff --git a/src/slurmctld/job_scheduler.c b/src/slurmctld/job_scheduler.c index 7b04507ceaa369ebb233574dd08879df424acda3..fe27533f9256a8446dfc5ab77f7f538c73dc5d91 100644 --- a/src/slurmctld/job_scheduler.c +++ b/src/slurmctld/job_scheduler.c @@ -1002,6 +1002,7 @@ next_part: part_ptr = (struct part_record *) if (job_ptr->array_task_id != NO_VAL) { if ((reject_array_job_id == job_ptr->array_job_id) && (reject_array_part == job_ptr->part_ptr)) { + xfree(job_ptr->state_desc); job_ptr->state_reason = reject_state_reason; continue; /* already rejected array element */ } @@ -1025,6 +1026,10 @@ next_part: part_ptr = (struct part_record *) continue; debug2("sched: reached partition %s job limit", job_ptr->part_ptr->name); + if (job_ptr->state_reason == WAIT_NO_REASON) { + xfree(job_ptr->state_desc); + job_ptr->state_reason = WAIT_PRIORITY; + } skip_part_ptr = job_ptr->part_ptr; continue; } @@ -1065,8 +1070,8 @@ next_part: part_ptr = (struct part_record *) } } else if (_failed_partition(job_ptr->part_ptr, failed_parts, failed_part_cnt)) { - if ((job_ptr->state_reason == WAIT_NODE_NOT_AVAIL) - || (job_ptr->state_reason == WAIT_NO_REASON)) { + if ((job_ptr->state_reason == WAIT_NODE_NOT_AVAIL) || + (job_ptr->state_reason == WAIT_NO_REASON)) { job_ptr->state_reason = WAIT_PRIORITY; xfree(job_ptr->state_desc); last_job_update = now; @@ -1100,6 +1105,9 @@ next_part: part_ptr = (struct part_record *) } else { debug("sched: JobId=%u has invalid association", job_ptr->job_id); + xfree(job_ptr->state_desc); + job_ptr->state_reason = + WAIT_ASSOC_RESOURCE_LIMIT; continue; } }