diff options
-rw-r--r-- | src/nvim/os/event.c | 8 | ||||
-rw-r--r-- | src/nvim/os/input.c | 9 | ||||
-rw-r--r-- | src/nvim/os/signal.c | 14 | ||||
-rw-r--r-- | src/nvim/os_unix.c | 4 |
4 files changed, 32 insertions, 3 deletions
diff --git a/src/nvim/os/event.c b/src/nvim/os/event.c index e09303e505..ecaec0b9ce 100644 --- a/src/nvim/os/event.c +++ b/src/nvim/os/event.c @@ -71,7 +71,15 @@ void event_teardown(void) channel_teardown(); job_teardown(); server_teardown(); + signal_teardown(); input_stop(); + input_teardown(); + do { + // This will loop forever if we leave any unclosed handles. Currently it is + // the most reliable way to use travis for verifying the no libuv-related + // bugs(which can be hard to track later) were introduced on a PR. + uv_run(uv_default_loop(), UV_RUN_DEFAULT); + } while (uv_loop_close(uv_default_loop())); } // Wait for some event diff --git a/src/nvim/os/input.c b/src/nvim/os/input.c index d948a48b64..3ebfb3f12b 100644 --- a/src/nvim/os/input.c +++ b/src/nvim/os/input.c @@ -52,6 +52,15 @@ void input_init(void) rstream_set_file(read_stream, read_cmd_fd); } +void input_teardown(void) +{ + if (embedded_mode) { + return; + } + + rstream_free(read_stream); +} + // Listen for input void input_start(void) { diff --git a/src/nvim/os/signal.c b/src/nvim/os/signal.c index d913df4cbf..cf8ba85ed5 100644 --- a/src/nvim/os/signal.c +++ b/src/nvim/os/signal.c @@ -55,6 +55,20 @@ void signal_init(void) #endif } +void signal_teardown(void) +{ + signal_stop(); + uv_close((uv_handle_t *)&sint, NULL); + uv_close((uv_handle_t *)&spipe, NULL); + uv_close((uv_handle_t *)&shup, NULL); + uv_close((uv_handle_t *)&squit, NULL); + uv_close((uv_handle_t *)&sterm, NULL); + uv_close((uv_handle_t *)&swinch, NULL); +#ifdef SIGPWR + uv_close((uv_handle_t *)&spwr, NULL); +#endif +} + void signal_stop(void) { uv_signal_stop(&sint); diff --git a/src/nvim/os_unix.c b/src/nvim/os_unix.c index 0ad15bc433..8ab61045dc 100644 --- a/src/nvim/os_unix.c +++ b/src/nvim/os_unix.c @@ -522,8 +522,6 @@ void mch_exit(int r) { exiting = TRUE; - event_teardown(); - { settmode(TMODE_COOK); mch_restore_title(3); /* restore xterm title and icon name */ @@ -559,7 +557,7 @@ void mch_exit(int r) mac_conv_cleanup(); #endif - + event_teardown(); #ifdef EXITFREE free_all_mem(); |