diff options
| author | Y. T. Chung <zonyitoo@gmail.com> | 2017-07-20 23:02:23 +0800 |
|---|---|---|
| committer | David Goldblatt <davidtgoldblatt@gmail.com> | 2017-07-20 14:13:33 -0700 |
| commit | 0975b88dfd3a890f469c8c282a5140013af85ab2 (patch) | |
| tree | 147ac0ea173848299cba7ed803961726f400263e /src/prof.c | |
| parent | fb6787a78c3a1e3a4868520d0531fc2ebdda21d8 (diff) | |
| download | platform_external_jemalloc_new-0975b88dfd3a890f469c8c282a5140013af85ab2.tar.gz platform_external_jemalloc_new-0975b88dfd3a890f469c8c282a5140013af85ab2.tar.bz2 platform_external_jemalloc_new-0975b88dfd3a890f469c8c282a5140013af85ab2.zip | |
Fall back to FD_CLOEXEC when O_CLOEXEC is unavailable.
Older Linux systems don't have O_CLOEXEC. If that's the case, we fcntl
immediately after open, to minimize the length of the racy period in
which an
operation in another thread can leak a file descriptor to a child.
Diffstat (limited to 'src/prof.c')
| -rw-r--r-- | src/prof.c | 6 |
1 files changed, 6 insertions, 0 deletions
@@ -1409,7 +1409,13 @@ prof_open_maps(const char *format, ...) { va_start(ap, format); malloc_vsnprintf(filename, sizeof(filename), format, ap); va_end(ap); + +#if defined(O_CLOEXEC) mfd = open(filename, O_RDONLY | O_CLOEXEC); +#else + mfd = open(filename, O_RDONLY); + fcntl(mfd, F_SETFD, fcntl(mfd, F_GETFD) | FD_CLOEXEC); +#endif return mfd; } |
