summaryrefslogtreecommitdiff
path: root/src/managers/eventLoop/EventLoopManager.cpp
diff options
context:
space:
mode:
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() {