• Johannes Schindelin's avatar
    pack-objects (mingw): initialize `packing_data` mutex in the correct spot · 34204c81
    Johannes Schindelin authored
    In 9ac3f0e5 (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's avatarJohannes Schindelin <johannes.schindelin@gmx.de>
    Signed-off-by: default avatarJunio C Hamano <gitster@pobox.com>
    34204c81
pack-objects.c 4.05 KB