summaryrefslogtreecommitdiff
path: root/read-cache.c
diff options
context:
space:
mode:
authorAlex Vandiver <alexmv@dropbox.com>2017-11-09 11:58:10 -0800
committerJunio C Hamano <gitster@pobox.com>2017-11-10 14:05:01 +0900
commit3bd28eb29912801481b293691039b05caebf13a3 (patch)
tree61498c30c6f2e4fcfd2bddc97c8bea893752d8e6 /read-cache.c
parent6f1dc21d983a495877c8054d41d9b634e234ccc4 (diff)
downloadgit-3bd28eb29912801481b293691039b05caebf13a3.tar.gz
fsmonitor: store fsmonitor bitmap before splitting index
ba1b9cac ("fsmonitor: delay updating state until after split index is merged", 2017-10-27) resolved the problem of the fsmonitor data being applied to the non-base index when reading; however, a similar problem exists when writing the index. Specifically, writing of the fsmonitor extension happens only after the work to split the index has been applied -- as such, the information in the index is only for the non-"base" index, and thus the extension information contains only partial data. When saving, compute the ewah bitmap before the index is split, and store it in the fsmonitor_dirty field, mirroring the behavior that occurred during reading. fsmonitor_dirty is kept from being leaked by being freed when the extension data is written -- which always happens precisely once, no matter the split index configuration. Signed-off-by: Alex Vandiver <alexmv@dropbox.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'read-cache.c')
-rw-r--r--read-cache.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/read-cache.c b/read-cache.c
index 05c0a33fdd..0724ea8c9b 100644
--- a/read-cache.c
+++ b/read-cache.c
@@ -2525,6 +2525,9 @@ int write_locked_index(struct index_state *istate, struct lock_file *lock,
int new_shared_index, ret;
struct split_index *si = istate->split_index;
+ if (istate->fsmonitor_last_update)
+ fill_fsmonitor_bitmap(istate);
+
if (!si || alternate_index_output ||
(istate->cache_changed & ~EXTMASK)) {
if (si)