In 9ac3f0e (pack-objects: fix performance issues on packing large deltas,
2018-07-22), a mutex was introduced that is used to guard the call to set
the delta size. This commit added code to initialize it, but at an incorrect
spot: in init_threaded_search(), while the call to oe_set_delta_size() (and
hence to packing_data_lock()) can happen in the call chain check_object() <-
get_object_details() <-prepare_pack() <- cmd_pack_objects(), which is long
before theprepare_pack() function calls ll_find_deltas() (which initializes
the threaded search).
Another tell-tale that the mutex was initialized in an incorrect spot is
that the function to initialize it lives in builtin/, while the code that
uses the mutex is defined in a libgit.a header file.
Let's use a more appropriate function: prepare_packing_data(), which not
only lives in libgit.a, but has to be called before thepacking_data struct
is used that contains that mutex.
Johannes Schindelin (3):
Fix typo 'detla' -> 'delta'
pack-objects (mingw): demonstrate a segmentation fault with large
deltas
pack-objects (mingw): initialize `packing_data` mutex in the correct
spot
builtin/pack-objects.c | 1 -
pack-objects.c | 3 +++
pack-objects.h | 2 +-
t/t5321-pack-large-objects.sh | 32 ++++++++++++++++++++++++++++++++
4 files changed, 36 insertions(+), 2 deletions(-)
create mode 100755 t/t5321-pack-large-objects.sh
base-commit: 5a0cc8aca797dbd7d2be3b67458ff880ed45cddf
Published-As:
https://github.com/gitgitgadget/git/releases/tags/pr-47%2Fjamill%2Ffix-gc-segfault-v1
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git
pr-47/jamill/fix-gc-segfault-v1
Pull-Request: https://github.com/gitgitgadget/git/pull/47
--
gitgitgadget