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 routinemaint
						commit
						44e08b003d
					
				|  | @ -1529,6 +1529,8 @@ static void try_to_free_from_threads(size_t size) | ||||||
| 	read_unlock(); | 	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 |  * 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 |  * 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(&cache_mutex, NULL); | ||||||
| 	pthread_mutex_init(&progress_mutex, NULL); | 	pthread_mutex_init(&progress_mutex, NULL); | ||||||
| 	pthread_cond_init(&progress_cond, 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) | 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_cond_destroy(&progress_cond); | ||||||
| 	pthread_mutex_destroy(&read_mutex); | 	pthread_mutex_destroy(&read_mutex); | ||||||
| 	pthread_mutex_destroy(&cache_mutex); | 	pthread_mutex_destroy(&cache_mutex); | ||||||
|  |  | ||||||
|  | @ -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 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 char *xstrdup(const char *str); | ||||||
| extern void *xmalloc(size_t size); | extern void *xmalloc(size_t size); | ||||||
|  |  | ||||||
							
								
								
									
										6
									
								
								trace.c
								
								
								
								
							
							
						
						
									
										6
									
								
								trace.c
								
								
								
								
							|  | @ -25,6 +25,10 @@ | ||||||
| #include "cache.h" | #include "cache.h" | ||||||
| #include "quote.h" | #include "quote.h" | ||||||
|  |  | ||||||
|  | void do_nothing(size_t unused) | ||||||
|  | { | ||||||
|  | } | ||||||
|  |  | ||||||
| /* Get a trace file descriptor from GIT_TRACE env variable. */ | /* Get a trace file descriptor from GIT_TRACE env variable. */ | ||||||
| static int get_trace_fd(int *need_close) | static int get_trace_fd(int *need_close) | ||||||
| { | { | ||||||
|  | @ -72,6 +76,7 @@ void trace_printf(const char *fmt, ...) | ||||||
| 	if (!fd) | 	if (!fd) | ||||||
| 		return; | 		return; | ||||||
|  |  | ||||||
|  | 	set_try_to_free_routine(do_nothing);	/* is never reset */ | ||||||
| 	strbuf_init(&buf, 64); | 	strbuf_init(&buf, 64); | ||||||
| 	va_start(ap, fmt); | 	va_start(ap, fmt); | ||||||
| 	len = vsnprintf(buf.buf, strbuf_avail(&buf), fmt, ap); | 	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) | 	if (!fd) | ||||||
| 		return; | 		return; | ||||||
|  |  | ||||||
|  | 	set_try_to_free_routine(do_nothing);	/* is never reset */ | ||||||
| 	strbuf_init(&buf, 64); | 	strbuf_init(&buf, 64); | ||||||
| 	va_start(ap, fmt); | 	va_start(ap, fmt); | ||||||
| 	len = vsnprintf(buf.buf, strbuf_avail(&buf), fmt, ap); | 	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; | 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) | char *xstrdup(const char *str) | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	 Junio C Hamano
						Junio C Hamano