diff options
author | Junio C Hamano <gitster@pobox.com> | 2010-06-13 11:21:21 -0700 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2010-06-13 11:21:21 -0700 |
commit | 44e08b003d37440fba6589c07a9573df9d28e6f5 (patch) | |
tree | f663e002f1183cf7330b5f34e16b44096ebeb72f | |
parent | 57af58e888165db623925f25e290f1b9472fd5c9 (diff) | |
parent | 3a0942598ce33b195bfaaf250b2da23e4eceb3c6 (diff) | |
download | git-44e08b003d37440fba6589c07a9573df9d28e6f5.tar.gz |
Merge branch 'js/try-to-free-stackable'
* js/try-to-free-stackable:
Do not call release_pack_memory in malloc wrappers when GIT_TRACE is used
Have set_try_to_free_routine return the previous routine
-rw-r--r-- | builtin/pack-objects.c | 6 | ||||
-rw-r--r-- | git-compat-util.h | 3 | ||||
-rw-r--r-- | trace.c | 6 | ||||
-rw-r--r-- | wrapper.c | 6 |
4 files changed, 16 insertions, 5 deletions
diff --git a/builtin/pack-objects.c b/builtin/pack-objects.c index 214d7ef2b1..0e81673118 100644 --- a/builtin/pack-objects.c +++ b/builtin/pack-objects.c @@ -1529,6 +1529,8 @@ static void try_to_free_from_threads(size_t size) read_unlock(); } +try_to_free_t old_try_to_free_routine; + /* * The main thread waits on the condition that (at least) one of the workers * has stopped working (which is indicated in the .working member of @@ -1563,12 +1565,12 @@ static void init_threaded_search(void) pthread_mutex_init(&cache_mutex, NULL); pthread_mutex_init(&progress_mutex, NULL); pthread_cond_init(&progress_cond, NULL); - 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); } static void cleanup_threaded_search(void) { - set_try_to_free_routine(NULL); + set_try_to_free_routine(old_try_to_free_routine); pthread_cond_destroy(&progress_cond); pthread_mutex_destroy(&read_mutex); pthread_mutex_destroy(&cache_mutex); diff --git a/git-compat-util.h b/git-compat-util.h index c0198dde4c..81ceb7f906 100644 --- a/git-compat-util.h +++ b/git-compat-util.h @@ -363,7 +363,8 @@ static inline void *gitmempcpy(void *dest, const void *src, size_t n) extern void release_pack_memory(size_t, int); -extern void set_try_to_free_routine(void (*routine)(size_t)); +typedef void (*try_to_free_t)(size_t); +extern try_to_free_t set_try_to_free_routine(try_to_free_t); extern char *xstrdup(const char *str); extern void *xmalloc(size_t size); @@ -25,6 +25,10 @@ #include "cache.h" #include "quote.h" +void do_nothing(size_t unused) +{ +} + /* Get a trace file descriptor from GIT_TRACE env variable. */ static int get_trace_fd(int *need_close) { @@ -72,6 +76,7 @@ void trace_printf(const char *fmt, ...) if (!fd) return; + set_try_to_free_routine(do_nothing); /* is never reset */ strbuf_init(&buf, 64); va_start(ap, fmt); len = vsnprintf(buf.buf, strbuf_avail(&buf), fmt, ap); @@ -103,6 +108,7 @@ void trace_argv_printf(const char **argv, const char *fmt, ...) if (!fd) return; + set_try_to_free_routine(do_nothing); /* is never reset */ strbuf_init(&buf, 64); va_start(ap, fmt); len = vsnprintf(buf.buf, strbuf_avail(&buf), fmt, ap); @@ -10,9 +10,11 @@ static void try_to_free_builtin(size_t size) static void (*try_to_free_routine)(size_t size) = try_to_free_builtin; -void set_try_to_free_routine(void (*routine)(size_t)) +try_to_free_t set_try_to_free_routine(try_to_free_t routine) { - try_to_free_routine = (routine) ? routine : try_to_free_builtin; + try_to_free_t old = try_to_free_routine; + try_to_free_routine = routine; + return old; } char *xstrdup(const char *str) |