[libcamera-devel] [PATCH 1/2] libcamera: thread: Add a method to return the ID of the current thread

Niklas Söderlund niklas.soderlund at ragnatech.se
Sun Jan 19 00:18:43 CET 2020


Hi Laurent,

Thanks for your patch.

On 2020-01-18 23:33:47 +0200, Laurent Pinchart wrote:
> 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 at ideasonboard.com>

Reviewed-by: Niklas Söderlund <niklas.soderlund at ragnatech.se>

> ---
>  src/libcamera/include/thread.h |  2 ++
>  src/libcamera/thread.cpp       | 20 ++++++++++++++++++++
>  2 files changed, 22 insertions(+)
> 
> diff --git a/src/libcamera/include/thread.h b/src/libcamera/include/thread.h
> index 37edd4f5138b..819a9879ac56 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 18ebd16a7e2f..fe32cd677596 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();
> @@ -308,6 +314,20 @@ Thread *Thread::current()
>  	return data->thread_;
>  }
>  
> +/**
> + * \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
> -- 
> Regards,
> 
> Laurent Pinchart
> 
> _______________________________________________
> libcamera-devel mailing list
> libcamera-devel at lists.libcamera.org
> https://lists.libcamera.org/listinfo/libcamera-devel

-- 
Regards,
Niklas Söderlund


More information about the libcamera-devel mailing list