From f489b6f922627a3b15adfa12cdd91114ce679452 Mon Sep 17 00:00:00 2001 From: Ting-Wei Lan Date: Fri, 30 Aug 2019 01:24:08 +0800 Subject: [PATCH] gthread: Set thread name on *BSD Add support for setting thread name on FreeBSD, DragonFlyBSD, OpenBSD, and NetBSD. Fixes https://gitlab.gnome.org/GNOME/glib/issues/1761 --- glib/gthread-posix.c | 13 ++++++++++--- meson.build | 19 +++++++++++++++++++ 2 files changed, 29 insertions(+), 3 deletions(-) diff --git a/glib/gthread-posix.c b/glib/gthread-posix.c index c76f4433f..5a30b6d80 100644 --- a/glib/gthread-posix.c +++ b/glib/gthread-posix.c @@ -57,6 +57,9 @@ #include #include +#ifdef HAVE_PTHREAD_SET_NAME_NP +#include +#endif #ifdef HAVE_SCHED_H #include #endif @@ -1245,10 +1248,14 @@ g_system_thread_exit (void) void g_system_thread_set_name (const gchar *name) { -#if defined(HAVE_PTHREAD_SETNAME_NP_WITH_TID) - pthread_setname_np (pthread_self(), name); /* on Linux and Solaris */ -#elif defined(HAVE_PTHREAD_SETNAME_NP_WITHOUT_TID) +#if defined(HAVE_PTHREAD_SETNAME_NP_WITHOUT_TID) pthread_setname_np (name); /* on OS X and iOS */ +#elif defined(HAVE_PTHREAD_SETNAME_NP_WITH_TID) + pthread_setname_np (pthread_self (), name); /* on Linux and Solaris */ +#elif defined(HAVE_PTHREAD_SETNAME_NP_WITH_TID_AND_ARG) + pthread_setname_np (pthread_self (), "%s", (gchar *) name); /* on NetBSD */ +#elif defined(HAVE_PTHREAD_SET_NAME_NP) + pthread_set_name_np (pthread_self (), name); /* on FreeBSD, DragonFlyBSD, OpenBSD */ #endif } diff --git a/meson.build b/meson.build index d9e0a56ad..53966d176 100644 --- a/meson.build +++ b/meson.build @@ -1669,6 +1669,25 @@ else dependencies : thread_dep) # Linux, Solaris, etc. glib_conf.set('HAVE_PTHREAD_SETNAME_NP_WITH_TID', 1) + elif cc.links(pthread_prefix + ''' + int main() { + pthread_setname_np(pthread_self(), "%s", "example"); + return 0; + }''', + name : 'pthread_setname_np(pthread_t, const char*, void*)', + dependencies : thread_dep) + # NetBSD + glib_conf.set('HAVE_PTHREAD_SETNAME_NP_WITH_TID_AND_ARG', 1) + elif cc.links(pthread_prefix + ''' + #include + int main() { + pthread_set_name_np(pthread_self(), "example"); + return 0; + }''', + name : 'pthread_set_name_np(pthread_t, const char*)', + dependencies : thread_dep) + # FreeBSD, DragonFlyBSD, OpenBSD, etc. + glib_conf.set('HAVE_PTHREAD_SET_NAME_NP', 1) endif endif