diff options
author | Justin M. Keyes <justinkz@gmail.com> | 2015-05-25 14:13:18 -0400 |
---|---|---|
committer | Justin M. Keyes <justinkz@gmail.com> | 2015-05-27 09:34:04 -0400 |
commit | 4219b69145f13e95eadb5a666cb02b482bdd395b (patch) | |
tree | 5684a6cb585e60372d41144a4ae13eee8aaab710 /src/nvim/os/input.c | |
parent | 8a782f1699e2a59a3f3e91f6d7c35a3312b82b41 (diff) | |
download | rneovim-4219b69145f13e95eadb5a666cb02b482bdd395b.tar.gz rneovim-4219b69145f13e95eadb5a666cb02b482bdd395b.tar.bz2 rneovim-4219b69145f13e95eadb5a666cb02b482bdd395b.zip |
input: stream_set_blocking(): libuv impl
- Create a private libuv loop instead of re-using uv_default_loop(), to
avoid conflict[1] with existing watcher(s) on the fd.
- Expose the global "input" fd as a getter instead of a mutable global.
[1] .deps/build/src/libuv/src/unix/core.c:833:
uv__io_stop: Assertion `loop->watchers[w->fd] == w' failed.
Diffstat (limited to 'src/nvim/os/input.c')
-rw-r--r-- | src/nvim/os/input.c | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/src/nvim/os/input.c b/src/nvim/os/input.c index 5dcaee8304..f89ca4af95 100644 --- a/src/nvim/os/input.c +++ b/src/nvim/os/input.c @@ -35,6 +35,7 @@ typedef enum { static RStream *read_stream = NULL; static RBuffer *read_buffer = NULL, *input_buffer = NULL; static bool input_eof = false; +static int global_fd = 0; #ifdef INCLUDE_GENERATED_DECLARATIONS # include "os/input.c.generated.h" @@ -47,12 +48,19 @@ void input_init(void) input_buffer = rbuffer_new(INPUT_BUFFER_SIZE + MAX_KEY_CODE_LEN); } +/// Gets the file from which input was gathered at startup. +int input_global_fd(void) +{ + return global_fd; +} + void input_start_stdin(int fd) { if (read_stream) { return; } + global_fd = fd; read_buffer = rbuffer_new(READ_BUFFER_SIZE); read_stream = rstream_new(read_cb, read_buffer, NULL); rstream_set_file(read_stream, fd); @@ -62,14 +70,9 @@ void input_start_stdin(int fd) void input_stop_stdin(void) { if (!read_stream) { - // In some cases (i.e. "nvim && read") where we do not explicitly play with - // std{in,out,err}, some other module/library nevertheless sets the stream - // to non-blocking; we still must "fix" the stream (#2598) in those cases. - stream_set_blocking(global_input_fd, true); // normalize stream (#2598) return; } - rstream_set_blocking(read_stream, true); // normalize stream (#2598) rstream_stop(read_stream); rstream_free(read_stream); read_stream = NULL; |