Please disregard this patch. We need to investigate glibc's behavior with initial-exec's TLS initialization further before doing those changes.
Thanks, Mathieu ----- On Oct 19, 2017, at 10:51 AM, Mathieu Desnoyers [email protected] wrote: > The initial-exec TLS model is async-signal-safe, whereas the > global-dynamic is not. This is especially important for the logging > facility, because the first time a thread touches the TLS could be > from a signal handler (correctness). > > Moreover, IE is faster than GD model. > > Also change the health state to the IE model, just in case we end up > putting health progress reporting statements in signal handlers in the > future. Given that we link against, but don't dlopen, that library, it > is not using any of the IE backup pool, so there is no good reason for > using the GD model. > > Link: https://docs.oracle.com/cd/E23824_01/html/819-0690/chapter8-20.html > Link: > https://gcc.gnu.org/onlinedocs/gcc/Common-Variable-Attributes.html#Common-Variable-Attributes > Signed-off-by: Mathieu Desnoyers <[email protected]> > --- > configure.ac | 7 ++++++- > src/common/error.c | 2 +- > src/common/health/health.c | 2 +- > 3 files changed, 8 insertions(+), 3 deletions(-) > > diff --git a/configure.ac b/configure.ac > index 016c56ec..77316a28 100644 > --- a/configure.ac > +++ b/configure.ac > @@ -440,7 +440,7 @@ AC_SUBST(UUID_LIBS) > AC_CHECK_FUNC([clock_gettime], [AC_DEFINE_UNQUOTED([LTTNG_HAVE_CLOCK_GETTIME], > 1, [Has clock_gettime() support.])]) > > # URCU library version needed or newer > -m4_define([WRONG_LIBURCU_MSG], [Userspace RCU (liburcu) >= 0.9.0 is needed]) > +m4_define([WRONG_LIBURCU_MSG], [Userspace RCU (liburcu) >= 0.11.0 is needed]) > > # Check liburcu needed function calls > AC_CHECK_DECL([cds_list_add], [], > @@ -470,6 +470,11 @@ AC_CHECK_DECL([urcu_ref_get_unless_zero], [], > [AC_MSG_ERROR([WRONG_LIBURCU_MSG])], [[#include <urcu/ref.h>]] > ) > > +#Macro added in urcu 0.11.0 > +AC_CHECK_DECL([DEFINE_URCU_TLS_IE], [], > + [AC_MSG_ERROR([WRONG_LIBURCU_MSG])], [[#include <urcu/tls-compat.h>]] > +) > + > # Check for libkmod, it will be auto-neabled if found but won't fail if it's > not, > # it can be explicitly disabled with --without-kmod > AH_TEMPLATE([HAVE_KMOD], [Define if you have kmod support]) > diff --git a/src/common/error.c b/src/common/error.c > index 2215886d..5c45fc70 100644 > --- a/src/common/error.c > +++ b/src/common/error.c > @@ -36,7 +36,7 @@ > static int lttng_opt_abort_on_error = -1; > > /* TLS variable that contains the time of one single log entry. */ > -DEFINE_URCU_TLS(struct log_time, error_log_time); > +DEFINE_URCU_TLS_IE(struct log_time, error_log_time); > > LTTNG_HIDDEN > const char *log_add_time(void) > diff --git a/src/common/health/health.c b/src/common/health/health.c > index 830b6f0e..b87c70b4 100644 > --- a/src/common/health/health.c > +++ b/src/common/health/health.c > @@ -54,7 +54,7 @@ struct health_app { > }; > > /* Define TLS health state. */ > -DEFINE_URCU_TLS(struct health_state, health_state); > +DEFINE_URCU_TLS_IE(struct health_state, health_state); > > /* > * Initialize health check subsytem. > -- > 2.11.0 -- Mathieu Desnoyers EfficiOS Inc. http://www.efficios.com _______________________________________________ lttng-dev mailing list [email protected] https://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev
