diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/nvim/os/event.c | 13 |
1 files changed, 4 insertions, 9 deletions
diff --git a/src/nvim/os/event.c b/src/nvim/os/event.c index b0bd7ca55a..4c3a4581c3 100644 --- a/src/nvim/os/event.c +++ b/src/nvim/os/event.c @@ -69,24 +69,19 @@ void event_teardown(void) process_events_from(immediate_events); process_events_from(deferred_events); - // reset the stop_flag to ensure `uv_run` below won't exit early. This hack - // is required because the `process_events_from` above may call `event_push` - // which will set the stop_flag to 1(uv_stop) - uv_default_loop()->stop_flag = 0; input_stop(); channel_teardown(); job_teardown(); server_teardown(); signal_teardown(); terminal_teardown(); + // this last `uv_run` will return after all handles are stopped, it will // also take care of finishing any uv_close calls made by other *_teardown // functions. - uv_run(uv_default_loop(), UV_RUN_DEFAULT); - // abort that if we left unclosed handles - if (uv_loop_close(uv_default_loop())) { - abort(); - } + do { + uv_run(uv_default_loop(), UV_RUN_DEFAULT); + } while (uv_loop_close(uv_default_loop())); } // Wait for some event |