From b08ee601c7d2eb1dab288117e6c323259abbaab3 Mon Sep 17 00:00:00 2001 From: Livox-SDK Date: Tue, 20 Apr 2021 12:18:48 +0800 Subject: [PATCH] fix:descriptor remove failed on MacOS --- .../base/multiple_io/multiple_io_kqueue.cpp | 27 +++++++++++-------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/sdk_core/src/base/multiple_io/multiple_io_kqueue.cpp b/sdk_core/src/base/multiple_io/multiple_io_kqueue.cpp index 67674d5..b61ad7a 100644 --- a/sdk_core/src/base/multiple_io/multiple_io_kqueue.cpp +++ b/sdk_core/src/base/multiple_io/multiple_io_kqueue.cpp @@ -83,22 +83,27 @@ bool MultipleIOKqueue::PollSetAdd(PollFd poll_fd) { bool MultipleIOKqueue::PollSetRemove(PollFd poll_fd) { int fd = poll_fd.fd; + bool result = true; if (descriptors_.find(fd) != descriptors_.end()) { - if (descriptors_[fd].event & READBLE_EVENT) { - EV_SET(&kevent_, fd, EVFILT_READ, EV_DELETE, 0, 0, NULL); - if (kevent(kqueue_fd_, &kevent_, 1, nullptr, 0, nullptr) == -1) { - return false; + do { + if (descriptors_[fd].event & READBLE_EVENT) { + EV_SET(&kevent_, fd, EVFILT_READ, EV_DELETE, 0, 0, NULL); + if (kevent(kqueue_fd_, &kevent_, 1, nullptr, 0, nullptr) == -1) { + result = false; + break; + } } - } - if (descriptors_[fd].event & WRITABLE_EVENT) { - EV_SET(&kevent_, fd, EVFILT_WRITE, EV_DELETE, 0, 0, NULL); - if (kevent(kqueue_fd_, &kevent_, 1, nullptr, 0, nullptr) == -1) { - return false; + if (descriptors_[fd].event & WRITABLE_EVENT) { + EV_SET(&kevent_, fd, EVFILT_WRITE, EV_DELETE, 0, 0, NULL); + if (kevent(kqueue_fd_, &kevent_, 1, nullptr, 0, nullptr) == -1) { + result = false; + break; + } } - } + } while(0); descriptors_.erase(fd); } - return true; + return result; } void MultipleIOKqueue::Poll(int time_out) {