Browse Source

Add support for named threads (atm linux only)

sapier 10 years ago
parent
commit
edcad09dee
7 changed files with 36 additions and 1 deletions
  1. 3 1
      src/client.cpp
  2. 4 0
      src/connection.cpp
  3. 2 0
      src/emerge.cpp
  4. 2 0
      src/httpfetch.cpp
  5. 20 0
      src/porting.h
  6. 3 0
      src/script/lua_api/l_async_events.cpp
  7. 2 0
      src/server.cpp

+ 3 - 1
src/client.cpp

@@ -169,6 +169,8 @@ void * MeshUpdateThread::Thread()
 	
 	BEGIN_DEBUG_EXCEPTION_HANDLER
 
+	porting::setThreadName("MeshUpdateThread");
+
 	while(!StopRequested())
 	{
 		QueuedMeshUpdate *q = m_queue_in.pop();
@@ -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;
 	}

+ 4 - 0
src/connection.cpp

@@ -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()) {
@@ -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;

+ 2 - 0
src/emerge.cpp

@@ -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)) {

+ 2 - 0
src/httpfetch.cpp

@@ -566,6 +566,8 @@ protected:
 		log_register_thread("CurlFetchThread");
 		DSTACK(__FUNCTION_NAME);
 
+		porting::setThreadName("CurlFetchThread");
+
 		CurlHandlePool pool;
 
 		m_multi = curl_multi_init();

+ 20 - 0
src/porting.h

@@ -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
 

+ 3 - 0
src/script/lua_api/l_async_events.cpp

@@ -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");

+ 2 - 0
src/server.cpp

@@ -99,6 +99,8 @@ void * ServerThread::Thread()
 
 	ThreadStarted();
 
+	porting::setThreadName("ServerThread");
+
 	while(!StopRequested())
 	{
 		try{