[glib/wip/lantw/gthread-set-thread-name-on-bsd] gthread: Set thread name on *BSD



commit f489b6f922627a3b15adfa12cdd91114ce679452
Author: Ting-Wei Lan <lantw src gnome org>
Date:   Fri Aug 30 01:24:08 2019 +0800

    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 <sys/time.h>
 #include <unistd.h>
 
+#ifdef HAVE_PTHREAD_SET_NAME_NP
+#include <pthread_np.h>
+#endif
 #ifdef HAVE_SCHED_H
 #include <sched.h>
 #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 <pthread_np.h>
+                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
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]