diff --git a/atom/common/node_bindings_mac.cc b/atom/common/node_bindings_mac.cc index 877497d5a1e2..9e61d27f496b 100644 --- a/atom/common/node_bindings_mac.cc +++ b/atom/common/node_bindings_mac.cc @@ -5,6 +5,7 @@ #include "atom/common/node_bindings_mac.h" #include +#include #include #include #include @@ -14,13 +15,7 @@ namespace atom { NodeBindingsMac::NodeBindingsMac(bool is_browser) - : NodeBindings(is_browser), - kqueue_(kqueue()) { - // Add uv's backend fd to kqueue. - struct kevent ev; - EV_SET(&ev, uv_backend_fd(uv_loop_), EVFILT_READ, EV_ADD | EV_ENABLE, - 0, 0, 0); - kevent(kqueue_, &ev, 1, NULL, 0, NULL); + : NodeBindings(is_browser) { } NodeBindingsMac::~NodeBindingsMac() { @@ -44,19 +39,22 @@ void NodeBindingsMac::OnWatcherQueueChanged(uv_loop_t* loop) { } void NodeBindingsMac::PollEvents() { - struct timespec spec; + struct timeval tv; int timeout = uv_backend_timeout(uv_loop_); if (timeout != -1) { - spec.tv_sec = timeout / 1000; - spec.tv_nsec = (timeout % 1000) * 1000000; + tv.tv_sec = timeout / 1000; + tv.tv_usec = (timeout % 1000) * 1000; } + fd_set readset; + int fd = uv_backend_fd(uv_loop_); + FD_ZERO(&readset); + FD_SET(fd, &readset); + // Wait for new libuv events. int r; do { - struct kevent ev; - r = ::kevent(kqueue_, NULL, 0, &ev, 1, - timeout == -1 ? NULL : &spec); + r = select(fd + 1, &readset, NULL, NULL, timeout == -1 ? NULL : &tv); } while (r == -1 && errno == EINTR); } diff --git a/atom/common/node_bindings_mac.h b/atom/common/node_bindings_mac.h index 03152ada3ea6..96c79ec6f0df 100644 --- a/atom/common/node_bindings_mac.h +++ b/atom/common/node_bindings_mac.h @@ -23,9 +23,6 @@ class NodeBindingsMac : public NodeBindings { void PollEvents() override; - // Kqueue to poll for uv's backend fd. - int kqueue_; - DISALLOW_COPY_AND_ASSIGN(NodeBindingsMac); };