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.
This commit is contained in:
llmII 2021-09-03 19:44:27 -05:00
parent 8f0641f36c
commit c133443eb7
No known key found for this signature in database
GPG Key ID: E3AD2E259F58A9A0
1 changed files with 16 additions and 1 deletions

View File

@ -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;
}