Messages in this thread | | | Date | Tue, 29 Apr 2014 14:11:03 +0200 | From | Peter Zijlstra <> | Subject | Re: [PATCH v3 2/3] perf record: Propagate exit status of a command line workload |
| |
On Thu, Apr 24, 2014 at 10:27:33PM +0900, Namhyung Kim wrote: > static void record__sig_exit(int exit_status __maybe_unused, void *arg) > { > - struct record *rec = arg; > - int status; > - > - if (rec->evlist->workload.pid > 0) { > - if (!child_finished) > - kill(rec->evlist->workload.pid, SIGTERM); > - > - wait(&status); > - if (WIFSIGNALED(status)) > - psignal(WTERMSIG(status), rec->progname); > - } > - > - if (signr == -1 || signr == SIGUSR1) > + if (signr == -1) > return; > > signal(signr, SIG_DFL); > }
> +out_child: > + if (forks) { > + int exit_status; > > - return 0; > + if (!child_finished) > + kill(rec->evlist->workload.pid, SIGTERM); > + > + wait(&exit_status); > + > + if (err < 0) > + status = err; > + else if (WIFEXITED(exit_status)) > + status = WEXITSTATUS(exit_status); > + else if (WIFSIGNALED(status)) { signr = WTERMSIG(status); > + psignal(WTERMSIG(status), rec->progname); } > + } else > + status = err; > + > + if (!err && !file->is_pipe) { > + rec->session->header.data_size += rec->bytes_written; > + > + if (!rec->no_buildid) > + process_buildids(rec); > + perf_session__write_header(rec->session, rec->evlist, > + file->fd, true); > + }
Should do I suppose; not sure why the psignal() muck is in there, but it don't hurt I suppose.
| |