This series focus on re-enabling threads at git-grep for the non-worktree case. They are currently disabled due to being slower than single-threaded grep in this case. However, by allowing parallel zlib inflation when reading objects, speedups of up to 3x were observed. The patchset also contains some fixes for race conditions found in the worktree git-grep and thread optimizations to hopefully increase overall performance. This version was almost entirely re-written from scratch so I thought a range-diff wouldn't be very useful. The major differences from the first one are the race condition fixes and being able to run --textconv and --recurse-submodules threaded now. Matheus Tavares (11): grep: fix race conditions on userdiff calls grep: fix race conditions at grep_submodule() grep: fix racy calls in grep_objects() replace-object: make replace operations thread-safe object-store: allow threaded access to object reading grep: replace grep_read_mutex by internal obj read lock submodule-config: add skip_if_read option to repo_read_gitmodules() grep: allow submodule functions to run in parallel grep: protect packed_git [re-]initialization grep: re-enable threads in non-worktree case grep: move driver pre-load out of critical section .tsan-suppressions | 6 +++ Documentation/git-grep.txt | 11 +++++ builtin/grep.c | 90 +++++++++++++++++++------------------- grep.c | 32 ++++++++------ grep.h | 13 ------ object-store.h | 37 ++++++++++++++++ object.c | 2 + packfile.c | 9 ++++ replace-object.c | 11 ++++- replace-object.h | 7 ++- sha1-file.c | 57 +++++++++++++++++++++--- submodule-config.c | 18 +++----- submodule-config.h | 2 +- unpack-trees.c | 4 +- 14 files changed, 205 insertions(+), 94 deletions(-) -- 2.23.0