mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-03-09 15:37:00 -04:00

Store the thread name in a `thread_local` variable of type `char[]` instead of `std::string`. This avoids calling the destructor when the thread exits. This is a workaround for https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=278701 For type-safety, return `std::string` from `util::ThreadGetInternalName()` instead of `char[]`. As a side effect of this change, we no longer store a reference to a `thread_local` variable in `CLockLocation`. This was dangerous because if the thread quits while the reference still exists (in the global variable `lock_data`, see inside `GetLockData()`) then the reference will become dangling.
26 lines
906 B
C++
26 lines
906 B
C++
// Copyright (c) 2018-2019 The Bitcoin Core developers
|
|
// Distributed under the MIT software license, see the accompanying
|
|
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
|
|
|
#ifndef BITCOIN_UTIL_THREADNAMES_H
|
|
#define BITCOIN_UTIL_THREADNAMES_H
|
|
|
|
#include <string>
|
|
|
|
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(const std::string&);
|
|
|
|
//! Set the internal (in-memory) name of the current thread only.
|
|
void ThreadSetInternalName(const std::string&);
|
|
|
|
//! Get the thread's internal (in-memory) name; used e.g. for identification in
|
|
//! logging.
|
|
std::string ThreadGetInternalName();
|
|
|
|
} // namespace util
|
|
|
|
#endif // BITCOIN_UTIL_THREADNAMES_H
|