From dc5406bbbd6d3a76c367082dcee7941d7cfb0e43 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=2E=C3=87a=C4=9Flar=20Onur?= Date: Thu, 6 Mar 2014 23:27:05 -0500 Subject: [PATCH] put shared variables into thread-local storage MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This doesn't solve the general design problem of the log.c (eg; some log lines got lost or scattered into multiple files) but at least prevent multithreaded code from crashing. Before this change something like following; sudo src/tests/lxc-test-concurrent -i 10 -j 20 was crashing nearly all the time due to 3afbcc4600a as we started to set lxc.loglevel and lxc.logfile with that commit. Signed-off-by: S.Çağlar Onur Signed-off-by: Serge Hallyn --- src/lxc/log.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/lxc/log.c b/src/lxc/log.c index 2f880e2750..1dd1aa8001 100644 --- a/src/lxc/log.c +++ b/src/lxc/log.c @@ -41,6 +41,15 @@ #define LXC_LOG_BUFFER_SIZE 512 int lxc_log_fd = -1; +#ifdef HAVE_TLS +static __thread char log_prefix[LXC_LOG_PREFIX_SIZE] = "lxc"; +static __thread char *log_fname = NULL; +/* command line values for logfile or logpriority should always override + * values from the configuration file or defaults + */ +static __thread int lxc_logfile_specified = 0; +static __thread int lxc_loglevel_specified = 0; +#else static char log_prefix[LXC_LOG_PREFIX_SIZE] = "lxc"; static char *log_fname = NULL; /* command line values for logfile or logpriority should always override @@ -48,6 +57,7 @@ static char *log_fname = NULL; */ static int lxc_logfile_specified = 0; static int lxc_loglevel_specified = 0; +#endif lxc_log_define(lxc_log, lxc);