]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[#4141] handle EOF on readReady for kqueue
authorRazvan Becheriu <razvan@isc.org>
Wed, 19 Nov 2025 12:25:20 +0000 (14:25 +0200)
committerRazvan Becheriu <razvan@isc.org>
Fri, 21 Nov 2025 13:02:43 +0000 (13:02 +0000)
src/lib/util/kqueue_event_handler.cc
src/lib/util/tests/fd_event_handler_unittests.h

index 8ede3492f8d096f2ea0f643a7f8a0ea95d1107ff..80a196118f9085948b5b438c53c034825faa2540 100644 (file)
@@ -105,7 +105,7 @@ int KQueueEventHandler::waitEvent(uint32_t timeout_sec, uint32_t timeout_usec /*
 bool KQueueEventHandler::readReady(int fd) {
     auto range = map_.equal_range(fd);
     for (auto it = range.first; it != range.second; ++it) {
-        if (it->second->filter == EVFILT_READ) {
+        if ((it->second->flags & EV_EOF) || (it->second->filter == EVFILT_READ)) {
             return (true);
         }
     }
@@ -118,7 +118,7 @@ bool KQueueEventHandler::hasError(int fd) {
     }
     auto range = map_.equal_range(fd);
     for (auto it = range.first; it != range.second; ++it) {
-        if ((it->second->flags & EV_EOF) || (it->second->filter == EV_ERROR)) {
+        if (it->second->filter == EV_ERROR) {
             return (true);
         }
     }
index 047846e1f3c143031ce0a5adafc72f7de4dbfaf4..9de3d59ad554488b585a341082156724bc42e2de 100644 (file)
@@ -213,11 +213,7 @@ TEST_F(FDEventHandlerTest, badFD) {
         EXPECT_EQ(0, errno);
 
         EXPECT_TRUE(handler_->readReady(pipe_fd_[0]));
-        if (handler_->type() == FDEventHandler::TYPE_KQUEUE) {
-            EXPECT_TRUE(handler_->hasError(pipe_fd_[0]));
-        } else {
-            EXPECT_FALSE(handler_->hasError(pipe_fd_[0]));
-        }
+        EXPECT_FALSE(handler_->hasError(pipe_fd_[0]));
 
         tr.join();
 
@@ -374,13 +370,6 @@ TEST_F(FDEventHandlerTest, badFD) {
 
             EXPECT_FALSE(handler_->readReady(pipe_fd_[1]));
             EXPECT_TRUE(handler_->hasError(pipe_fd_[1]));
-        } else if (handler_->type() == FDEventHandler::TYPE_KQUEUE) {
-            EXPECT_EQ(1, handler_->waitEvent(1, 0));
-
-            EXPECT_EQ(0, errno);
-
-            EXPECT_TRUE(handler_->readReady(pipe_fd_[1]));
-            EXPECT_TRUE(handler_->hasError(pipe_fd_[1]));
         } else {
             EXPECT_EQ(1, handler_->waitEvent(1, 0));
 
@@ -402,11 +391,7 @@ TEST_F(FDEventHandlerTest, hup) {
     close(pipe_fd_[1]);
     EXPECT_EQ(1, handler_->waitEvent(0, 1000));
     EXPECT_TRUE(handler_->readReady(pipe_fd_[0]));
-    if (handler_->type() == FDEventHandler::TYPE_KQUEUE) {
-        EXPECT_TRUE(handler_->hasError(pipe_fd_[0]));
-    } else {
-        EXPECT_FALSE(handler_->hasError(pipe_fd_[0]));
-    }
+    EXPECT_FALSE(handler_->hasError(pipe_fd_[0]));
 
     close(pipe_fd_[0]);
     pipe(pipe_fd_);