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);
}
}
}
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);
}
}
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();
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));
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_);