[Pkg-voip-commits] [bctoolbox] 11/60: fix missing va_copy when outputing to several loggers

Bernhard Schmidt berni at moszumanska.debian.org
Sun Oct 15 22:42:23 UTC 2017


This is an automated email from the git hooks/post-receive script.

berni pushed a commit to branch debian/sid
in repository bctoolbox.

commit 5f78ebaf56a71cff159d374bc54472ad0465ae44
Author: Simon Morlat <simon.morlat at linphone.org>
Date:   Fri Mar 31 11:21:37 2017 +0200

    fix missing va_copy when outputing to several loggers
---
 include/bctoolbox/map.h |  4 ++--
 src/logging/logging.c   | 27 +++++++++++++++++++--------
 2 files changed, 21 insertions(+), 10 deletions(-)

diff --git a/include/bctoolbox/map.h b/include/bctoolbox/map.h
index af5b1e3..258070c 100644
--- a/include/bctoolbox/map.h
+++ b/include/bctoolbox/map.h
@@ -91,9 +91,9 @@ BCTBX_PUBLIC void bctbx_iterator_ullong_delete(bctbx_iterator_t *it);
 BCTBX_PUBLIC void bctbx_iterator_cchar_delete(bctbx_iterator_t *it);
 	
 /*pair*/	
-typedef struct _bctbx_pair_ullong_t bctbx_pair_ullong_t; /*inherite from bctbx_pair_t*/
+typedef struct _bctbx_pair_ullong_t bctbx_pair_ullong_t; /*inherit from bctbx_pair_t*/
 BCTBX_PUBLIC bctbx_pair_ullong_t * bctbx_pair_ullong_new(unsigned long long key,void *value);
-typedef struct _bctbx_pair_cchar_t bctbx_pair_cchar_t; /*inherite from bctbx_pair_t*/
+typedef struct _bctbx_pair_cchar_t bctbx_pair_cchar_t; /*inherit from bctbx_pair_t*/
 BCTBX_PUBLIC bctbx_pair_cchar_t * bctbx_pair_cchar_new(const char * key,void *value);
 
 #define bctbx_pair_get_second bctbx_pair_ullong_get_second
diff --git a/src/logging/logging.c b/src/logging/logging.c
index 791449f..c8a12d9 100644
--- a/src/logging/logging.c
+++ b/src/logging/logging.c
@@ -89,7 +89,7 @@ void bctbx_uninit_logger(void){
 		bctbx_logv_flush();
 		bctbx_mutex_destroy(&__bctbx_logger.domains_mutex);
 		bctbx_log_handlers_free();
-		bctbx_list_free(__bctbx_logger.logv_outs);
+		__bctbx_logger.logv_outs = bctbx_list_free(__bctbx_logger.logv_outs);
 		__bctbx_logger.log_domains = bctbx_list_free_with_data(__bctbx_logger.log_domains, (void (*)(void*))bctbx_log_domain_destroy);
 	}
 }
@@ -103,7 +103,7 @@ BctoolboxLogHandler* bctbx_create_log_handler(BctoolboxLogHandlerFunc func, Bcto
 }
 
 BctoolboxLogHandler* bctbx_create_file_log_handler(uint64_t max_size, const char* path, const char* name, FILE* f) {
-	BctoolboxLogHandler* handler = (BctoolboxLogHandler*)bctbx_malloc(sizeof(BctoolboxLogHandler));
+	BctoolboxLogHandler* handler = (BctoolboxLogHandler*)bctbx_malloc0(sizeof(BctoolboxLogHandler));
 	BctoolboxFileLogHandler* filehandler = (BctoolboxFileLogHandler*)bctbx_malloc(sizeof(BctoolboxFileLogHandler));
 	handler->func=bctbx_logv_file;
 	handler->destroy=bctbx_logv_file_destroy;
@@ -339,18 +339,23 @@ void _bctbx_logv_flush(int dummy, ...) {
 #ifdef _WIN32
 		while (loggers) {
 			BctoolboxLogHandler* handler = (BctoolboxLogHandler*)loggers->data;
-			handler->func(handler->user_info, l->domain, l->level, l->msg, empty_va_list);
+			va_list cap;
+			va_copy(cap, empty_va_list);
+			handler->func(handler->user_info, l->domain, l->level, l->msg, cap);
+			va_end(cap);
 			loggers = loggers->next;
 		}
 #else
-		va_list cap;
-		va_copy(cap, empty_va_list);
+		
 		while (loggers) {
 			BctoolboxLogHandler* handler = (BctoolboxLogHandler*)loggers->data;
+			va_list cap;
+			va_copy(cap, empty_va_list);
 			handler->func(handler->user_info, l->domain, l->level, l->msg, cap);
+			va_end(cap);
 			loggers = loggers->next;
 		}
-		va_end(cap);
+		
 #endif
 		if (l->domain) bctbx_free(l->domain);
 		bctbx_free(l->msg);
@@ -369,8 +374,11 @@ void bctbx_logv(const char *domain, BctbxLogLevel level, const char *fmt, va_lis
 		if (__bctbx_logger.log_thread_id == 0) {
 			bctbx_list_t *loggers = bctbx_list_first_elem(__bctbx_logger.logv_outs);
 			while (loggers) {
+				va_list tmp;
+				va_copy(tmp, args);
 				BctoolboxLogHandler* handler = (BctoolboxLogHandler*)loggers->data;
-				handler->func(handler->user_info, domain, level, fmt, args);
+				handler->func(handler->user_info, domain, level, fmt, tmp);
+				va_end(tmp);
 				loggers = loggers->next;
 			}
 		} else if (__bctbx_logger.log_thread_id == bctbx_thread_self()) {
@@ -379,7 +387,10 @@ void bctbx_logv(const char *domain, BctbxLogLevel level, const char *fmt, va_lis
 			loggers = bctbx_list_first_elem(__bctbx_logger.logv_outs);
 			while (loggers) {
 				BctoolboxLogHandler* handler = (BctoolboxLogHandler*)loggers->data;
-				handler->func(handler->user_info, domain, level, fmt, args);
+				va_list tmp;
+				va_copy(tmp, args);
+				handler->func(handler->user_info, domain, level, fmt, tmp);
+				va_end(tmp);
 				loggers = loggers->next;
 			}
 		} else {

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-voip/bctoolbox.git



More information about the Pkg-voip-commits mailing list