diff options
author | Shawn O. Pearce <spearce@spearce.org> | 2009-02-11 10:15:30 -0800 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2009-02-11 10:25:24 -0800 |
commit | fa3a0c94dc88567b513e58835e5915f87da40af9 (patch) | |
tree | 2190019be95e90d1d708836e4834e2a96a2a3545 | |
parent | 3d20c636af05c44a6ff4df9309c2bca108ee149b (diff) | |
download | git-fa3a0c94dc88567b513e58835e5915f87da40af9.tar.gz git-fa3a0c94dc88567b513e58835e5915f87da40af9.tar.xz |
Clear the delta base cache if a pack is rebuilt
There is some risk that re-opening a regenerated pack file with
different offsets could leave stale entries within the delta base
cache that could be matched up against other objects using the same
"struct packed_git*" and pack offset.
Throwing away the entire delta base cache in this case is safer,
as we don't have to worry about a recycled "struct packed_git*"
matching to the wrong base object, resulting in delta apply
errors while unpacking an object.
Suggested-by: Daniel Barkalow <barkalow@iabervon.org>
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r-- | sha1_file.c | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/sha1_file.c b/sha1_file.c index cbcae24d2..bea958ec8 100644 --- a/sha1_file.c +++ b/sha1_file.c @@ -676,6 +676,7 @@ void free_pack_by_name(const char *pack_name) while (*pp) { p = *pp; if (strcmp(pack_name, p->pack_name) == 0) { + clear_delta_base_cache(); close_pack_windows(p); if (p->pack_fd != -1) close(p->pack_fd); |