eventLoop: remove failed readable waiters
This commit is contained in:
parent
70c5fe5cd8
commit
686eda9d48
2 changed files with 12 additions and 0 deletions
|
|
@ -58,6 +58,7 @@ static int configWatcherWrite(int fd, uint32_t mask, void* data) {
|
||||||
static int handleWaiterFD(int fd, uint32_t mask, void* data) {
|
static int handleWaiterFD(int fd, uint32_t mask, void* data) {
|
||||||
if (mask & (WL_EVENT_HANGUP | WL_EVENT_ERROR)) {
|
if (mask & (WL_EVENT_HANGUP | WL_EVENT_ERROR)) {
|
||||||
Log::logger->log(Log::ERR, "handleWaiterFD: readable waiter error");
|
Log::logger->log(Log::ERR, "handleWaiterFD: readable waiter error");
|
||||||
|
g_pEventLoopManager->onFdReadableFail(sc<CEventLoopManager::SReadableWaiter*>(data));
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -81,6 +82,16 @@ void CEventLoopManager::onFdReadable(SReadableWaiter* waiter) {
|
||||||
taken->fn();
|
taken->fn();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CEventLoopManager::onFdReadableFail(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 (it == m_readableWaiters.end())
|
||||||
|
return;
|
||||||
|
|
||||||
|
m_readableWaiters.erase(it);
|
||||||
|
}
|
||||||
|
|
||||||
void CEventLoopManager::enterLoop() {
|
void CEventLoopManager::enterLoop() {
|
||||||
m_wayland.eventSource = wl_event_loop_add_fd(m_wayland.loop, m_timers.timerfd.get(), WL_EVENT_READABLE, timerWrite, nullptr);
|
m_wayland.eventSource = wl_event_loop_add_fd(m_wayland.loop, m_timers.timerfd.get(), WL_EVENT_READABLE, timerWrite, nullptr);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -65,6 +65,7 @@ class CEventLoopManager {
|
||||||
// takes ownership of fd
|
// takes ownership of fd
|
||||||
void doOnReadable(Hyprutils::OS::CFileDescriptor fd, std::function<void()>&& fn);
|
void doOnReadable(Hyprutils::OS::CFileDescriptor fd, std::function<void()>&& fn);
|
||||||
void onFdReadable(SReadableWaiter* waiter);
|
void onFdReadable(SReadableWaiter* waiter);
|
||||||
|
void onFdReadableFail(SReadableWaiter* waiter);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// Manages the event sources after AQ pollFDs change.
|
// Manages the event sources after AQ pollFDs change.
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue