libcamera: base: thread: Use std::unique_ptr instead of raw pointer

An `std::unique_ptr` is safer and expresses the intent better, so use that.

Signed-off-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>
This commit is contained in:
Barnabás Pőcze
2025-06-05 14:07:24 +02:00
parent 760456acfc
commit 4eacabf5c6
2 changed files with 14 additions and 12 deletions

View File

@@ -75,7 +75,7 @@ private:
ThreadData *targetData);
std::thread thread_;
ThreadData *data_;
std::unique_ptr<ThreadData> data_;
};
} /* namespace libcamera */

View File

@@ -105,8 +105,12 @@ public:
class ThreadData
{
public:
ThreadData()
: thread_(nullptr), running_(false), dispatcher_(nullptr)
/**
* \brief Constructor for internal thread data
* \param[in] thread The associated thread
*/
ThreadData(Thread *thread)
: thread_(thread), running_(false), dispatcher_(nullptr)
{
}
@@ -167,7 +171,7 @@ ThreadData *ThreadData::current()
* The main thread doesn't receive thread-local data when it is
* started, set it here.
*/
ThreadData *data = mainThread.data_;
ThreadData *data = mainThread.data_.get();
data->tid_ = syscall(SYS_gettid);
currentThreadData = data;
return data;
@@ -231,15 +235,13 @@ ThreadData *ThreadData::current()
* \brief Create a thread
*/
Thread::Thread()
: data_(std::make_unique<ThreadData>(this))
{
data_ = new ThreadData;
data_->thread_ = this;
}
Thread::~Thread()
{
delete data_->dispatcher_.load(std::memory_order_relaxed);
delete data_;
}
/**
@@ -284,7 +286,7 @@ void Thread::startThread()
thread_local ThreadCleaner cleaner(this, &Thread::finishThread);
data_->tid_ = syscall(SYS_gettid);
currentThreadData = data_;
currentThreadData = data_.get();
run();
}
@@ -516,7 +518,7 @@ pid_t Thread::currentId()
*/
EventDispatcher *Thread::eventDispatcher()
{
ASSERT(data_ == ThreadData::current());
ASSERT(data_.get() == ThreadData::current());
if (!data_->dispatcher_.load(std::memory_order_relaxed))
data_->dispatcher_.store(new EventDispatcherPoll(),
@@ -621,7 +623,7 @@ void Thread::removeMessages(Object *receiver)
*/
void Thread::dispatchMessages(Message::Type type, Object *receiver)
{
ASSERT(data_ == ThreadData::current());
ASSERT(data_.get() == ThreadData::current());
++data_->messages_.recursion_;
@@ -677,8 +679,8 @@ void Thread::dispatchMessages(Message::Type type, Object *receiver)
*/
void Thread::moveObject(Object *object)
{
ThreadData *currentData = object->thread_->data_;
ThreadData *targetData = data_;
ThreadData *currentData = object->thread_->data_.get();
ThreadData *targetData = data_.get();
MutexLocker lockerFrom(currentData->messages_.mutex_, std::defer_lock);
MutexLocker lockerTo(targetData->messages_.mutex_, std::defer_lock);