diff options
author | Daniel Hahler <github@thequod.de> | 2017-05-04 16:38:25 +0200 |
---|---|---|
committer | Justin M. Keyes <justinkz@gmail.com> | 2017-05-04 16:38:25 +0200 |
commit | 34c3f03013375817d3d089e685793290eded553a (patch) | |
tree | 7f5ec491aed2d27c88897eb1e65671728d95dcc2 /src | |
parent | 052c2d0a0f68a210038123608c00d4e0ff360161 (diff) | |
download | rneovim-34c3f03013375817d3d089e685793290eded553a.tar.gz rneovim-34c3f03013375817d3d089e685793290eded553a.tar.bz2 rneovim-34c3f03013375817d3d089e685793290eded553a.zip |
event/process.c: send SIGTERM directly (#6644)
Send SIGTERM to processes directly, instead of waiting for ~1s.
- removes TERM_TIMEOUT
- changes KILL_TIMEOUT to milliseconds
- removes Process.term_sent
Diffstat (limited to 'src')
-rw-r--r-- | src/nvim/event/process.c | 22 | ||||
-rw-r--r-- | src/nvim/event/process.h | 3 |
2 files changed, 11 insertions, 14 deletions
diff --git a/src/nvim/event/process.c b/src/nvim/event/process.c index ffda10a494..6aab7d903c 100644 --- a/src/nvim/event/process.c +++ b/src/nvim/event/process.c @@ -20,9 +20,9 @@ # include "event/process.c.generated.h" #endif -// Time (ns) for a process to exit cleanly before we send TERM/KILL. -#define TERM_TIMEOUT 1000000000 -#define KILL_TIMEOUT (TERM_TIMEOUT * 2) +// Time for a process to exit cleanly before we send KILL. +#define KILL_TIMEOUT_MS 2000 +#define KILL_TIMEOUT_NS (KILL_TIMEOUT_MS * 1000000) #define CLOSE_PROC_STREAM(proc, stream) \ do { \ @@ -121,8 +121,6 @@ void process_teardown(Loop *loop) FUNC_ATTR_NONNULL_ALL // Close handles to process without killing it. CREATE_EVENT(loop->events, process_close_handles, 1, proc); } else { - uv_kill(proc->pid, SIGTERM); - proc->term_sent = true; process_stop(proc); } } @@ -244,12 +242,16 @@ void process_stop(Process *proc) FUNC_ATTR_NONNULL_ALL abort(); } + ILOG("Sending SIGTERM to pid %d", proc->pid); + uv_kill(proc->pid, SIGTERM); + Loop *loop = proc->loop; if (!loop->children_stop_requests++) { // When there's at least one stop request pending, start a timer that - // will periodically check if a signal should be send to a to the job + // will periodically check if a signal should be send to the job. DLOG("Starting job kill timer"); - uv_timer_start(&loop->children_kill_timer, children_kill_cb, 100, 100); + uv_timer_start(&loop->children_kill_timer, children_kill_cb, + KILL_TIMEOUT_MS, 100); } } @@ -267,11 +269,7 @@ static void children_kill_cb(uv_timer_t *handle) } uint64_t elapsed = now - proc->stopped_time; - if (!proc->term_sent && elapsed >= TERM_TIMEOUT) { - ILOG("Sending SIGTERM to pid %d", proc->pid); - uv_kill(proc->pid, SIGTERM); - proc->term_sent = true; - } else if (elapsed >= KILL_TIMEOUT) { + if (elapsed >= KILL_TIMEOUT_NS) { ILOG("Sending SIGKILL to pid %d", proc->pid); uv_kill(proc->pid, SIGKILL); } diff --git a/src/nvim/event/process.h b/src/nvim/event/process.h index 26d70a5e6d..5c00e8e7ec 100644 --- a/src/nvim/event/process.h +++ b/src/nvim/event/process.h @@ -26,7 +26,7 @@ struct process { Stream *in, *out, *err; process_exit_cb cb; internal_process_cb internal_exit_cb, internal_close_cb; - bool closed, term_sent, detach; + bool closed, detach; MultiQueue *events; }; @@ -48,7 +48,6 @@ static inline Process process_init(Loop *loop, ProcessType type, void *data) .err = NULL, .cb = NULL, .closed = false, - .term_sent = false, .internal_close_cb = NULL, .internal_exit_cb = NULL, .detach = false |