提交 cd66ada0 编写于 作者: L Lars Schneider 提交者: Junio C Hamano

sha1_file: open window into packfiles with O_CLOEXEC

All processes that the Git main process spawns inherit the open file
descriptors of the main process. These leaked file descriptors can
cause problems.

Use the O_CLOEXEC flag similar to 05d1ed61 to fix the leaked file
descriptors.
Signed-off-by: NLars Schneider <larsxschneider@gmail.com>
Signed-off-by: NJunio C Hamano <gitster@pobox.com>
上级 a5436b57
......@@ -1561,7 +1561,7 @@ int check_sha1_signature(const unsigned char *sha1, void *map,
int git_open(const char *name)
{
static int sha1_file_open_flag = O_NOATIME;
static int sha1_file_open_flag = O_NOATIME | O_CLOEXEC;
for (;;) {
int fd;
......@@ -1571,12 +1571,17 @@ int git_open(const char *name)
if (fd >= 0)
return fd;
/* Might the failure be due to O_NOATIME? */
if (errno != ENOENT && sha1_file_open_flag) {
sha1_file_open_flag = 0;
/* Try again w/o O_CLOEXEC: the kernel might not support it */
if ((sha1_file_open_flag & O_CLOEXEC) && errno == EINVAL) {
sha1_file_open_flag &= ~O_CLOEXEC;
continue;
}
/* Might the failure be due to O_NOATIME? */
if (errno != ENOENT && (sha1_file_open_flag & O_NOATIME)) {
sha1_file_open_flag &= ~O_NOATIME;
continue;
}
return -1;
}
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册