diff mbox

[lttng-ust,v4] Add -ust to the name of UST threads of the application

Message ID 2f60eb1746f5f9806494598e421e9e835bf28a63.1465163994.git.raphael.beamonte@gmail.com
State Accepted, archived
Headers show

Commit Message

Raphaël Beamonte June 5, 2016, 10 p.m. UTC
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(-)

Comments

Mathieu Desnoyers June 5, 2016, 10:46 p.m. UTC | #1
----- 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
Raphaël Beamonte June 5, 2016, 10:56 p.m. UTC | #2
On Jun 5, 2016 6:46 PM, "Mathieu Desnoyers" <mathieu.desnoyers at efficios.com>
wrote:
>
> ----- 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 ?

Mistake that comes from the first version of the patch (I was including
pthread there). I must have replicated the spacing of the FreeBSD elif when
updating the patch and didn't see that mistake!

>
> > #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.

Ok, thanks!
I'll remember that for next time!

Raphaël

>
> 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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.lttng.org/pipermail/lttng-dev/attachments/20160605/608b5b0e/attachment-0001.html>
Mathieu Desnoyers June 5, 2016, 11:04 p.m. UTC | #3
merged with small modifications, 

Thanks! 

Mathieu 

----- On Jun 5, 2016, at 6:56 PM, Raphaël Beamonte <raphael.beamonte at gmail.com> wrote: 

> On Jun 5, 2016 6:46 PM, "Mathieu Desnoyers" < mathieu.desnoyers at efficios.com >
> wrote:

>> ----- 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 ?

> Mistake that comes from the first version of the patch (I was including pthread
> there). I must have replicated the spacing of the FreeBSD elif when updating
> the patch and didn't see that mistake!


> > > #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.

> Ok, thanks!
> I'll remember that for next time!

> Raphaël


> > 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
diff mbox

Patch

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__
-
 #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.
+ */
+#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) {