diff options
| author | Vaxry <vaxry@vaxry.net> | 2025-05-19 01:27:30 +0200 |
|---|---|---|
| committer | Vaxry <vaxry@vaxry.net> | 2025-05-19 01:27:30 +0200 |
| commit | eb3b38d40baca5c05ddbc1507b3d3f02a0ccb164 (patch) | |
| tree | 99c6f91fe9ca44bda4c1072ec907f856fe3ea661 /src/managers/eventLoop | |
| parent | d9c8a378118d954932eb9906b07150ccd9a3a434 (diff) | |
eventLoop: fixup event source callbacks
Diffstat (limited to 'src/managers/eventLoop')
| -rw-r--r-- | src/managers/eventLoop/EventLoopManager.cpp | 20 |
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() { |
