From c133443eb73070fedb38ec02446f77329857a07e Mon Sep 17 00:00:00 2001 From: llmII Date: Fri, 3 Sep 2021 19:44:27 -0500 Subject: [PATCH] Fix incorrect use of EV_SET on pipes. It would seem adding a read and a write event filter on a pipe which is unidirectional might just be a bad idea. --- src/core/ev.c | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/core/ev.c b/src/core/ev.c index 51591758..9866169a 100644 --- a/src/core/ev.c +++ b/src/core/ev.c @@ -1615,10 +1615,25 @@ JanetListenerState *janet_listen(JanetStream *stream, JanetListener behavior, in struct kevent kev[2]; /* NOTE: NetBSD uses a different type for udata, might not work there or * may warn! */ + /* Disabled, may be incorrect EV_SET(&kev[0], stream->handle, EVFILT_READ, EV_ADD | (state->stream->_mask & JANET_ASYNC_LISTEN_READ ? EV_ENABLE : EV_DISABLE), 0, 0, stream); EV_SET(&kev[1], stream->handle, EVFILT_WRITE, EV_ADD | (state->stream->_mask & JANET_ASYNC_LISTEN_WRITE ? EV_ENABLE : EV_DISABLE), 0, 0, stream); + */ + + int length = 0; + if (state->stream->_mask & JANET_ASYNC_LISTEN_READ) { + EV_SET(&kev[length], stream->handle, EVFILT_READ, EV_ADD | EV_ENABLE, 0, 0, stream); + length++; + } + if (state->stream->_mask & JANET_ASYNC_LISTEN_WRITE) { + EV_SET(&kev[length], stream->handle, EVFILT_WRITE, EV_ADD | EV_ENABLE, 0, 0, stream); + length++; + } + + if (length > 0) { + add_kqueue_events(kev, length); + } - add_kqueue_events(kev, 2); return state; }