From 3c6707b05a48cf053747fdb585ef5230a04575d8 Mon Sep 17 00:00:00 2001
From: g0dil <g0dil@wiback.org>
Date: Thu, 15 Nov 2007 13:27:15 +0000
Subject: [PATCH] Scheduler: BUGFIX: check fdErase_ when (re-)adding a
 filedescriptor

---
 Scheduler/Scheduler.cc | 11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/Scheduler/Scheduler.cc b/Scheduler/Scheduler.cc
index 41708511e..1afc018e9 100644
--- a/Scheduler/Scheduler.cc
+++ b/Scheduler/Scheduler.cc
@@ -104,12 +104,20 @@ prefix_ void senf::Scheduler::unregisterSignal(unsigned signal)
 
 prefix_ void senf::Scheduler::do_add(int fd, FdCallback const & cb, int eventMask)
 {
+    if (eventMask == 0)
+        return;
+
     FdTable::iterator i (fdTable_.find(fd));
     int action (EPOLL_CTL_MOD);
     if (i == fdTable_.end()) {
         action = EPOLL_CTL_ADD;
         i = fdTable_.insert(std::make_pair(fd, EventSpec())).first;
     }
+    if (i->second.epollMask() == 0) {
+        action = EPOLL_CTL_ADD;
+        fdErase_.erase( std::remove(fdErase_.begin(), fdErase_.end(), unsigned(fd)),
+                        fdErase_.end() );
+    }
 
     if (eventMask & EV_READ)  i->second.cb_read = cb;
     if (eventMask & EV_PRIO)  i->second.cb_prio = cb;
@@ -133,6 +141,9 @@ prefix_ void senf::Scheduler::do_add(int fd, FdCallback const & cb, int eventMas
 
 prefix_ void senf::Scheduler::do_remove(int fd, int eventMask)
 {
+    if (eventMask == 0)
+        return;
+
     FdTable::iterator i (fdTable_.find(fd));
     if (i == fdTable_.end())
         return;
-- 
GitLab