eventLoop: fixup event source callbacks

This commit is contained in:
Vaxry 2025-05-19 01:27:30 +02:00
parent d9c8a37811
commit eb3b38d40b
No known key found for this signature in database
GPG Key ID: 665806380871D640

View File

@ -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;
UP<SReadableWaiter> taken = std::move(*it);
m_readableWaiters.erase(it);
if (taken->source) {
wl_event_source_remove(taken->source);
taken->source = nullptr;
}
if (waiter->fn)
waiter->fn();
if (it != m_readableWaiters.end())
m_readableWaiters.erase(it);
if (taken->fn)
taken->fn();
}
void CEventLoopManager::enterLoop() {