aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDaniel Hahler <github@thequod.de>2017-05-04 16:38:25 +0200
committerJustin M. Keyes <justinkz@gmail.com>2017-05-04 16:38:25 +0200
commit34c3f03013375817d3d089e685793290eded553a (patch)
tree7f5ec491aed2d27c88897eb1e65671728d95dcc2 /src
parent052c2d0a0f68a210038123608c00d4e0ff360161 (diff)
downloadrneovim-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.c22
-rw-r--r--src/nvim/event/process.h3
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