summaryrefslogtreecommitdiff
path: root/src/managers/eventLoop/EventLoopManager.cpp
diff options
context:
space:
mode:
authorVaxry <vaxry@vaxry.net>2025-05-19 01:27:30 +0200
committerVaxry <vaxry@vaxry.net>2025-05-19 01:27:30 +0200
commiteb3b38d40baca5c05ddbc1507b3d3f02a0ccb164 (patch)
tree99c6f91fe9ca44bda4c1072ec907f856fe3ea661 /src/managers/eventLoop/EventLoopManager.cpp
parentd9c8a378118d954932eb9906b07150ccd9a3a434 (diff)
eventLoop: fixup event source callbacks
Diffstat (limited to 'src/managers/eventLoop/EventLoopManager.cpp')
-rw-r--r--src/managers/eventLoop/EventLoopManager.cpp20
1 files changed, 12 insertions, 8 deletions
diff --git a/src/managers/eventLoop/EventLoopManager.cpp b/src/managers/eventLoop/EventLoopManager.cpp
index 338b75e3..6233a2d0 100644
--- a/src/managers/eventLoop/EventLoopManager.cpp
+++ b/src/managers/eventLoop/EventLoopManager.cpp
@@ -70,16 +70,20 @@ static int handleWaiterFD(int fd, uint32_t mask, void* data) {
void CEventLoopManager::onFdReadable(SReadableWaiter* waiter) {
auto it = std::ranges::find_if(m_readableWaiters, [waiter](const UP<SReadableWaiter>& w) { return waiter == w.get() && w->fd == waiter->fd && w->source == waiter->source; });
- if (waiter->source) {
- wl_event_source_remove(waiter->source);
- waiter->source = nullptr;
- }
+ // ???
+ if (it == m_readableWaiters.end())
+ return;
- if (waiter->fn)
- waiter->fn();
+ UP<SReadableWaiter> taken = std::move(*it);
+ m_readableWaiters.erase(it);
+
+ if (taken->source) {
+ wl_event_source_remove(taken->source);
+ taken->source = nullptr;
+ }
- if (it != m_readableWaiters.end())
- m_readableWaiters.erase(it);
+ if (taken->fn)
+ taken->fn();
}
void CEventLoopManager::enterLoop() {