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
*/
int job_is_completed(const job_t *j)
bool job_is_completed(const job_t *j)
{
process_t *p;
assert(j->first_process != NULL);
for (p = j->first_process; p->next; p = p->next)
;
return p->completed;
bool result = true;
for (process_t *p = j->first_process; p != NULL; p = p->next)
{
if (! p->completed)
{
result = false;
break;
}
}
return result;
}
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.
*/
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