]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[#4141] reverted
authorRazvan Becheriu <razvan@isc.org>
Fri, 14 Nov 2025 09:41:00 +0000 (11:41 +0200)
committerRazvan Becheriu <razvan@isc.org>
Fri, 21 Nov 2025 13:02:43 +0000 (13:02 +0000)
config-report.sh.in
meson.build
src/lib/log/interprocess/tests/interprocess_sync_file_unittest.cc
src/lib/util/epoll_event_handler.cc
src/lib/util/kqueue_event_handler.cc
src/lib/util/poll_event_handler.cc
src/lib/util/tests/fd_event_handler_unittests.h
src/lib/util/tests/watch_socket_unittests.cc

index 12e76c3b98bb07ec0287e4a5c8a1bc741069e558..762540ea2f2cff69c62f7b1eaa24313747581bd6 100755 (executable)
@@ -55,6 +55,40 @@ Bison:                @BISON@
 
 HERE_DOCUMENT
 
+add_to_report <<HERE_DOCUMENT
+IO Event Handling:
+  select            yes
+HERE_DOCUMENT
+
+if test '@HAVE_EPOLL@' != 'no'; then
+add_to_report <<HERE_DOCUMENT
+  epoll             yes
+HERE_DOCUMENT
+
+else
+
+add_to_report <<HERE_DOCUMENT
+  epoll             no
+HERE_DOCUMENT
+fi
+
+if test '@HAVE_KQUEUE@' != 'no'; then
+add_to_report <<HERE_DOCUMENT
+  kqueue            yes
+HERE_DOCUMENT
+
+else
+
+add_to_report <<HERE_DOCUMENT
+  kqueue            no
+HERE_DOCUMENT
+fi
+
+add_to_report <<HERE_DOCUMENT
+  poll              yes
+
+HERE_DOCUMENT
+
 if test '@HAVE_MYSQL@' != 'no'; then
 add_to_report <<HERE_DOCUMENT
 MySQL:                @MYSQL_VERSION@
index 8f95663c01e23f314a7ed406c182a4e1212c140f..4b11e1737dbccc5c15511000671cbf9c405a9f93 100644 (file)
@@ -853,6 +853,16 @@ if BISON.found()
 else
     report_conf_data.set('BISON', 'no')
 endif
+if HAVE_EPOLL
+    report_conf_data.set('HAVE_EPOLL', 'yes')
+else
+    report_conf_data.set('HAVE_EPOLL', 'no')
+endif
+if HAVE_KQUEUE
+    report_conf_data.set('HAVE_KQUEUE', 'yes')
+else
+    report_conf_data.set('HAVE_KQUEUE', 'no')
+endif
 if MYSQL_DEP.found()
     report_conf_data.set('HAVE_MYSQL', 'yes')
     version = MYSQL_DEP.version()
index b7babc4e23ae8fb5165960c99a2b07f4a125b7df..10d4a2332da4d2cbcee449335b9159107f4dbea9 100644 (file)
@@ -67,8 +67,6 @@ TEST(InterprocessSyncFileTest, TestLock) {
             ssize_t bytes_written = write(fds[1], &locked, sizeof(locked));
             EXPECT_EQ(sizeof(locked), bytes_written);
 
-            sleep(1);
-
             close(fds[1]);
             exit(0);
         } else {
@@ -137,8 +135,6 @@ TEST(InterprocessSyncFileTest, TestMultipleFilesForked) {
             ssize_t bytes_written = write(fds[1], &locked, sizeof(locked));
             EXPECT_EQ(sizeof(locked), bytes_written);
 
-            sleep(1);
-
             close(fds[1]);
             exit(0);
         } else {
index 985eea7e3f7ab8e224917cc75214ca2e40851a1a..9b9ab7eb3c566e168c223d4541a66c03748afb83 100644 (file)
@@ -83,9 +83,6 @@ int EPollEventHandler::waitEvent(uint32_t timeout_sec, uint32_t timeout_usec /*
         result = epoll_wait(epollfd_, used_data_.data(), used_data_.size(), timeout);
         for (int i = 0; i < result; ++i) {
              map_[used_data_[i].data.fd] = &used_data_[i];
-             if (used_data_[i].events & (EPOLLRDHUP | EPOLLERR | EPOLLHUP)) {
-                 errors_.insert(used_data_[i].data.fd);
-             }
         }
     }
     for (auto data : data_) {
index 2fa48daa37e15094e6913f757c4531ebefdecb1c..0b38ee3025d569f0752c46d6bcae7de7f8dfc8c2 100644 (file)
@@ -84,9 +84,6 @@ int KQueueEventHandler::waitEvent(uint32_t timeout_sec, uint32_t timeout_usec /*
         result = kevent(kqueuefd_, 0, 0, used_data_.data(), used_data_.size(), select_timeout_p);
         for (int i = 0; i < result; ++i) {
             map_.emplace(used_data_[i].ident, &used_data_[i]);
-             if (used_data_[i].flags & EV_EOF || used_data_[i].filter == EV_ERROR) {
-                 errors_.insert(used_data_[i].ident);
-             }
         }
     }
     for (auto data : data_) {
index 41c320642905dbbb984453acc138733c54fc2299..fef1f2b6bbac8345896431420d53d89ac2001e96 100644 (file)
@@ -45,13 +45,7 @@ int PollEventHandler::waitEvent(uint32_t timeout_sec, uint32_t timeout_usec /* =
     for (size_t i = 0; i < data_.size(); ++i) {
         map_[data_[i].fd] = &data_[i];
     }
-    int result = poll(data_.data(), data_.size(), timeout);
-    for (auto data : data_) {
-        if (data.revents & (POLLHUP | POLLERR | POLLNVAL)) {
-            return (-1);
-        }
-    }
-    return (result);
+    return (poll(data_.data(), data_.size(), timeout));
 }
 
 bool PollEventHandler::readReady(int fd) {
index 1b4d96fceba3865730f2038a8755b73fb7d84613..bc33890dacbfc511128b16696a55195bd866ff52 100644 (file)
@@ -173,7 +173,7 @@ TEST_F(FDEventHandlerTest, badFD) {
         EXPECT_TRUE(handler_->readReady(fd));
         EXPECT_EQ(EBADF, errno);
     } else if (handler_->type() == FDEventHandler::TYPE_POLL) {
-        EXPECT_EQ(-1, handler_->waitEvent(0, 1000));
+        EXPECT_EQ(1, handler_->waitEvent(0, 1000));
         EXPECT_FALSE(handler_->readReady(fd));
         EXPECT_EQ(0, errno);
     } else {
index 97af67217e0b288881bdb9a0472d96c03da5d8d0..685b4ca2e5aa7dcef39a747c2b1b34675ef6f637 100644 (file)
@@ -119,6 +119,12 @@ TEST(WatchSocketTest, closedWhileReady) {
     EXPECT_EQ(1, selectCheck(select_fd));
     EXPECT_TRUE(watch->isReady());
 
+    // The epoll event handler must be created before closing the socket.
+    // It creates an internal pipe which will match the closed fd and the
+    // check for bad file descriptor will fail.
+    FDEventHandlerPtr handler = FDEventHandlerFactory::factoryFDEventHandler();
+    bool use_select = FDEventHandlerFactory::factoryFDEventHandler()->type() != FDEventHandler::TYPE_POLL;
+
     // Interfere by closing the fd.
     ASSERT_EQ(0, close(select_fd));
 
@@ -132,7 +138,12 @@ TEST(WatchSocketTest, closedWhileReady) {
     ASSERT_NO_THROW(watch->clearReady());
 
     // Verify the select_fd fails as socket is invalid/closed.
-    ASSERT_EQ(-1, selectCheck(select_fd));
+    if (use_select) {
+        ASSERT_EQ(-1, selectCheck(select_fd));
+    } else {
+        handler->add(select_fd);
+        EXPECT_EQ(1, handler->waitEvent(0, 0));
+    }
 
     // Verify that subsequent attempts to mark it will fail.
     ASSERT_THROW(watch->markReady(), WatchSocketError);
@@ -191,6 +202,12 @@ TEST(WatchSocketTest, badReadOnClear) {
     EXPECT_TRUE(watch->isReady());
     EXPECT_EQ(1, selectCheck(select_fd));
 
+    // The epoll event handler must be created before closing the socket.
+    // It creates an internal pipe which will match the closed fd and the
+    // check for bad file descriptor will fail.
+    FDEventHandlerPtr handler = FDEventHandlerFactory::factoryFDEventHandler();
+    bool use_select = FDEventHandlerFactory::factoryFDEventHandler()->type() != FDEventHandler::TYPE_POLL;
+
     // Interfere by reading the fd. This should empty the read pipe.
     uint32_t buf = 0;
     ASSERT_EQ((read (select_fd, &buf, 1)), 1);
@@ -203,7 +220,12 @@ TEST(WatchSocketTest, badReadOnClear) {
 
     // Verify the select_fd does not evaluate to ready.
     EXPECT_FALSE(watch->isReady());
-    EXPECT_EQ(-1, selectCheck(select_fd));
+    if (use_select) {
+        EXPECT_EQ(-1, selectCheck(select_fd));
+    } else {
+        handler->add(select_fd);
+        EXPECT_EQ(1, handler->waitEvent(0, 0));
+    }
 
     // Verify that getSelectFd() returns INVALID.
     ASSERT_EQ(WatchSocket::SOCKET_NOT_VALID, watch->getSelectFd());