aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/nvim/os/event.c8
-rw-r--r--src/nvim/os/input.c9
-rw-r--r--src/nvim/os/signal.c14
-rw-r--r--src/nvim/os_unix.c4
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();