Changes from V3:
Mainly changes from last round of feedback:
- Rename make_index_cache_entry -> make_cache_entry
- Rename make_empty_index_cache_entry -> make_empty-cache_entry
- Remove tail pointer in mem_pool
- Small code tweaks
- More accurately calculate mp_block size for platforms that do not
support flexible arrays
One thing that came up with my testing is that the current automated
tests do not fully cover the code path of "large" allocations from a
memory pool. I was able to force this condition by manually tweaking
some variables and then running the automated tests, but this is not
ideal for preventing regressions in the future.
One way I can think of testing this is to add a test-helper and
directly test the memory pool struct. This will allow me to control
the parameters and different conditions. I was hoping for some
guidance before I actually implemented these tests.
Either way, I would like to do the additional tests in a separate
patch series to have a more focused discussion. I am not sure if these
tests would prevent inclusion of this patch series - I am open to
guidance here.
Base Ref: master
Web-Diff: https://github.com/jamill/git/compare/242ba98e44...667b8de06c
Jameson Miller (8):
read-cache: teach refresh_cache_entry() to take istate
block alloc: add lifecycle APIs for cache_entry structs
mem-pool: only search head block for available space
mem-pool: tweak math on mp_block allocation size
mem-pool: add lifecycle management functions
mem-pool: fill out functionality
block alloc: allocate cache entries from mem_pool
block alloc: add validations around cache_entry lifecyle
apply.c | 24 +++--
blame.c | 5 +-
builtin/checkout.c | 8 +-
builtin/difftool.c | 6 +-
builtin/reset.c | 2 +-
builtin/update-index.c | 26 +++--
cache.h | 53 +++++++++-
git.c | 3 +
mem-pool.c | 124 +++++++++++++++++++----
mem-pool.h | 23 +++++
merge-recursive.c | 4 +-
read-cache.c | 259 ++++++++++++++++++++++++++++++++++++++++---------
resolve-undo.c | 4 +-
split-index.c | 58 ++++++++---
tree.c | 4 +-
unpack-trees.c | 40 ++++----
16 files changed, 504 insertions(+), 139 deletions(-)
base-commit: 242ba98e44d8314fb184d240939614a3c9b424db
--
2.14.3