Commit d07b8c7a authored by enolan's avatar enolan Committed by Ben Gamari

Include original process name in worker thread name (#14153)

Prior to this commit, worker OS thread were renamed to "ghc_worker" when
spawned. This was annoying when reading debugging messages that print
the process name because it doesn't tell you *which* Haskell program is
generating the message.

This commit changes it to "original_process_name:w", truncating the
original name to fit in the kernel buffer if neccesary.

Test Plan: ./validate

Reviewers: austin, bgamari, erikd, simonmar

Reviewed By: bgamari

Subscribers: Phyx, rwbarton, thomie

Differential Revision:
parent 6de1a5a9
......@@ -19,6 +19,8 @@
#include "Hash.h"
#include "Trace.h"
#include <string.h>
#include <signal.h>
......@@ -468,7 +470,26 @@ startWorkerTask (Capability *cap)
cap->running_task = task;
r = createOSThread(&tid, "ghc_worker", (OSThreadProc*)workerStart, task);
// Set the name of the worker thread to the original process name followed by
// ":w", but only if we're on Linux where the program_invocation_short_name
// global is available.
#if defined(linux_HOST_OS)
size_t procname_len = strlen(program_invocation_short_name);
char worker_name[16];
// The kernel only allocates 16 bytes for thread names, so we truncate if the
// original name is too long. Process names go in another table that has more
// capacity.
if (procname_len >= 13) {
strncpy(worker_name, program_invocation_short_name, 13);
strcpy(worker_name + 13, ":w");
} else {
strcpy(worker_name, program_invocation_short_name);
strcpy(worker_name + procname_len, ":w");
char * worker_name = "ghc_worker";
r = createOSThread(&tid, worker_name, (OSThreadProc*)workerStart, task);
if (r != 0) {
sysErrorBelch("failed to create OS thread");
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment