Do not call release_pack_memory in malloc wrappers when GIT_TRACE is used
This avoids a potential race condition when async procedures are implemented as threads where release_pack_memory() can be called from different threads without locking under memory pressure. Signed-off-by: Johannes Sixt <j6t@kdbg.org> Signed-off-by: Junio C Hamano <gitster@pobox.com>maint
							parent
							
								
									851c34b04e
								
							
						
					
					
						commit
						3a0942598c
					
				
							
								
								
									
										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); | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	 Johannes Sixt
						Johannes Sixt