diff options
author | Dave Brolley <brolley@redhat.com> | 2009-04-06 11:40:01 -0400 |
---|---|---|
committer | Dave Brolley <brolley@redhat.com> | 2009-04-06 11:40:01 -0400 |
commit | 25ca9e9568b33bb244cfb77d924bd0b0ccbab6a0 (patch) | |
tree | 6b6fbc681a5438788e19ed8879e150a72affbfc9 /runtime/staprun/relay_old.c | |
parent | faf38cd9bd782cf460b2b46f29a6922205b0eab1 (diff) | |
parent | a03c97419b5192fd594afb1f84e9ae4d0801e3a9 (diff) | |
download | systemtap-steved-25ca9e9568b33bb244cfb77d924bd0b0ccbab6a0.tar.gz systemtap-steved-25ca9e9568b33bb244cfb77d924bd0b0ccbab6a0.tar.xz systemtap-steved-25ca9e9568b33bb244cfb77d924bd0b0ccbab6a0.zip |
Merge branch 'master' of git://sources.redhat.com/git/systemtap
Diffstat (limited to 'runtime/staprun/relay_old.c')
-rw-r--r-- | runtime/staprun/relay_old.c | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/runtime/staprun/relay_old.c b/runtime/staprun/relay_old.c index 469a5831..33d2daf3 100644 --- a/runtime/staprun/relay_old.c +++ b/runtime/staprun/relay_old.c @@ -239,14 +239,15 @@ static int process_subbufs(struct _stp_buf_info *info, scb->rmfile = 1; if (open_oldoutfile(scb->fnum, cpu, scb->rmfile) < 0) { perr("Couldn't open file for cpu %d, exiting.", cpu); - exit(1); + return -1; } scb->wsize = len; } if (len) { if (fwrite_unlocked (subbuf_ptr, len, 1, percpu_tmpfile[cpu]) != 1) { - _perr("Couldn't write to output file for cpu %d, exiting:", cpu); - exit(1); + if (errno != EPIPE) + _perr("Couldn't write to output file for cpu %d, exiting:", cpu); + return -1; } } subbufs_consumed++; @@ -281,14 +282,17 @@ static void *reader_thread(void *data) if (rc < 0) { if (errno != EINTR) { _perr("poll error"); - exit(1); + break; } err("WARNING: poll warning: %s\n", strerror(errno)); rc = 0; } rc = read(proc_fd[cpu], &status[cpu].info, sizeof(struct _stp_buf_info)); - subbufs_consumed = process_subbufs(&status[cpu].info, &scb); + rc = process_subbufs(&status[cpu].info, &scb); + if (rc < 0) + break; + subbufs_consumed = rc; if (subbufs_consumed) { if (subbufs_consumed > status[cpu].max_backlog) status[cpu].max_backlog = subbufs_consumed; @@ -301,6 +305,10 @@ static void *reader_thread(void *data) if (status[cpu].info.flushing) pthread_exit(NULL); } while (1); + + /* Signal the main thread that we need to quit */ + kill(getpid(), SIGTERM); + pthread_exit(NULL); } /** |