]> sourceware.org Git - systemtap.git/commitdiff
Fix relay_old implementation of fsize_max and fnum_max.
authorMasami Hiramatsu <mhiramat@redhat.com>
Wed, 9 Sep 2009 16:53:25 +0000 (12:53 -0400)
committerMasami Hiramatsu <mhiramat@redhat.com>
Wed, 9 Sep 2009 16:53:25 +0000 (12:53 -0400)
With old relayfs, out_fd is used only when non-bulk mode. However,
open_oldoutfile and open_relayfs_files open files with fopen and
set only percpu_tmpfile. This will cause a problem with -S option,
that out_fd will be closed when the file size reaches fsize_max
and new fd will be opened only on percpu_tmpfile.

So, out_fd should be synchronized with percpu_tmpfile.

* runtime/staprun/relay_old.c (open_oldoutfile): Set fd of output file
  to out_fd[cpu].
  (open_relayfs_files): Ditto.

runtime/staprun/relay_old.c

index 71d8aceec1933e7431e39162aecf3f755ad26c03..0254173f7a584232a98666ad68b8a063a85287d5 100644 (file)
@@ -110,7 +110,8 @@ static int open_oldoutfile(int fnum, int cpu, int remove_file)
                perr("Couldn't open output file %s", buf);
                return -1;
        }
-       if (set_clexec(fileno(percpu_tmpfile[cpu])) < 0) {
+       out_fd[cpu] = fileno(percpu_tmpfile[cpu]);
+       if (set_clexec(out_fd[cpu]) < 0) {
                perr("Couldn't clear exec bit of open output file %s", buf);
                return -1;
        }
@@ -181,7 +182,8 @@ static int open_relayfs_files(int cpu, const char *relay_filebase, const char *p
                perr("Couldn't open output file %s", tmp);
                goto err2;
        }
-       if (set_clexec(fileno(percpu_tmpfile[cpu])) < 0) {
+       out_fd[cpu] = fileno(percpu_tmpfile[cpu]);
+       if (set_clexec(out_fd[cpu]) < 0) {
                perr("Couldn't open output file %s", tmp);
                goto err2;
        }
This page took 0.03078 seconds and 5 git commands to generate.