summaryrefslogtreecommitdiff
path: root/t/helper/test-sigchain.c
diff options
context:
space:
mode:
authorLibravatar Junio C Hamano <gitster@pobox.com>2016-10-28 06:23:07 -0700
committerLibravatar Junio C Hamano <gitster@pobox.com>2016-10-28 06:23:07 -0700
commit1b8ac5ead520146802debd52cb38e5c27b3483a2 (patch)
tree3b78d5e23b37dcf9f4e9290b8b364acbfe99d317 /t/helper/test-sigchain.c
parentread-cache: make sure file handles are not inherited by child processes (diff)
downloadtgif-1b8ac5ead520146802debd52cb38e5c27b3483a2.tar.xz
git_open(): untangle possible NOATIME and CLOEXEC interactions
The way we structured the fallback/retry mechanism for opening with O_NOATIME and O_CLOEXEC meant that if we failed due to lack of support to open the file with O_NOATIME option (i.e. EINVAL), we would still try to drop O_CLOEXEC first and retry, and then drop O_NOATIME. A platform on which O_NOATIME is defined in the header without support from the kernel wouldn't have a chance to open with O_CLOEXEC option due to this code structure. Arguably, O_CLOEXEC is more important than O_NOATIME, as the latter is mostly about performance, while the former can affect correctness. Instead use O_CLOEXEC to open the file, and then use fcntl(2) to set O_NOATIME on the resulting file descriptor. open(2) itself does not cause atime to be updated according to Linus [*1*]. The helper to do the former can be usable in the codepath in ce_compare_data() that was recently added to open a file descriptor with O_CLOEXEC; use it while we are at it. *1* <CA+55aFw83E+zOd+z5h-CA-3NhrLjVr-anL6pubrSWttYx3zu8g@mail.gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 't/helper/test-sigchain.c')
0 files changed, 0 insertions, 0 deletions