mirror of
https://github.com/git/git.git
synced 2024-11-28 12:34:08 +08:00
Merge branch 'js/pack-objects-mutex-init-fix' into maint
A mutex used in "git pack-objects" were not correctly initialized and this caused "git repack" to dump core on Windows. * js/pack-objects-mutex-init-fix: pack-objects (mingw): initialize `packing_data` mutex in the correct spot pack-objects (mingw): demonstrate a segmentation fault with large deltas pack-objects: fix typo 'detla' -> 'delta'
This commit is contained in:
commit
e3c18aa35b
@ -2299,7 +2299,6 @@ static void init_threaded_search(void)
|
||||
pthread_mutex_init(&cache_mutex, NULL);
|
||||
pthread_mutex_init(&progress_mutex, NULL);
|
||||
pthread_cond_init(&progress_cond, NULL);
|
||||
pthread_mutex_init(&to_pack.lock, NULL);
|
||||
old_try_to_free_routine = set_try_to_free_routine(try_to_free_from_threads);
|
||||
}
|
||||
|
||||
|
@ -148,6 +148,9 @@ void prepare_packing_data(struct packing_data *pdata)
|
||||
1U << OE_SIZE_BITS);
|
||||
pdata->oe_delta_size_limit = git_env_ulong("GIT_TEST_OE_DELTA_SIZE",
|
||||
1UL << OE_DELTA_SIZE_BITS);
|
||||
#ifndef NO_PTHREADS
|
||||
pthread_mutex_init(&pdata->lock, NULL);
|
||||
#endif
|
||||
}
|
||||
|
||||
struct object_entry *packlist_alloc(struct packing_data *pdata,
|
||||
|
@ -356,7 +356,7 @@ static inline unsigned long oe_delta_size(struct packing_data *pack,
|
||||
return e->delta_size_;
|
||||
|
||||
/*
|
||||
* pack->detla_size[] can't be NULL because oe_set_delta_size()
|
||||
* pack->delta_size[] can't be NULL because oe_set_delta_size()
|
||||
* must have been called when a new delta is saved with
|
||||
* oe_set_delta().
|
||||
* If oe_delta() returns NULL (i.e. default state, which means
|
||||
|
32
t/t5321-pack-large-objects.sh
Executable file
32
t/t5321-pack-large-objects.sh
Executable file
@ -0,0 +1,32 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# Copyright (c) 2018 Johannes Schindelin
|
||||
#
|
||||
|
||||
test_description='git pack-object with "large" deltas
|
||||
|
||||
'
|
||||
. ./test-lib.sh
|
||||
. "$TEST_DIRECTORY"/lib-pack.sh
|
||||
|
||||
# Two similar-ish objects that we have computed deltas between.
|
||||
A=01d7713666f4de822776c7622c10f1b07de280dc
|
||||
B=e68fe8129b546b101aee9510c5328e7f21ca1d18
|
||||
|
||||
test_expect_success 'setup' '
|
||||
clear_packs &&
|
||||
{
|
||||
pack_header 2 &&
|
||||
pack_obj $A $B &&
|
||||
pack_obj $B
|
||||
} >ab.pack &&
|
||||
pack_trailer ab.pack &&
|
||||
git index-pack --stdin <ab.pack
|
||||
'
|
||||
|
||||
test_expect_success 'repack large deltas' '
|
||||
printf "%s\\n" $A $B |
|
||||
GIT_TEST_OE_DELTA_SIZE=2 git pack-objects tmp-pack
|
||||
'
|
||||
|
||||
test_done
|
Loading…
Reference in New Issue
Block a user