summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/libcamera/event_dispatcher_poll.cpp3
-rw-r--r--src/libcamera/include/thread.h3
-rw-r--r--src/libcamera/thread.cpp4
3 files changed, 6 insertions, 4 deletions
diff --git a/src/libcamera/event_dispatcher_poll.cpp b/src/libcamera/event_dispatcher_poll.cpp
index 4f15f3e3..281f37bd 100644
--- a/src/libcamera/event_dispatcher_poll.cpp
+++ b/src/libcamera/event_dispatcher_poll.cpp
@@ -19,6 +19,7 @@
#include <libcamera/timer.h>
#include "log.h"
+#include "thread.h"
/**
* \file event_dispatcher_poll.h
@@ -143,6 +144,8 @@ void EventDispatcherPoll::processEvents()
{
int ret;
+ Thread::current()->dispatchMessages();
+
/* Create the pollfd array. */
std::vector<struct pollfd> pollfds;
pollfds.reserve(notifiers_.size() + 1);
diff --git a/src/libcamera/include/thread.h b/src/libcamera/include/thread.h
index acae91cb..630abb49 100644
--- a/src/libcamera/include/thread.h
+++ b/src/libcamera/include/thread.h
@@ -43,6 +43,8 @@ public:
EventDispatcher *eventDispatcher();
void setEventDispatcher(std::unique_ptr<EventDispatcher> dispatcher);
+ void dispatchMessages();
+
protected:
int exec();
virtual void run();
@@ -53,7 +55,6 @@ private:
void postMessage(std::unique_ptr<Message> msg, Object *receiver);
void removeMessages(Object *receiver);
- void dispatchMessages();
friend class Object;
friend class ThreadData;
diff --git a/src/libcamera/thread.cpp b/src/libcamera/thread.cpp
index 6f86e4a9..24422f7b 100644
--- a/src/libcamera/thread.cpp
+++ b/src/libcamera/thread.cpp
@@ -212,10 +212,8 @@ int Thread::exec()
locker.unlock();
- while (!data_->exit_.load(std::memory_order_acquire)) {
- dispatchMessages();
+ while (!data_->exit_.load(std::memory_order_acquire))
dispatcher->processEvents();
- }
locker.lock();