Mark jobs as completed when all processes have finished, not just the last one.

Fixes https://github.com/fish-shell/fish-shell/issues/876 , and coincidentally also https://github.com/fish-shell/fish-shell/issues/848
This commit is contained in:
ridiculousfish 2013-06-16 02:53:14 -07:00
parent 70208eb33a
commit 5d75ee7721
2 changed files with 12 additions and 8 deletions

View File

@ -296,15 +296,19 @@ int job_is_stopped(const job_t *j)
\param j the job to test \param j the job to test
*/ */
int job_is_completed(const job_t *j) bool job_is_completed(const job_t *j)
{ {
process_t *p;
assert(j->first_process != NULL); assert(j->first_process != NULL);
for (p = j->first_process; p->next; p = p->next) bool result = true;
; for (process_t *p = j->first_process; p != NULL; p = p->next)
{
return p->completed; if (! p->completed)
{
result = false;
break;
}
}
return result;
} }
void job_set_flag(job_t *j, unsigned int flag, int set) void job_set_flag(job_t *j, unsigned int flag, int set)

2
proc.h
View File

@ -507,7 +507,7 @@ int job_is_stopped(const job_t *j);
/** /**
Tests if the job has completed, i.e. if the last process of the pipeline has ended. Tests if the job has completed, i.e. if the last process of the pipeline has ended.
*/ */
int job_is_completed(const job_t *j); bool job_is_completed(const job_t *j);
/** /**
Reassume a (possibly) stopped job. Put job j in the foreground. If Reassume a (possibly) stopped job. Put job j in the foreground. If