Scheduler: Implement new file descriptor event API
[senf.git] / Scheduler / Poller.ct
index 3948a22..41a4c08 100644 (file)
@@ -50,7 +50,13 @@ template <class Value>
 prefix_ void senf::scheduler::Poller<Value>::remove(int fd)
 {
     if (epoll_ctl(epollFd_, EPOLL_CTL_DEL, fd, 0) == -1)
-        if (errno != ENOENT && errno != EBADF)
+        if (errno != ENOENT && errno != EBADF && errno != EPERM)
+            // Calling remove() on a file descriptor which is not registered
+            // is no error, it shall be ignored:
+            // ENOENT: Not part of the poller but a valid (open) fd
+            // EBADF: The fd has been closed already. The kernel automatically removes such fds
+            //     from epoll structures
+            // EPERM: The fd does not support epoll and thus can never have been added
             SENF_THROW_SYSTEM_EXCEPTION("epoll_ctl()");
 }