#include "atom/common/node_bindings_mac.h"
#include <errno.h>
+#include <sys/select.h>
#include <sys/sysctl.h>
#include <sys/time.h>
#include <sys/types.h>
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() {
}
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);
}