summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFrank Ch. Eigler <fche@redhat.com>2021-03-30 13:22:43 -0400
committerFrank Ch. Eigler <fche@redhat.com>2021-03-30 13:22:43 -0400
commit69fc2b3a5cbbe6222cfe84e2e76b8b4b9195a4b3 (patch)
treeb05bf9a8757b116342f46e670ffd28e0476c3d58
parenta51f2783716054ec2f6e501737f3f5058f7dbd80 (diff)
downloadelfutils-69fc2b3a5cbbe6222cfe84e2e76b8b4b9195a4b3.tar.gz
debuginfod: Set child thread names via pthread_setname_np()
In order to assist problem diagnosis / monitoring, use this gnu-flavoured pthread function to set purpose names to the various child threads debuginfod starts. libmicrohttpd already sets this for its threads. Signed-off-by: Frank Ch. Eigler <fche@redhat.com>
-rw-r--r--ChangeLog4
-rw-r--r--configure.ac3
-rw-r--r--debuginfod/ChangeLog4
-rw-r--r--debuginfod/debuginfod.cxx16
-rw-r--r--tests/ChangeLog4
-rwxr-xr-xtests/run-debuginfod-find.sh7
6 files changed, 35 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog
index fe7e8498..e18746fb 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2021-03-30 Frank Ch. Eigler <fche@redhat.com>
+
+ * configure.ac: Look for pthread_setname_np.
+
2021-02-17 Timm Bäder <tbaeder@redhat.com>
* configure.ac: Add -Wno-packed-not-aligned check.
diff --git a/configure.ac b/configure.ac
index aa8439e8..ad046bc2 100644
--- a/configure.ac
+++ b/configure.ac
@@ -747,6 +747,9 @@ AS_IF([test "x$enable_libdebuginfod" != "xno"], [
fi
])
+AC_CHECK_LIB(pthread, pthread_setname_np, [
+ AC_DEFINE([HAVE_PTHREAD_SETNAME_NP],[1],[Enable pthread_setname_np])])
+
AS_IF([test "x$enable_libdebuginfod" = "xyes" || test "x$enable_libdebuginfod" = "xdummy"],
[AC_DEFINE([ENABLE_LIBDEBUGINFOD], [1], [Enable libdebuginfod])])
AS_IF([test "x$enable_libdebuginfod" = "xdummy"],
diff --git a/debuginfod/ChangeLog b/debuginfod/ChangeLog
index 56c2ec2b..c98a8374 100644
--- a/debuginfod/ChangeLog
+++ b/debuginfod/ChangeLog
@@ -1,3 +1,7 @@
+2021-03-30 Frank Ch. Eigler <fche@redhat.com>
+
+ * debuginfod.cxx (main): Set child thread names.
+
2021-03-07 Timm Bäder <tbaeder@redhat.com>
* debuginfod-client.c (debuginfod_query_server): Tweak
diff --git a/debuginfod/debuginfod.cxx b/debuginfod/debuginfod.cxx
index 2aecc049..473511ea 100644
--- a/debuginfod/debuginfod.cxx
+++ b/debuginfod/debuginfod.cxx
@@ -3473,23 +3473,35 @@ main (int argc, char *argv[])
if (rc)
error (EXIT_FAILURE, rc, "cannot spawn thread to groom database\n");
else
- all_threads.push_back(pt);
+ {
+#ifdef HAVE_PTHREAD_SETNAME_NP
+ (void) pthread_setname_np (pt, "groom");
+#endif
+ all_threads.push_back(pt);
+ }
if (scan_files || scan_archives.size() > 0)
{
rc = pthread_create (& pt, NULL, thread_main_fts_source_paths, NULL);
if (rc)
error (EXIT_FAILURE, rc, "cannot spawn thread to traverse source paths\n");
+#ifdef HAVE_PTHREAD_SETNAME_NP
+ (void) pthread_setname_np (pt, "traverse");
+#endif
all_threads.push_back(pt);
+
for (unsigned i=0; i<concurrency; i++)
{
rc = pthread_create (& pt, NULL, thread_main_scanner, NULL);
if (rc)
error (EXIT_FAILURE, rc, "cannot spawn thread to scan source files / archives\n");
+#ifdef HAVE_PTHREAD_SETNAME_NP
+ (void) pthread_setname_np (pt, "scan");
+#endif
all_threads.push_back(pt);
}
}
-
+
/* Trivial main loop! */
set_metric("ready", 1);
while (! interrupted)
diff --git a/tests/ChangeLog b/tests/ChangeLog
index bb842cb5..ea44d20c 100644
--- a/tests/ChangeLog
+++ b/tests/ChangeLog
@@ -1,3 +1,7 @@
+2021-03-30 Frank Ch. Eigler <fche@redhat.com>
+
+ * run-debuginfod-find.sh: Add thread comm checks.
+
2021-02-17 Timm Bäder <tbaeder@redhat.com>
* elfstrmerge.c (main): Move new_data_buf function to...
diff --git a/tests/run-debuginfod-find.sh b/tests/run-debuginfod-find.sh
index bcca6130..8213c8a4 100755
--- a/tests/run-debuginfod-find.sh
+++ b/tests/run-debuginfod-find.sh
@@ -1,6 +1,6 @@
#!/usr/bin/env bash
#
-# Copyright (C) 2019-2020 Red Hat, Inc.
+# Copyright (C) 2019-2021 Red Hat, Inc.
# This file is part of elfutils.
#
# This file is free software; you can redistribute it and/or modify
@@ -113,6 +113,11 @@ export DEBUGINFOD_URLS=http://127.0.0.1:$PORT1/ # or without trailing /
# Be patient when run on a busy machine things might take a bit.
export DEBUGINFOD_TIMEOUT=10
+# Check thread comm names
+ps -q $PID1 -e -L -o '%p %c %a' | grep groom
+ps -q $PID1 -e -L -o '%p %c %a' | grep scan
+ps -q $PID1 -e -L -o '%p %c %a' | grep traverse
+
# We use -t0 and -g0 here to turn off time-based scanning & grooming.
# For testing purposes, we just sic SIGUSR1 / SIGUSR2 at the process.