perf tools: Open perf.data with O_CLOEXEC flag
authorJiri Olsa <jolsa@kernel.org>
Fri, 8 Sep 2017 08:46:20 +0000 (10:46 +0200)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Tue, 12 Sep 2017 15:34:23 +0000 (12:34 -0300)
Do not carry the perf.data file descriptor into the workload process and
close it when perf executes the workload.

Signed-off-by: Jiri Olsa <jolsa@kernel.org>
Cc: David Ahern <dsahern@gmail.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Link: http://lkml.kernel.org/r/20170908084621.31595-2-jolsa@kernel.org
[ Add definitions for O_CLOEXEC for older systems ]
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/perf/util/data.c

index e84bbc8ec058916c968ae940ae662746495efe67..263f5a906ba5a2bde3d0898a1e19d783920fca47 100644 (file)
 #include "util.h"
 #include "debug.h"
 
+#ifndef O_CLOEXEC
+#ifdef __sparc__
+#define O_CLOEXEC      0x400000
+#elif defined(__alpha__) || defined(__hppa__)
+#define O_CLOEXEC      010000000
+#else
+#define O_CLOEXEC      02000000
+#endif
+#endif
+
 static bool check_pipe(struct perf_data_file *file)
 {
        struct stat st;
@@ -96,7 +106,8 @@ static int open_file_write(struct perf_data_file *file)
        if (check_backup(file))
                return -1;
 
-       fd = open(file->path, O_CREAT|O_RDWR|O_TRUNC, S_IRUSR|S_IWUSR);
+       fd = open(file->path, O_CREAT|O_RDWR|O_TRUNC|O_CLOEXEC,
+                 S_IRUSR|S_IWUSR);
 
        if (fd < 0)
                pr_err("failed to open %s : %s\n", file->path,