version 1.37, 2012/10/09 19:50:44 |
version 1.38, 2012/10/18 17:54:43 |
|
|
job->exit_type = JOB_EXIT_OKAY; |
job->exit_type = JOB_EXIT_OKAY; |
job->location = NULL; |
job->location = NULL; |
job->flags = 0; |
job->flags = 0; |
job->sent_signal = 0; |
|
} |
} |
|
|
void |
void |
job_handle_status(Job *job, int status) |
job_handle_status(Job *job, int status) |
{ |
{ |
bool silent; |
bool silent; |
|
int dying; |
|
|
/* if there's one job running and we don't keep going, no need |
/* if there's one job running and we don't keep going, no need |
* to report right now. |
* to report right now. |
|
|
/* classify status */ |
/* classify status */ |
if (WIFEXITED(status)) { |
if (WIFEXITED(status)) { |
job->code = WEXITSTATUS(status);/* exited */ |
job->code = WEXITSTATUS(status);/* exited */ |
if (status != 0) { |
if (job->code != 0) { |
|
/* if we're already dying from that signal, be silent */ |
|
if (!silent && job->code > 128 |
|
&& job->code <= 128 + _NSIG) { |
|
dying = check_dying_signal(); |
|
silent = dying && job->code == dying + 128; |
|
} |
if (!silent) |
if (!silent) |
printf("*** Error %d", job->code); |
printf("*** Error %d", job->code); |
job->exit_type = JOB_EXIT_BAD; |
job->exit_type = JOB_EXIT_BAD; |
|
|
} else { |
} else { |
job->exit_type = JOB_SIGNALED; |
job->exit_type = JOB_SIGNALED; |
job->code = WTERMSIG(status); /* signaled */ |
job->code = WTERMSIG(status); /* signaled */ |
|
/* if we're already dying from that signal, be silent */ |
|
if (!silent) { |
|
dying = check_dying_signal(); |
|
silent = dying && job->code == dying; |
|
} |
if (!silent) |
if (!silent) |
printf("*** Signal %d", job->code); |
printf("*** Signal %d", job->code); |
} |
} |