diff options
author | Johannes Schindelin <johannes.schindelin@gmx.de> | 2018-10-16 14:02:52 -0700 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2018-10-19 14:28:44 +0900 |
commit | 34204c81668324480e1f34a09cce9c21fabf4b40 (patch) | |
tree | 425bb0225afcf92e77112573719105b7c70fc59e /t | |
parent | pack-objects (mingw): demonstrate a segmentation fault with large deltas (diff) | |
download | tgif-34204c81668324480e1f34a09cce9c21fabf4b40.tar.xz |
pack-objects (mingw): initialize `packing_data` mutex in the correct spot
In 9ac3f0e5b3e4 (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 even 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 the
`prepare_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 the
`packing_data` struct is used that contains that mutex.
This fixes https://github.com/git-for-windows/git/issues/1839.
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 't')
-rwxr-xr-x | t/t5321-pack-large-objects.sh | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/t/t5321-pack-large-objects.sh b/t/t5321-pack-large-objects.sh index c36c66fbb4..a75eab87d3 100755 --- a/t/t5321-pack-large-objects.sh +++ b/t/t5321-pack-large-objects.sh @@ -24,7 +24,7 @@ test_expect_success 'setup' ' git index-pack --stdin <ab.pack ' -test_expect_failure 'repack large deltas' ' +test_expect_success 'repack large deltas' ' printf "%s\\n" $A $B | GIT_TEST_OE_DELTA_SIZE=2 git pack-objects tmp-pack ' |