From 00a1df38119b0bcf0bc3e899f9974cb90a8ed061 Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Wed, 3 Nov 2021 12:23:25 -0700 Subject: [PATCH] Bravely do not report completed jobs as stopped Prior to this change, job_t::is_stopped() returned true if there were zero running processes in the job. This meant that completed jobs were reported as stopped. Stop doing this, it's a footgun. --- src/proc.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/proc.cpp b/src/proc.cpp index e2674d946..0e12c7592 100644 --- a/src/proc.cpp +++ b/src/proc.cpp @@ -96,17 +96,20 @@ void set_job_control_mode(job_control_t mode) { void proc_init() { signal_set_handlers_once(false); } -/// Return true if all processes in the job have stopped or completed. +/// Return true if all processes in the job are stopped or completed, and there is at least one +/// stopped process. bool job_t::is_stopped() const { + bool has_stopped = false; for (const process_ptr_t &p : processes) { if (!p->completed && !p->stopped) { return false; } + has_stopped |= p->stopped; } - return true; + return has_stopped; } -/// Return true if the last processes in the job has completed. +/// Return true if all processes in the job have completed. bool job_t::is_completed() const { assert(!processes.empty()); for (const process_ptr_t &p : processes) {