mirror of
https://github.com/XRPLF/rippled.git
synced 2026-04-29 15:37:57 +00:00
This change: * Truncates thread names if more than 15 chars with `snprintf`. * Adds warnings for truncated thread names if `-DTRUNCATED_THREAD_NAME_LOGS=ON`. * Add a static assert for string literals to stop compiling if > 15 chars. * Shortens `Resource::Manager` to `Resource::Mngr` to fix the static assert failure. * Updates `CurrentThreadName_test` unit test specifically for Linux to verify truncation.
60 lines
1.7 KiB
C++
60 lines
1.7 KiB
C++
// Portions of this file are from JUCE (http://www.juce.com).
|
|
// Copyright (c) 2013 - Raw Material Software Ltd.
|
|
// Please visit http://www.juce.com
|
|
|
|
#ifndef BEAST_CORE_CURRENT_THREAD_NAME_H_INCLUDED
|
|
#define BEAST_CORE_CURRENT_THREAD_NAME_H_INCLUDED
|
|
|
|
#include <boost/predef.h>
|
|
|
|
#include <string>
|
|
#include <string_view>
|
|
|
|
namespace beast {
|
|
|
|
/** Changes the name of the caller thread.
|
|
Different OSes may place different length or content limits on this name.
|
|
*/
|
|
void
|
|
setCurrentThreadName(std::string_view newThreadName);
|
|
|
|
#if BOOST_OS_LINUX
|
|
|
|
// On Linux, thread names are limited to 16 bytes including the null terminator.
|
|
// Maximum number of characters is therefore 15.
|
|
constexpr std::size_t maxThreadNameLength = 15;
|
|
|
|
/** Sets the name of the caller thread with compile-time size checking.
|
|
@tparam N The size of the string literal including null terminator
|
|
@param newThreadName A string literal to set as the thread name
|
|
|
|
This template overload enforces that thread names are at most 16 characters
|
|
(including null terminator) at compile time, matching Linux's limit.
|
|
*/
|
|
template <std::size_t N>
|
|
void
|
|
setCurrentThreadName(char const (&newThreadName)[N])
|
|
{
|
|
static_assert(
|
|
N <= maxThreadNameLength + 1,
|
|
"Thread name cannot exceed 15 characters");
|
|
|
|
setCurrentThreadName(std::string_view(newThreadName, N - 1));
|
|
}
|
|
#endif
|
|
|
|
/** Returns the name of the caller thread.
|
|
|
|
The name returned is the name as set by a call to setCurrentThreadName().
|
|
If the thread name is set by an external force, then that name change
|
|
will not be reported.
|
|
|
|
If no name has ever been set, then the empty string is returned.
|
|
*/
|
|
std::string
|
|
getCurrentThreadName();
|
|
|
|
} // namespace beast
|
|
|
|
#endif
|