Skip to content

Commit 3f6ec1b

Browse files
committed
implement thread naming for Windows
1 parent d10e268 commit 3f6ec1b

File tree

7 files changed

+30
-14
lines changed

7 files changed

+30
-14
lines changed

cpp/server/deadbeef/player_misc.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ ColumnsQueryPtr PlayerImpl::createColumnsQuery(const std::vector<std::string>& c
6868

6969
std::unique_ptr<WorkQueue> PlayerImpl::createWorkQueue()
7070
{
71-
return std::make_unique<ThreadWorkQueue>(MSRV_PROJECT_ID "-control");
71+
return std::make_unique<ThreadWorkQueue>(MSRV_THREAD_NAME(MSRV_PROJECT_ID "-control"));
7272
}
7373

7474
void PlayerImpl::connect()

cpp/server/server_host.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
namespace msrv {
1818

1919
ServerHost::ServerHost(Player* player)
20-
: player_(player), utilityQueue_(8, MSRV_PROJECT_ID "-io")
20+
: player_(player), utilityQueue_(8, MSRV_THREAD_NAME(MSRV_PROJECT_ID "-io"))
2121
{
2222
playerWorkQueue_ = player_->createWorkQueue();
2323
player_->onEvents([this](PlayerEvents event) { handlePlayerEvents(event); });

cpp/server/server_thread.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ ServerThread::ServerThread(ServerReadyCallback readyCallback)
1111
readyCallback_(std::move(readyCallback))
1212
{
1313
thread_ = std::thread([this] {
14-
setThreadName(MSRV_PROJECT_ID "-server");
14+
setThreadName(MSRV_THREAD_NAME(MSRV_PROJECT_ID "-server"));
1515
run();
1616
});
1717
}

cpp/server/system.hpp

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,6 @@
1818
namespace msrv
1919
{
2020

21-
inline void setThreadName(const char* name);
22-
2321
template<typename Traits>
2422
class Handle
2523
{
@@ -94,7 +92,11 @@ class Handle
9492

9593
#if MSRV_OS_POSIX
9694

97-
void setThreadName(const char* name)
95+
#define MSRV_THREAD_NAME(s) s
96+
97+
typedef const char* ThreadName;
98+
99+
inline void setThreadName(ThreadName name)
98100
{
99101
#if defined(HAVE_PTHREAD_SETNAME_NP)
100102
(void) pthread_setname_np(pthread_self(), name);
@@ -132,10 +134,12 @@ inline ErrorCode lastSystemError() noexcept
132134

133135
#if MSRV_OS_WINDOWS
134136

135-
void setThreadName(const char* name)
136-
{
137-
(void)name;
138-
}
137+
#define MSRV_THREAD_NAME_(s) L ## s
138+
#define MSRV_THREAD_NAME(s) MSRV_THREAD_NAME_(s)
139+
140+
typedef const wchar_t* ThreadName;
141+
142+
void setThreadName(ThreadName name);
139143

140144
struct WindowsHandleTraits
141145
{

cpp/server/system_windows.cpp

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,17 @@
44

55
namespace msrv {
66

7+
typedef HRESULT (WINAPI *SetThreadDescriptionFunc)(HANDLE thread, LPCWSTR name);
8+
9+
void setThreadName(ThreadName name)
10+
{
11+
static auto setName = reinterpret_cast<SetThreadDescriptionFunc>(
12+
GetProcAddress(LoadLibraryA("kernelbase.dll"), "SetThreadDescription"));
13+
14+
if (setName)
15+
setName(GetCurrentThread(), name);
16+
}
17+
718
const char* formatError(ErrorCode errorCode, char* buffer, size_t size) noexcept
819
{
920
auto ret = ::FormatMessageA(

cpp/server/work_queue.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ namespace msrv {
88

99
WorkQueue::~WorkQueue() = default;
1010

11-
ThreadWorkQueue::ThreadWorkQueue(const char* name)
11+
ThreadWorkQueue::ThreadWorkQueue(ThreadName name)
1212
{
1313
thread_ = std::thread([this, name] {
1414
if (name)
@@ -62,7 +62,7 @@ void ThreadWorkQueue::run()
6262
}
6363
}
6464

65-
ThreadPoolWorkQueue::ThreadPoolWorkQueue(size_t workers, const char* name)
65+
ThreadPoolWorkQueue::ThreadPoolWorkQueue(size_t workers, ThreadName name)
6666
{
6767
assert(workers > 0);
6868

cpp/server/work_queue.hpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
#pragma once
22

33
#include "defines.hpp"
4+
#include "system.hpp"
45

56
#include <thread>
67
#include <mutex>
@@ -29,7 +30,7 @@ class WorkQueue
2930
class ThreadWorkQueue : public WorkQueue
3031
{
3132
public:
32-
explicit ThreadWorkQueue(const char* name = nullptr);
33+
explicit ThreadWorkQueue(ThreadName name = nullptr);
3334
~ThreadWorkQueue();
3435

3536
void enqueue(WorkCallback callback) override;
@@ -48,7 +49,7 @@ class ThreadWorkQueue : public WorkQueue
4849
class ThreadPoolWorkQueue : public WorkQueue
4950
{
5051
public:
51-
explicit ThreadPoolWorkQueue(size_t workers, const char* name = nullptr);
52+
explicit ThreadPoolWorkQueue(size_t workers, ThreadName name = nullptr);
5253
~ThreadPoolWorkQueue();
5354

5455
void enqueue(WorkCallback callback) override;

0 commit comments

Comments
 (0)