Skip to content

Commit

Permalink
Add support for named threads (atm linux only)
Browse files Browse the repository at this point in the history
  • Loading branch information
sapier authored and sapier committed Apr 9, 2014
1 parent d22621e commit edcad09
Show file tree
Hide file tree
Showing 7 changed files with 36 additions and 1 deletion.
4 changes: 3 additions & 1 deletion src/client.cpp
Expand Up @@ -169,6 +169,8 @@ void * MeshUpdateThread::Thread()

BEGIN_DEBUG_EXCEPTION_HANDLER

porting::setThreadName("MeshUpdateThread");

while(!StopRequested())
{
QueuedMeshUpdate *q = m_queue_in.pop();
Expand Down Expand Up @@ -1212,7 +1214,7 @@ void Client::ProcessData(u8 *data, u32 datasize, u16 sender_peer_id)
m_time_of_day_set = true;

u32 dr = m_env.getDayNightRatio();
verbosestream<<"Client: time_of_day="<<time_of_day
infostream<<"Client: time_of_day="<<time_of_day
<<" time_speed="<<time_speed
<<" dr="<<dr<<std::endl;
}
Expand Down
4 changes: 4 additions & 0 deletions src/connection.cpp
Expand Up @@ -1227,6 +1227,8 @@ void * ConnectionSendThread::Thread()
PROFILE(std::stringstream ThreadIdentifier);
PROFILE(ThreadIdentifier << "ConnectionSend: [" << m_connection->getDesc() << "]");

porting::setThreadName("ConnectionSend");

/* if stop is requested don't stop immediately but try to send all */
/* packets first */
while(!StopRequested() || packetsQueued()) {
Expand Down Expand Up @@ -1955,6 +1957,8 @@ void * ConnectionReceiveThread::Thread()
PROFILE(std::stringstream ThreadIdentifier);
PROFILE(ThreadIdentifier << "ConnectionReceive: [" << m_connection->getDesc() << "]");

porting::setThreadName("ConnectionReceive");

#ifdef DEBUG_CONNECTION_KBPS
u32 curtime = porting::getTimeMs();
u32 lasttime = curtime;
Expand Down
2 changes: 2 additions & 0 deletions src/emerge.cpp
Expand Up @@ -472,6 +472,8 @@ void *EmergeThread::Thread() {
mapgen = emerge->mapgen[id];
enable_mapgen_debug_info = emerge->mapgen_debug_info;

porting::setThreadName("EmergeThread");

while (!StopRequested())
try {
if (!popBlockEmerge(&p, &flags)) {
Expand Down
2 changes: 2 additions & 0 deletions src/httpfetch.cpp
Expand Up @@ -566,6 +566,8 @@ class CurlFetchThread : public JThread
log_register_thread("CurlFetchThread");
DSTACK(__FUNCTION_NAME);

porting::setThreadName("CurlFetchThread");

CurlHandlePool pool;

m_multi = curl_multi_init();
Expand Down
20 changes: 20 additions & 0 deletions src/porting.h
Expand Up @@ -266,6 +266,26 @@ inline u32 getTime(TimePrecision prec)
return 0;
}

#if (defined(linux) || defined(__linux))

#include <sys/prctl.h>

inline void setThreadName(const char* name) {
prctl(PR_SET_NAME,name);
}
#elif defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__)
/* BSD doesn't seem to support thread names. If you know about a way
* to add this feature please create a pull request.
* "setproctitle" doesn't work for threadnames.
*/
#define setThreadName(a)
#elif defined(_WIN32)
// threadnames are not supported on windows
#define setThreadName(a)
#else
#warning "Unknown platform for setThreadName support, you wont have threadname support."
#define setThreadName(a)
#endif

} // namespace porting

Expand Down
3 changes: 3 additions & 0 deletions src/script/lua_api/l_async_events.cpp
Expand Up @@ -262,6 +262,9 @@ void* AsyncWorkerThread::worker_thread_main() {
snprintf(number,sizeof(number),"%d",m_threadnum);
log_register_thread(std::string("AsyncWorkerThread_") + number);

porting::setThreadName(
std::string(std::string("AsyncWorkTh_") + number).c_str());

/** prepare job lua environment **/
lua_newtable(m_LuaStack);
lua_setglobal(m_LuaStack, "engine");
Expand Down
2 changes: 2 additions & 0 deletions src/server.cpp
Expand Up @@ -99,6 +99,8 @@ void * ServerThread::Thread()

ThreadStarted();

porting::setThreadName("ServerThread");

while(!StopRequested())
{
try{
Expand Down

0 comments on commit edcad09

Please sign in to comment.