Fix #822 - kqueue hang in suite 9.

Priorly we only checked exactly one state when an event was received.
This was incorrect. A state may have a next state, an action to take
after the first in the list of states has been taken. This change
acknowledges that and makes the code work with the state list vs just
the head of the list.
This commit is contained in:
llmII 2021-09-30 06:56:09 -05:00
parent 1bf22288ee
commit 6b3037106a
No known key found for this signature in database
GPG Key ID: E3AD2E259F58A9A0
1 changed files with 4 additions and 1 deletions

View File

@ -1709,7 +1709,8 @@ void janet_loop1_impl(int has_timeout, JanetTimestamp timeout) {
} else {
JanetStream *stream = p;
JanetListenerState *state = stream->state;
if (NULL != state) {
while (NULL != state) {
JanetListenerState *next_state = state->_next;
state->event = events + i;
JanetAsyncStatus statuses[4];
for (int i = 0; i < 4; i++)
@ -1730,6 +1731,8 @@ void janet_loop1_impl(int has_timeout, JanetTimestamp timeout) {
statuses[2] == JANET_ASYNC_STATUS_DONE ||
statuses[3] == JANET_ASYNC_STATUS_DONE)
janet_unlisten(state, 0);
state = next_state;
}
}
}