[lttng-dev] [lttng-ust PATCH v4] Add -ust to the name of UST threads of the application
Mathieu Desnoyers
mathieu.desnoyers at efficios.com
Sun Jun 5 22:46:24 UTC 2016
----- On Jun 5, 2016, at 6:00 PM, Raphaël Beamonte raphael.beamonte at gmail.com wrote:
> Add the required functions to change the thread name of the UST
> threads and add the -ust string at its end. This will help to
> identify LTTng-UST processes when analyzing the trace of a process.
>
> Signed-off-by: Raphaël Beamonte <raphael.beamonte at gmail.com>
> ---
> configure.ac | 5 ++++
> liblttng-ust/Makefile.am | 1 +
> liblttng-ust/compat.h | 67 ++++++++++++++++++++++++++++++++++++++++++-
> liblttng-ust/lttng-ust-comm.c | 9 ++++++
> 4 files changed, 81 insertions(+), 1 deletion(-)
>
> diff --git a/configure.ac b/configure.ac
> index 5692553..de462ff 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -135,6 +135,11 @@ AM_CONDITIONAL([LTTNG_UST_BUILD_WITH_LIBDL], [test
> "x$have_libdl" = "xyes"])
> AM_CONDITIONAL([LTTNG_UST_BUILD_WITH_LIBC_DL], [test "x$have_libc_dl" = "xyes"])
>
> AC_CHECK_LIB([pthread], [pthread_create])
> +AC_CHECK_LIB([pthread], [pthread_setname_np],
> + AC_DEFINE([HAVE_PTHREAD_SETNAME_NP], [1], [Define to 1 if pthread_setname_np
> is available.]),
> + AC_CHECK_LIB([pthread], [pthread_set_name_np],
> + AC_DEFINE([HAVE_PTHREAD_SET_NAME_NP], [1], [Define to 1 if
> pthread_set_name_np is available.]),
> + AC_MSG_RESULT([pthread setname/set_name not found.])))
>
> # Check for dlfcn.h
> AC_CHECK_HEADER([dlfcn.h])
> diff --git a/liblttng-ust/Makefile.am b/liblttng-ust/Makefile.am
> index f1801cf..05929be 100644
> --- a/liblttng-ust/Makefile.am
> +++ b/liblttng-ust/Makefile.am
> @@ -14,6 +14,7 @@ liblttng_ust_tracepoint_la_SOURCES = \
> error.h
> liblttng_ust_tracepoint_la_LIBADD = \
> -lurcu-bp \
> + -lpthread \
> $(top_builddir)/snprintf/libustsnprintf.la
> liblttng_ust_tracepoint_la_LDFLAGS = -no-undefined -version-info
> $(LTTNG_UST_LIBRARY_VERSION)
> liblttng_ust_tracepoint_la_CFLAGS = -DUST_COMPONENT="liblttng_ust_tracepoint"
> -fno-strict-aliasing
> diff --git a/liblttng-ust/compat.h b/liblttng-ust/compat.h
> index 43b2223..fff668b 100644
> --- a/liblttng-ust/compat.h
> +++ b/liblttng-ust/compat.h
> @@ -3,6 +3,7 @@
>
> /*
> * Copyright (C) 2011 Mathieu Desnoyers <mathieu.desnoyers at efficios.com>
> + * Copyright (C) 2016 Raphaël Beamonte <raphael.beamonte at gmail.com>
> *
> * This library is free software; you can redistribute it and/or
> * modify it under the terms of the GNU Lesser General Public
> @@ -23,7 +24,6 @@
> * lttng_ust_getprocname.
> */
> #ifdef __linux__
> -
Why remove this newline ?
> #include <sys/prctl.h>
>
> #define LTTNG_UST_PROCNAME_LEN 17
> @@ -34,6 +34,17 @@ void lttng_ust_getprocname(char *name)
> (void) prctl(PR_GET_NAME, (unsigned long) name, 0, 0, 0);
> }
>
> +/*
> + * if pthread_setname_np is available.
Comments should be complete sentences, starting with a capital letter,
ending with a dot.
I'll fix those on my end.
Thanks,
Mathieu
> + */
> +#ifdef HAVE_PTHREAD_SETNAME_NP
> +static inline
> +int lttng_pthread_setname_np(pthread_t thread, const char *name)
> +{
> + return pthread_setname_np(thread, name);
> +}
> +#endif
> +
> #elif defined(__FreeBSD__)
> #include <stdlib.h>
> #include <string.h>
> @@ -59,6 +70,60 @@ void lttng_ust_getprocname(char *name)
> strncpy(name, bsd_name, LTTNG_UST_PROCNAME_LEN - 1);
> }
>
> +/*
> + * if pthread_set_name_np is available.
> + */
> +#ifdef HAVE_PTHREAD_SET_NAME_NP
> +static inline
> +int lttng_pthread_setname_np(pthread_t thread, const char *name)
> +{
> + return pthread_set_name_np(thread, name);
> +}
> +#endif
> +
> +#endif
> +
> +/*
> + * If a pthread setname/set_name function is available, declare
> + * the setustprocname() function that will add '-ust' to the end
> + * of the current process name, while truncating it if needed.
> + */
> +#if defined(HAVE_PTHREAD_SETNAME_NP) || defined(HAVE_PTHREAD_SETNAME_NP)
> +#define LTTNG_UST_PROCNAME_SUFFIX "-ust"
> +
> +#include <pthread.h>
> +
> +static inline
> +int lttng_ust_setustprocname(void)
> +{
> + int ret = 0;
> + char name[LTTNG_UST_PROCNAME_LEN];
> + int limit = LTTNG_UST_PROCNAME_LEN - strlen(LTTNG_UST_PROCNAME_SUFFIX);
> + int len;
> +
> + lttng_ust_getprocname(name);
> +
> + len = strlen(name);
> + if (len > limit) {
> + len = limit;
> + }
> +
> + ret = sprintf(name + len, LTTNG_UST_PROCNAME_SUFFIX);
> + if (ret) {
> + goto error;
> + }
> +
> + ret = lttng_pthread_setname_np(pthread_self(), name);
> +
> +error:
> + return ret;
> +}
> +#else
> +static inline
> +int lttng_ust_setustprocname(void)
> +{
> + return 0;
> +}
> #endif
>
> #include <errno.h>
> diff --git a/liblttng-ust/lttng-ust-comm.c b/liblttng-ust/lttng-ust-comm.c
> index e00a22c..6105403 100644
> --- a/liblttng-ust/lttng-ust-comm.c
> +++ b/liblttng-ust/lttng-ust-comm.c
> @@ -1295,6 +1295,15 @@ void *ust_listener_thread(void *arg)
> int sock, ret, prev_connect_failed = 0, has_waited = 0;
> long timeout;
>
> + /*
> + * If available, add '-ust' to the end of this thread's
> + * process name
> + */
> + ret = lttng_ust_setustprocname();
> + if (ret) {
> + ERR("Unable to set UST process name");
> + }
> +
> /* Restart trying to connect to the session daemon */
> restart:
> if (prev_connect_failed) {
> --
> 2.8.1
--
Mathieu Desnoyers
EfficiOS Inc.
http://www.efficios.com
More information about the lttng-dev
mailing list