diff --git a/src/slurmctld/job_mgr.c b/src/slurmctld/job_mgr.c index 9a05390b8a922828c4ab78e5f807907a281aea8a..c86eaa0c5494b34552d1e6ce0935217e322f2e03 100644 --- a/src/slurmctld/job_mgr.c +++ b/src/slurmctld/job_mgr.c @@ -7248,6 +7248,7 @@ extern int pack_one_job(char **buffer_ptr, int *buffer_size, uint32_t job_id, uint16_t show_flags, uid_t uid, uint16_t protocol_version) { + ListIterator job_iterator; struct job_record *job_ptr; uint32_t jobs_packed = 0, tmp_offset; Buf buffer; @@ -7271,18 +7272,22 @@ extern int pack_one_job(char **buffer_ptr, int *buffer_size, jobs_packed++; } } else { - /* Single job ID not found. Test for job array. */ - job_ptr = job_array_hash_j[JOB_HASH_INX(job_id)]; - while (job_ptr) { - if (job_ptr->array_job_id == job_id) { - if (_hide_job(job_ptr, uid)) - break; - pack_job(job_ptr, show_flags, buffer, - protocol_version, uid); - jobs_packed++; - } - job_ptr = job_ptr->job_array_next_j; + /* Single job ID not found. It could reference a job array. */ + job_iterator = list_iterator_create(job_list); + while ((job_ptr = (struct job_record *) + list_next(job_iterator))) { + if ((job_ptr->job_id != job_id) && + ((job_ptr->array_task_id == NO_VAL) || + (job_ptr->array_job_id != job_id))) + continue; + + if (_hide_job(job_ptr, uid)) + break; + pack_job(job_ptr, show_flags, buffer, protocol_version, + uid); + jobs_packed++; } + list_iterator_destroy(job_iterator); } if (jobs_packed == 0) {