[review,v2] Set names of worker threads

Message ID 20191020205446.D51CF21926@gnutoolchain-gerrit.osci.io
State New, archived
Headers

Commit Message

Simon Marchi (Code Review) Oct. 20, 2019, 8:54 p.m. UTC
  Change URL: https://gnutoolchain-gerrit.osci.io/r/c/binutils-gdb/+/176
......................................................................

Set names of worker threads

This adds some configury so that gdb can set the names of worker
threads.  This makes them show up more nicely when debugging gdb
itself.

2019-10-19  Tom Tromey  <tom@tromey.com>

	* gdbsupport/thread-pool.c (thread_pool::set_thread_count): Set
	name of worker thread.
	* gdbsupport/common.m4 (GDB_AC_COMMON): Check for
	pthread_setname_np.
	* configure, config.in: Rebuild.

gdb/gdbserver/ChangeLog
2019-10-19  Tom Tromey  <tom@tromey.com>

	* configure, config.in: Rebuild.

Change-Id: I60473d65ae9ae14d8c56ddde39684240c16aaf35
---
M gdb/ChangeLog
M gdb/config.in
M gdb/configure
M gdb/gdbserver/ChangeLog
M gdb/gdbserver/config.in
M gdb/gdbserver/configure
M gdb/gdbsupport/common.m4
M gdb/gdbsupport/thread-pool.c
8 files changed, 43 insertions(+), 9 deletions(-)
  

Patch

diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 3eeee1e..6da4e5b 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,13 @@ 
 2019-10-19  Tom Tromey  <tom@tromey.com>
 
+	* gdbsupport/thread-pool.c (thread_pool::set_thread_count): Set
+	name of worker thread.
+	* gdbsupport/common.m4 (GDB_AC_COMMON): Check for
+	pthread_setname_np.
+	* configure, config.in: Rebuild.
+
+2019-10-19  Tom Tromey  <tom@tromey.com>
+
 	* python/python.c (class gdbpy_gil): New.
 	(struct gdbpy_event): Add constructor, destructor, operator().
 	(gdbpy_post_event): Use run_on_main_thread.
diff --git a/gdb/config.in b/gdb/config.in
index ff2fd12..54f1dd1 100644
--- a/gdb/config.in
+++ b/gdb/config.in
@@ -345,6 +345,9 @@ 
 /* Have PTHREAD_PRIO_INHERIT. */
 #undef HAVE_PTHREAD_PRIO_INHERIT
 
+/* Define to 1 if you have the `pthread_setname_np' function. */
+#undef HAVE_PTHREAD_SETNAME_NP
+
 /* Define to 1 if you have the `pthread_sigmask' function. */
 #undef HAVE_PTHREAD_SIGMASK
 
diff --git a/gdb/configure b/gdb/configure
index 5571cf0..2a967bf 100755
--- a/gdb/configure
+++ b/gdb/configure
@@ -14387,12 +14387,13 @@ 
 
     # This check must be here, while LIBS includes any necessary
     # threading library.
-    for ac_func in pthread_sigmask
+    for ac_func in pthread_sigmask pthread_setname_np
 do :
-  ac_fn_cxx_check_func "$LINENO" "pthread_sigmask" "ac_cv_func_pthread_sigmask"
-if test "x$ac_cv_func_pthread_sigmask" = xyes; then :
+  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_cxx_check_func "$LINENO" "$ac_func" "$as_ac_var"
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
   cat >>confdefs.h <<_ACEOF
-#define HAVE_PTHREAD_SIGMASK 1
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
 _ACEOF
 
 fi
diff --git a/gdb/gdbserver/ChangeLog b/gdb/gdbserver/ChangeLog
index 28c3608..e5a5829 100644
--- a/gdb/gdbserver/ChangeLog
+++ b/gdb/gdbserver/ChangeLog
@@ -1,5 +1,9 @@ 
 2019-10-19  Tom Tromey  <tom@tromey.com>
 
+	* configure, config.in: Rebuild.
+
+2019-10-19  Tom Tromey  <tom@tromey.com>
+
 	* remote-utils.c (block_unblock_async_io): Use gdb_sigmask.
 	* linux-low.c (linux_wait_for_event_filtered, linux_async): Use
 	gdb_sigmask.
diff --git a/gdb/gdbserver/config.in b/gdb/gdbserver/config.in
index 3027ffa..14cf709 100644
--- a/gdb/gdbserver/config.in
+++ b/gdb/gdbserver/config.in
@@ -195,6 +195,9 @@ 
 /* Have PTHREAD_PRIO_INHERIT. */
 #undef HAVE_PTHREAD_PRIO_INHERIT
 
+/* Define to 1 if you have the `pthread_setname_np' function. */
+#undef HAVE_PTHREAD_SETNAME_NP
+
 /* Define to 1 if you have the `pthread_sigmask' function. */
 #undef HAVE_PTHREAD_SIGMASK
 
diff --git a/gdb/gdbserver/configure b/gdb/gdbserver/configure
index 260e8c0..c5144c4 100755
--- a/gdb/gdbserver/configure
+++ b/gdb/gdbserver/configure
@@ -7725,12 +7725,13 @@ 
 
     # This check must be here, while LIBS includes any necessary
     # threading library.
-    for ac_func in pthread_sigmask
+    for ac_func in pthread_sigmask pthread_setname_np
 do :
-  ac_fn_cxx_check_func "$LINENO" "pthread_sigmask" "ac_cv_func_pthread_sigmask"
-if test "x$ac_cv_func_pthread_sigmask" = xyes; then :
+  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_cxx_check_func "$LINENO" "$ac_func" "$as_ac_var"
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
   cat >>confdefs.h <<_ACEOF
-#define HAVE_PTHREAD_SIGMASK 1
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
 _ACEOF
 
 fi
diff --git a/gdb/gdbsupport/common.m4 b/gdb/gdbsupport/common.m4
index 7da765b..0adcf26 100644
--- a/gdb/gdbsupport/common.m4
+++ b/gdb/gdbsupport/common.m4
@@ -57,7 +57,7 @@ 
 
     # This check must be here, while LIBS includes any necessary
     # threading library.
-    AC_CHECK_FUNCS([pthread_sigmask])
+    AC_CHECK_FUNCS([pthread_sigmask pthread_setname_np])
 
     LIBS="$save_LIBS"
     CXXFLAGS="$save_CXXFLAGS"
diff --git a/gdb/gdbsupport/thread-pool.c b/gdb/gdbsupport/thread-pool.c
index a3ebf42..fcbe791 100644
--- a/gdb/gdbsupport/thread-pool.c
+++ b/gdb/gdbsupport/thread-pool.c
@@ -23,6 +23,15 @@ 
 #include "gdbsupport/block-signals.h"
 #include <algorithm>
 
+/* On the off chance that we have the pthread library on a Windows
+   host, but std::thread is not using it, avoid calling
+   pthread_setname_np on Windows.  */
+#ifndef _WIN32
+#ifdef HAVE_PTHREAD_SETNAME_NP
+#include <pthread.h>
+#endif
+#endif
+
 namespace gdb
 {
 
@@ -59,6 +68,11 @@ 
       for (size_t i = m_count; i < num_threads; ++i)
 	{
 	  std::thread thread (&thread_pool::thread_function, this);
+#ifndef _WIN32 /* See the comment at the top of the file.  */
+#ifdef HAVE_PTHREAD_SETNAME_NP
+	  pthread_setname_np (thread.native_handle (), "gdb worker");
+#endif
+#endif
 	  thread.detach ();
 	}
     }