diff --git a/src/parser.cpp b/src/parser.cpp index 24544e41b..5417c0a07 100644 --- a/src/parser.cpp +++ b/src/parser.cpp @@ -571,7 +571,7 @@ void parser_t::job_promote(job_t *job) { assert(loc != job_list.end()); // Move the job to the beginning. - std::rotate(job_list.begin(), loc, job_list.end()); + std::rotate(job_list.begin(), loc, std::next(loc)); } job_t *parser_t::job_get(job_id_t id) { diff --git a/tests/checks/job_ids.fish b/tests/checks/job_ids.fish new file mode 100644 index 000000000..df4d8a16a --- /dev/null +++ b/tests/checks/job_ids.fish @@ -0,0 +1,37 @@ +# RUN: %fish %s + +# Ensure that job IDs are sequential. + +status job-control full + +set -g tokill + +function func100 + sleep 100 & + set -g tokill $tokill $last_pid +end + +function func200 + sleep 200 & + set -g tokill $tokill $last_pid +end + + +func100 +func200 + +sleep 300 & +set -g tokill $tokill $last_pid + +jobs + +#CHECK: Job Group CPU State Command +#CHECK: 3{{.*\t}}sleep 300 & +#CHECK: 2{{.*\t}}sleep 200 & +#CHECK: 1{{.*\t}}sleep 100 & + +status job-control interactive + +for pid in $tokill + command kill -9 $pid +end