Parcourir la source

LibThread: Allow setting thread name in constructor

Thread now has an optional thread_name parameter to the consturctor
that will call pthread_setname_np if given.
Andrew Kaster il y a 5 ans
Parent
commit
0b38a553b1
2 fichiers modifiés avec 9 ajouts et 2 suppressions
  1. 6 1
      Libraries/LibThread/Thread.cpp
  2. 3 1
      Libraries/LibThread/Thread.h

+ 6 - 1
Libraries/LibThread/Thread.cpp

@@ -2,9 +2,10 @@
 #include <pthread.h>
 #include <unistd.h>
 
-LibThread::Thread::Thread(Function<int()> action)
+LibThread::Thread::Thread(Function<int()> action, StringView thread_name)
     : CObject(nullptr)
     , m_action(move(action))
+    , m_thread_name(thread_name.is_null() ? "" : thread_name)
 {
 }
 
@@ -31,6 +32,10 @@ void LibThread::Thread::start()
         static_cast<void*>(this));
 
     ASSERT(rc == 0);
+    if (!m_thread_name.is_empty()) {
+        rc = pthread_setname_np(m_tid, m_thread_name.characters(), m_thread_name.length());
+        ASSERT(rc == 0);
+    }
     dbg() << "Started a thread, tid = " << m_tid;
 }
 

+ 3 - 1
Libraries/LibThread/Thread.h

@@ -1,6 +1,7 @@
 #pragma once
 
 #include <AK/Function.h>
+#include <AK/String.h>
 #include <LibCore/CObject.h>
 
 namespace LibThread {
@@ -9,7 +10,7 @@ class Thread final : public CObject {
     C_OBJECT(Thread);
 
 public:
-    explicit Thread(Function<int()> action);
+    explicit Thread(Function<int()> action, StringView thread_name = nullptr);
     virtual ~Thread();
 
     void start();
@@ -18,6 +19,7 @@ public:
 private:
     Function<int()> m_action;
     int m_tid { -1 };
+    String m_thread_name;
 };
 
 }