]> git.ipfire.org Git - thirdparty/git.git/commit - pack-bitmap.c
pack-bitmap: remove bitmap_git global variable
authorJonathan Tan <jonathantanmy@google.com>
Thu, 7 Jun 2018 19:04:13 +0000 (12:04 -0700)
committerJunio C Hamano <gitster@pobox.com>
Thu, 21 Jun 2018 18:17:39 +0000 (11:17 -0700)
commit3ae5fa0768f7f9781b40b1d40cb2f9f4c753bad4
tree3dbff4abb2a2a97d3b18307599e91d72969818ea
parent53f9a3e157dbbc901a02ac2c73346d375e24978c
pack-bitmap: remove bitmap_git global variable

Remove the bitmap_git global variable. Instead, generate on demand an
instance of struct bitmap_index for code that needs to access it.

This allows us significant control over the lifetime of instances of
struct bitmap_index. In particular, packs can now be closed without
worrying if an unnecessarily long-lived "pack" field in struct
bitmap_index still points to it.

The bitmap API is also clearer in that we need to first obtain a struct
bitmap_index, then we use it.

This patch raises two potential issues: (1) memory for the struct
bitmap_index is allocated without being freed, and (2)
prepare_bitmap_git() and prepare_bitmap_walk() can reuse a previously
loaded bitmap. For (1), this will be dealt with in a subsequent patch in
this patch set that also deals with freeing the contents of the struct
bitmap_index (which were not freed previously, because they have global
scope). For (2), current bitmap users only load the bitmap once at most
(note that pack-objects can use bitmaps or write bitmaps, but not both
at the same time), so support for reuse has no effect - and future users
can pass around the struct bitmap_index * obtained if they need to do 2
or more things with the same bitmap.

Helped-by: Stefan Beller <sbeller@google.com>
Signed-off-by: Jonathan Tan <jonathantanmy@google.com>
Helped-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/pack-objects.c
builtin/rev-list.c
pack-bitmap-write.c
pack-bitmap.c
pack-bitmap.h