KQueueEventLoop(EventLoopGroup parent, Executor executor, int maxEvents, SelectStrategy strategy, RejectedExecutionHandler rejectedExecutionHandler) { super(parent, executor, false, DEFAULT_MAX_PENDING_TASKS, rejectedExecutionHandler); selectStrategy = ObjectUtil.checkNotNull(strategy, "strategy"); this.kqueueFd = Native.newKQueue(); if (maxEvents == 0) { allowGrowing = true; maxEvents = 4096; } else { allowGrowing = false; } changeList = new KQueueEventArray(maxEvents); eventList = new KQueueEventArray(maxEvents); int result = Native.keventAddUserEvent(kqueueFd.intValue(), KQUEUE_WAKE_UP_IDENT); if (result < 0) { cleanup(); throw new IllegalStateException("kevent failed to add user event with errno: " + (-result)); } }
private void wakeup() { Native.keventTriggerUserEvent(kqueueFd.intValue(), KQUEUE_WAKE_UP_IDENT); // Note that the result may return an error (e.g. errno = EBADF after the event loop has been shutdown). // So it is not very practical to assert the return value is always >= 0. }
private int kqueueWait(int timeoutSec, int timeoutNs) throws IOException { int numEvents = Native.keventWait(kqueueFd.intValue(), changeList, eventList, timeoutSec, timeoutNs); changeList.clear(); return numEvents; }
private static final int KQUEUE_EVENT_SIZE = Native.sizeofKEvent(); private static final int KQUEUE_IDENT_OFFSET = Native.offsetofKEventIdent(); private static final int KQUEUE_FILTER_OFFSET = Native.offsetofKEventFilter(); private static final int KQUEUE_FFLAGS_OFFSET = Native.offsetofKEventFFlags(); private static final int KQUEUE_FLAGS_OFFSET = Native.offsetofKEventFlags(); private static final int KQUEUE_DATA_OFFSET = Native.offsetofKeventData();
sizeofKEvent(); } catch (UnsatisfiedLinkError ignore) { loadNativeLibrary();
static FileDescriptor newKQueue() { return new FileDescriptor(kqueueCreate()); }
private static final int KQUEUE_EVENT_SIZE = Native.sizeofKEvent(); private static final int KQUEUE_IDENT_OFFSET = Native.offsetofKEventIdent(); private static final int KQUEUE_FILTER_OFFSET = Native.offsetofKEventFilter(); private static final int KQUEUE_FFLAGS_OFFSET = Native.offsetofKEventFFlags(); private static final int KQUEUE_FLAGS_OFFSET = Native.offsetofKEventFlags(); private static final int KQUEUE_DATA_OFFSET = Native.offsetofKeventData();
sizeofKEvent(); } catch (UnsatisfiedLinkError ignore) { loadNativeLibrary();
static FileDescriptor newKQueue() { return new FileDescriptor(kqueueCreate()); }
private static final int KQUEUE_EVENT_SIZE = Native.sizeofKEvent(); private static final int KQUEUE_IDENT_OFFSET = Native.offsetofKEventIdent(); private static final int KQUEUE_FILTER_OFFSET = Native.offsetofKEventFilter(); private static final int KQUEUE_FFLAGS_OFFSET = Native.offsetofKEventFFlags(); private static final int KQUEUE_FLAGS_OFFSET = Native.offsetofKEventFlags(); private static final int KQUEUE_DATA_OFFSET = Native.offsetofKeventData();
KQueueEventLoop(EventLoopGroup parent, Executor executor, int maxEvents, SelectStrategy strategy, RejectedExecutionHandler rejectedExecutionHandler) { super(parent, executor, false, DEFAULT_MAX_PENDING_TASKS, rejectedExecutionHandler); selectStrategy = ObjectUtil.checkNotNull(strategy, "strategy"); this.kqueueFd = Native.newKQueue(); if (maxEvents == 0) { allowGrowing = true; maxEvents = 4096; } else { allowGrowing = false; } changeList = new KQueueEventArray(maxEvents); eventList = new KQueueEventArray(maxEvents); jniChannelPointers = new NativeLongArray(4096); int result = Native.keventAddUserEvent(kqueueFd.intValue(), KQUEUE_WAKE_UP_IDENT); if (result < 0) { cleanup(); throw new IllegalStateException("kevent failed to add user event with errno: " + (-result)); } }
sizeofKEvent(); } catch (UnsatisfiedLinkError ignore) { loadNativeLibrary();
private int kqueueWait(int timeoutSec, int timeoutNs) throws IOException { deleteJniChannelPointers(); int numEvents = Native.keventWait(kqueueFd.intValue(), changeList, eventList, timeoutSec, timeoutNs); changeList.clear(); return numEvents; }
private void wakeup() { Native.keventTriggerUserEvent(kqueueFd.intValue(), KQUEUE_WAKE_UP_IDENT); // Note that the result may return an error (e.g. errno = EBADF after the event loop has been shutdown). // So it is not very practical to assert the return value is always >= 0. }
static FileDescriptor newKQueue() { return new FileDescriptor(kqueueCreate()); }
private static final int KQUEUE_EVENT_SIZE = Native.sizeofKEvent(); private static final int KQUEUE_IDENT_OFFSET = Native.offsetofKEventIdent(); private static final int KQUEUE_FILTER_OFFSET = Native.offsetofKEventFilter(); private static final int KQUEUE_FFLAGS_OFFSET = Native.offsetofKEventFFlags(); private static final int KQUEUE_FLAGS_OFFSET = Native.offsetofKEventFlags(); private static final int KQUEUE_DATA_OFFSET = Native.offsetofKeventData();
KQueueEventLoop(EventLoopGroup parent, Executor executor, int maxEvents, SelectStrategy strategy, RejectedExecutionHandler rejectedExecutionHandler) { super(parent, executor, false, DEFAULT_MAX_PENDING_TASKS, rejectedExecutionHandler); selectStrategy = ObjectUtil.checkNotNull(strategy, "strategy"); this.kqueueFd = Native.newKQueue(); if (maxEvents == 0) { allowGrowing = true; maxEvents = 4096; } else { allowGrowing = false; } changeList = new KQueueEventArray(maxEvents); eventList = new KQueueEventArray(maxEvents); int result = Native.keventAddUserEvent(kqueueFd.intValue(), KQUEUE_WAKE_UP_IDENT); if (result < 0) { cleanup(); throw new IllegalStateException("kevent failed to add user event with errno: " + (-result)); } }
sizeofKEvent(); } catch (UnsatisfiedLinkError ignore) { loadNativeLibrary();
static int keventWait(int kqueueFd, KQueueEventArray changeList, KQueueEventArray eventList, int tvSec, int tvNsec) throws IOException { int ready = keventWait(kqueueFd, changeList.memoryAddress(), changeList.size(), eventList.memoryAddress(), eventList.capacity(), tvSec, tvNsec); if (ready < 0) { throw newIOException("kevent", ready); } return ready; }
private void wakeup() { Native.keventTriggerUserEvent(kqueueFd.intValue(), KQUEUE_WAKE_UP_IDENT); // Note that the result may return an error (e.g. errno = EBADF after the event loop has been shutdown). // So it is not very practical to assert the return value is always >= 0. }