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(&cache_mutex, NULL);
|
||||||
pthread_mutex_init(&progress_mutex, NULL);
|
pthread_mutex_init(&progress_mutex, NULL);
|
||||||
pthread_cond_init(&progress_cond, 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);
|
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);
|
1U << OE_SIZE_BITS);
|
||||||
pdata->oe_delta_size_limit = git_env_ulong("GIT_TEST_OE_DELTA_SIZE",
|
pdata->oe_delta_size_limit = git_env_ulong("GIT_TEST_OE_DELTA_SIZE",
|
||||||
1UL << OE_DELTA_SIZE_BITS);
|
1UL << OE_DELTA_SIZE_BITS);
|
||||||
|
#ifndef NO_PTHREADS
|
||||||
|
pthread_mutex_init(&pdata->lock, NULL);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
struct object_entry *packlist_alloc(struct packing_data *pdata,
|
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_;
|
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
|
* must have been called when a new delta is saved with
|
||||||
* oe_set_delta().
|
* oe_set_delta().
|
||||||
* If oe_delta() returns NULL (i.e. default state, which means
|
* 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