Clear the delta base cache if a pack is rebuilt
authorShawn O. Pearce <spearce@spearce.org>
Wed, 11 Feb 2009 18:15:30 +0000 (10:15 -0800)
committerJunio C Hamano <gitster@pobox.com>
Wed, 11 Feb 2009 18:25:24 +0000 (10:25 -0800)
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>
sha1_file.c

index cbcae24d28f7000d2e55c4a2ef95026f07c5e5cc..bea958ec81ce1e1904b1b574348faae4eea4c3d0 100644 (file)
@@ -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);