aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWladimir J. van der Laan <laanwj@protonmail.com>2019-10-03 20:50:13 +0200
committerWladimir J. van der Laan <laanwj@protonmail.com>2019-10-03 20:51:00 +0200
commit47150377967e570c9a81cfa4952f7d3114b1ca83 (patch)
tree583e4f236511295a94025a7912d97bc5fa85821b
parent284cd3195a9ea2e1e8d3663f5e7baa69c3727464 (diff)
parent07e4bdba3bd46c3a15dedb0a2660453c300643dc (diff)
Merge #17038: Don't rename main thread at process level
07e4bdba3bd46c3a15dedb0a2660453c300643dc Don't rename main thread at process level (Wladimir J. van der Laan) Pull request description: Set only the internal name for the main threads. Fixes #17036 for both `bitcoind` and `bitcoin-qt`. After this, e.g. `killall` works again for either. ACKs for top commit: promag: Tested ACK 07e4bdba3bd46c3a15dedb0a2660453c300643dc, `killall bitcoind` and `killall bitcoin-qt` now just works! jonatack: ACK 07e4bdba3bd46c3a15dedb0a2660453c300643dc `killall bitcoind` shuts down bitcoind mainnet/testnet/regtest, `killall bitcoin-qt` shuts down `./src/qt/bitcoin-qt`, tests pass, very light code review. Good idea to add the `@note` warning. Thanks! Tree-SHA512: 8f310ae646c83a02de7cc6869aa9aca1d53613d8fb762d05e3dfa52e17ca82abeb99044564cf7ba45b3c4b320e65bf8315d0e8834a9e696f097be5af638c6fd9
-rw-r--r--src/bitcoind.cpp2
-rw-r--r--src/qt/bitcoin.cpp2
-rw-r--r--src/util/threadnames.cpp5
-rw-r--r--src/util/threadnames.h5
4 files changed, 12 insertions, 2 deletions
diff --git a/src/bitcoind.cpp b/src/bitcoind.cpp
index 615b955f6e..17989a4214 100644
--- a/src/bitcoind.cpp
+++ b/src/bitcoind.cpp
@@ -45,7 +45,7 @@ static bool AppInit(int argc, char* argv[])
bool fRet = false;
- util::ThreadRename("init");
+ util::ThreadSetInternalName("init");
//
// Parameters
diff --git a/src/qt/bitcoin.cpp b/src/qt/bitcoin.cpp
index ec6075c8fb..86f4dc91a1 100644
--- a/src/qt/bitcoin.cpp
+++ b/src/qt/bitcoin.cpp
@@ -416,7 +416,7 @@ int GuiMain(int argc, char* argv[])
std::tie(argc, argv) = winArgs.get();
#endif
SetupEnvironment();
- util::ThreadRename("main");
+ util::ThreadSetInternalName("main");
std::unique_ptr<interfaces::Node> node = interfaces::MakeNode();
diff --git a/src/util/threadnames.cpp b/src/util/threadnames.cpp
index c25e9ed661..168f9325d0 100644
--- a/src/util/threadnames.cpp
+++ b/src/util/threadnames.cpp
@@ -60,3 +60,8 @@ void util::ThreadRename(std::string&& name)
SetThreadName(("b-" + name).c_str());
SetInternalName(std::move(name));
}
+
+void util::ThreadSetInternalName(std::string&& name)
+{
+ SetInternalName(std::move(name));
+}
diff --git a/src/util/threadnames.h b/src/util/threadnames.h
index aaf07b9bf8..69a1b55bfe 100644
--- a/src/util/threadnames.h
+++ b/src/util/threadnames.h
@@ -10,8 +10,13 @@
namespace util {
//! Rename a thread both in terms of an internal (in-memory) name as well
//! as its system thread name.
+//! @note Do not call this for the main thread, as this will interfere with
+//! UNIX utilities such as top and killall. Use ThreadSetInternalName instead.
void ThreadRename(std::string&&);
+//! Set the internal (in-memory) name of the current thread only.
+void ThreadSetInternalName(std::string&&);
+
//! Get the thread's internal (in-memory) name; used e.g. for identification in
//! logging.
const std::string& ThreadGetInternalName();