diff options
author | Přemysl Janouch <p.janouch@gmail.com> | 2018-04-16 22:25:54 +0200 |
---|---|---|
committer | Přemysl Janouch <p.janouch@gmail.com> | 2018-04-16 22:26:18 +0200 |
commit | 5c380878d5b1c3dd677a3674b5bc0bcb4c6aef80 (patch) | |
tree | fb4bf3c46a6508482e6f3a4a2e8f89e4176ea5ec | |
parent | 3002fb32b0c7fac0b621b3eb7fb83edff0b27e0b (diff) | |
download | json-rpc-shell-5c380878d5b1c3dd677a3674b5bc0bcb4c6aef80.tar.gz json-rpc-shell-5c380878d5b1c3dd677a3674b5bc0bcb4c6aef80.tar.xz json-rpc-shell-5c380878d5b1c3dd677a3674b5bc0bcb4c6aef80.zip |
Better fix for EOF handling with WebSockets
Used to spin.
-rw-r--r-- | json-rpc-shell.c | 9 |
1 files changed, 3 insertions, 6 deletions
diff --git a/json-rpc-shell.c b/json-rpc-shell.c index 076e53f..716e74c 100644 --- a/json-rpc-shell.c +++ b/json-rpc-shell.c @@ -3238,16 +3238,13 @@ on_tty_readable (EV_P_ ev_io *handle, int revents) { (void) handle; - static bool readline_reentrancy_lock; - if (readline_reentrancy_lock) - return; - struct app_context *ctx = ev_userdata (loop); if (revents & EV_READ) { - readline_reentrancy_lock = true; + // rl_callback_read_char() is not reentrant, may happen on EOF + ev_io_stop (EV_DEFAULT_ &ctx->tty_watcher); ctx->input->vtable->on_tty_readable (ctx->input); - readline_reentrancy_lock = false; + ev_io_start (EV_DEFAULT_ &ctx->tty_watcher); } } |