summaryrefslogtreecommitdiff
path: root/dir.c
diff options
context:
space:
mode:
authorNguyễn Thái Ngọc Duy <pclouds@gmail.com>2015-03-08 10:12:37 (GMT)
committerJunio C Hamano <gitster@pobox.com>2015-03-12 20:45:17 (GMT)
commited4efab1b17e883b761b4482c40c04a4529be8f9 (patch)
treeb5f43046f55053b9d8e4396e0d88b60395f9b244 /dir.c
parent2bb4cda1987afe6911a1c193283213babda328d2 (diff)
downloadgit-ed4efab1b17e883b761b4482c40c04a4529be8f9.zip
git-ed4efab1b17e883b761b4482c40c04a4529be8f9.tar.gz
git-ed4efab1b17e883b761b4482c40c04a4529be8f9.tar.bz2
untracked cache: avoid racy timestamps
When a directory is updated within the same second that its timestamp is last saved, we cannot realize the directory has been updated by checking timestamps. Assume the worst (something is update). See 29e4d36 (Racy GIT - 2005-12-20) for more information. Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'dir.c')
-rw-r--r--dir.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/dir.c b/dir.c
index 68b46d0..741484a 100644
--- a/dir.c
+++ b/dir.c
@@ -682,7 +682,7 @@ static int add_excludes(const char *fname, const char *base, int baselen,
if (sha1_stat) {
int pos;
if (sha1_stat->valid &&
- !match_stat_data(&sha1_stat->stat, &st))
+ !match_stat_data_racy(&the_index, &sha1_stat->stat, &st))
; /* no content change, ss->sha1 still good */
else if (check_index &&
(pos = cache_name_pos(fname, strlen(fname))) >= 0 &&
@@ -1539,7 +1539,7 @@ static int valid_cached_dir(struct dir_struct *dir,
return 0;
}
if (!untracked->valid ||
- match_stat_data(&untracked->stat_data, &st)) {
+ match_stat_data_racy(&the_index, &untracked->stat_data, &st)) {
if (untracked->valid)
invalidate_directory(dir->untracked, untracked);
fill_stat_data(&untracked->stat_data, &st);