diff options
| author | kennytm <kennytm@gmail.com> | 2018-05-16 23:22:45 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2018-05-16 23:22:45 +0800 |
| commit | d623f45a4048b061e28a528a1db858bec60b9489 (patch) | |
| tree | 0e988cccbbbe0249bbf2d7e0af8c9854ed811712 /src/rustllvm/RustWrapper.cpp | |
| parent | 2a3f5367a23a769a068c37460db336de427c4b48 (diff) | |
| parent | 6d1da8232997af4b785486329f01995440818920 (diff) | |
| download | rust-d623f45a4048b061e28a528a1db858bec60b9489.tar.gz rust-d623f45a4048b061e28a528a1db858bec60b9489.zip | |
Rollup merge of #50638 - tbu-:pr_open_cloexec_once, r=nagisa
Don't unconditionally set CLOEXEC twice on every fd we open on Linux Previously, every `open64` was accompanied by a `ioctl(…, FIOCLEX)`, because some old Linux version would ignore the `O_CLOEXEC` flag we pass to the `open64` function. Now, we check whether the `CLOEXEC` flag is set on the first file we open – if it is, we won't do extra syscalls for every opened file. If it is not set, we fall back to the old behavior of unconditionally calling `ioctl(…, FIOCLEX)` on newly opened files. On old Linuxes, this amounts to one extra syscall per process, namely the `fcntl(…, F_GETFD)` call to check the `CLOEXEC` flag. On new Linuxes, this reduces the number of syscalls per opened file by one, except for the first file, where it does the same number of syscalls as before (`fcntl(…, F_GETFD)` to check the flag instead of `ioctl(…, FIOCLEX)` to set it).
Diffstat (limited to 'src/rustllvm/RustWrapper.cpp')
0 files changed, 0 insertions, 0 deletions
