diff --git a/src/slurmctld/slurmctld.h b/src/slurmctld/slurmctld.h index 6f6dac0fb1c3780c692090711c18ca27fb031419..131be4a18c717982d5d24ec4481cabc3094e3a42 100644 --- a/src/slurmctld/slurmctld.h +++ b/src/slurmctld/slurmctld.h @@ -1928,6 +1928,12 @@ extern slurm_step_layout_t *step_layout_create(struct step_record *step_ptr, uint16_t task_dist, uint16_t plane_size); +/* + * step_list_purge - Simple purge of a job's step list records. + * IN job_ptr - pointer to job table entry to have step records removed + */ +extern void step_list_purge(struct job_record *job_ptr); + /* start_power_mgr - Start power management thread as needed. The thread * terminates automatically at slurmctld shutdown time. * IN thread_id - pointer to thread ID of the started pthread. diff --git a/src/slurmctld/step_mgr.c b/src/slurmctld/step_mgr.c index d8a5947f8e8a6095572d7006907e90a93e186d91..3527898782388b66d7a902f4c9c9413bfc953697 100644 --- a/src/slurmctld/step_mgr.c +++ b/src/slurmctld/step_mgr.c @@ -282,7 +282,28 @@ extern void delete_step_records (struct job_record *job_ptr) _free_step_rec(step_ptr); } list_iterator_destroy(step_iterator); +} + +/* + * step_list_purge - Simple purge of a job's step list records. + * IN job_ptr - pointer to job table entry to have step records removed + */ +extern void step_list_purge(struct job_record *job_ptr) +{ + ListIterator step_iterator; + struct step_record *step_ptr; + + xassert(job_ptr); + if (job_ptr->step_list == NULL) + return; + step_iterator = list_iterator_create(job_ptr->step_list); + while ((step_ptr = (struct step_record *) list_next (step_iterator))) { + list_remove (step_iterator); + _free_step_rec(step_ptr); + } + list_iterator_destroy(step_iterator); + list_destroy(job_ptr->step_list); } /* _free_step_rec - delete a step record's data structures */