aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoroni-link <knil.ino@gmail.com>2016-05-27 19:03:22 +0200
committeroni-link <knil.ino@gmail.com>2016-05-28 11:25:13 +0200
commit1e593436d083f94d1e56f130ee498a9ff69736d7 (patch)
tree02e0e2941a14e5b281974cd78358821878021a37
parent677eae6b0f84ebbc165a73aee65262d71af312cc (diff)
downloadrneovim-1e593436d083f94d1e56f130ee498a9ff69736d7.tar.gz
rneovim-1e593436d083f94d1e56f130ee498a9ff69736d7.tar.bz2
rneovim-1e593436d083f94d1e56f130ee498a9ff69736d7.zip
process.c: Close events are processed too late
Compiling with macro -DEXITFREE opens a code path on which the event loop is used after it was teared down, because not all close events were processed yet.
-rw-r--r--src/nvim/event/process.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/src/nvim/event/process.c b/src/nvim/event/process.c
index 554a592d5c..3c8c08e235 100644
--- a/src/nvim/event/process.c
+++ b/src/nvim/event/process.c
@@ -126,8 +126,10 @@ void process_teardown(Loop *loop) FUNC_ATTR_NONNULL_ALL
}
}
- // Wait until all children exit
- LOOP_PROCESS_EVENTS_UNTIL(loop, loop->events, -1, kl_empty(loop->children));
+ // Wait until all children exit and all close events are processed.
+ LOOP_PROCESS_EVENTS_UNTIL(
+ loop, loop->events, -1,
+ kl_empty(loop->children) && queue_empty(loop->events));
pty_process_teardown(loop);
}