As v1.7.0-rc0~43 (slim down "git show-index", 2010-01-21) explains, xmalloc() is dependent on zlib, the sha1 lib, and the rest of git's object file access machinery via try_to_free_pack_memory. That is overkill when xmalloc() is only being used to print a message and exit on memory exhaustion. So let each caller decide whether the "discard pack windows" logic is needed. Programs using the sha1_file library should request that xmalloc discard stale windows when an allocation fails, by calling set_try_to_free_handler(try_to_free_pack_memory); A later patch will stop setting up that handler except in response to such explicit requests, allowing wrapper.o to be used without adding a sha1_file.o dependency by programs that do not access the object db. Signed-off-by: Jonathan Nieder <jrnieder@xxxxxxxxx> --- git-compat-util.h | 1 + sha1_file.c | 5 +++++ wrapper.c | 7 +------ 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/git-compat-util.h b/git-compat-util.h index 029162e..07ee75e 100644 --- a/git-compat-util.h +++ b/git-compat-util.h @@ -387,6 +387,7 @@ static inline void *gitmempcpy(void *dest, const void *src, size_t n) #endif extern void release_pack_memory(size_t, int); +extern void try_to_free_pack_memory(size_t size); typedef void (*try_to_free_t)(size_t); extern try_to_free_t set_try_to_free_routine(try_to_free_t); diff --git a/sha1_file.c b/sha1_file.c index 8e299ae..c48baaa 100644 --- a/sha1_file.c +++ b/sha1_file.c @@ -576,6 +576,11 @@ void release_pack_memory(size_t need, int fd) ; /* nothing */ } +void try_to_free_pack_memory(size_t size) +{ + release_pack_memory(size, -1); +} + void *xmmap(void *start, size_t length, int prot, int flags, int fd, off_t offset) { diff --git a/wrapper.c b/wrapper.c index 185dfbc..6c6579b 100644 --- a/wrapper.c +++ b/wrapper.c @@ -3,12 +3,7 @@ */ #include "cache.h" -static void try_to_free_builtin(size_t size) -{ - release_pack_memory(size, -1); -} - -static void (*try_to_free_routine)(size_t size) = try_to_free_builtin; +static void (*try_to_free_routine)(size_t size) = try_to_free_pack_memory; try_to_free_t set_try_to_free_routine(try_to_free_t routine) { -- 1.7.2.3.557.gab647.dirty -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html