summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLaurent Pinchart <laurent.pinchart@ideasonboard.com>2020-01-18 03:44:49 +0200
committerLaurent Pinchart <laurent.pinchart@ideasonboard.com>2020-01-20 13:35:59 +0200
commit1d929967b7d5623ec49f0bbed3abe4fea480011e (patch)
tree5d37ad5cde2a0e2391c0f5dbe3559833172847a0 /src
parenta39b91d44edfc737ddb26003f663ba26ee14e785 (diff)
libcamera: thread: Add a method to return the ID of the current thread
The current thread ID is useful when logging message to debug concurrency issues. Add a method to retrieve it. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com> Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
Diffstat (limited to 'src')
-rw-r--r--src/libcamera/include/thread.h2
-rw-r--r--src/libcamera/thread.cpp20
2 files changed, 22 insertions, 0 deletions
diff --git a/src/libcamera/include/thread.h b/src/libcamera/include/thread.h
index 37edd4f5..819a9879 100644
--- a/src/libcamera/include/thread.h
+++ b/src/libcamera/include/thread.h
@@ -9,6 +9,7 @@
#include <memory>
#include <mutex>
+#include <sys/types.h>
#include <thread>
#include <libcamera/signal.h>
@@ -39,6 +40,7 @@ public:
Signal<Thread *> finished;
static Thread *current();
+ static pid_t currentId();
EventDispatcher *eventDispatcher();
void setEventDispatcher(std::unique_ptr<EventDispatcher> dispatcher);
diff --git a/src/libcamera/thread.cpp b/src/libcamera/thread.cpp
index 18ebd16a..fe32cd67 100644
--- a/src/libcamera/thread.cpp
+++ b/src/libcamera/thread.cpp
@@ -9,6 +9,9 @@
#include <atomic>
#include <list>
+#include <unistd.h>
+#include <sys/syscall.h>
+#include <sys/types.h>
#include <libcamera/event_dispatcher.h>
@@ -62,6 +65,7 @@ private:
Thread *thread_;
bool running_;
+ pid_t tid_;
Mutex mutex_;
@@ -108,6 +112,7 @@ ThreadData *ThreadData::current()
* started, set it here.
*/
ThreadData *data = mainThread.data_;
+ data->tid_ = syscall(SYS_gettid);
currentThreadData = data;
return data;
}
@@ -189,6 +194,7 @@ void Thread::startThread()
*/
thread_local ThreadCleaner cleaner(this, &Thread::finishThread);
+ data_->tid_ = syscall(SYS_gettid);
currentThreadData = data_;
run();
@@ -309,6 +315,20 @@ Thread *Thread::current()
}
/**
+ * \brief Retrieve the ID of the current thread
+ *
+ * The thread ID corresponds to the Linux thread ID (TID) as returned by the
+ * gettid system call.
+ *
+ * \return The ID of the current thread
+ */
+pid_t Thread::currentId()
+{
+ ThreadData *data = ThreadData::current();
+ return data->tid_;
+}
+
+/**
* \brief Set the event dispatcher
* \param[in] dispatcher Pointer to the event dispatcher
*