aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/event
diff options
context:
space:
mode:
authorBjörn Linse <bjorn.linse@gmail.com>2017-06-08 17:15:53 +0200
committerBjörn Linse <bjorn.linse@gmail.com>2017-11-25 09:37:00 +0100
commit90e5cc5484ceeb410ae2a2706e09ed475cade4a5 (patch)
treeb1eeb8b2bad49e081ac8051f8ad32f1983b1dc50 /src/nvim/event
parent3e59c1e20d605315d299e17ac9a059ccedd7e9d5 (diff)
downloadrneovim-90e5cc5484ceeb410ae2a2706e09ed475cade4a5.tar.gz
rneovim-90e5cc5484ceeb410ae2a2706e09ed475cade4a5.tar.bz2
rneovim-90e5cc5484ceeb410ae2a2706e09ed475cade4a5.zip
channels: generalize jobclose()
Diffstat (limited to 'src/nvim/event')
-rw-r--r--src/nvim/event/process.c34
-rw-r--r--src/nvim/event/stream.c7
2 files changed, 13 insertions, 28 deletions
diff --git a/src/nvim/event/process.c b/src/nvim/event/process.c
index 8946f049e2..34be291aef 100644
--- a/src/nvim/event/process.c
+++ b/src/nvim/event/process.c
@@ -25,13 +25,6 @@
// For pty processes SIGTERM is sent first (in case SIGHUP was not enough).
#define KILL_TIMEOUT_MS 2000
-#define CLOSE_PROC_STREAM(proc, stream) \
- do { \
- if (!proc->stream.closed) { \
- stream_close(&proc->stream, NULL, NULL); \
- } \
- } while (0)
-
static bool process_is_tearing_down = false;
/// @returns zero on success, or negative error code
@@ -140,27 +133,11 @@ void process_teardown(Loop *loop) FUNC_ATTR_NONNULL_ALL
pty_process_teardown(loop);
}
-// Wrappers around `stream_close` that protect against double-closing.
void process_close_streams(Process *proc) FUNC_ATTR_NONNULL_ALL
{
- process_close_in(proc);
- process_close_out(proc);
- process_close_err(proc);
-}
-
-void process_close_in(Process *proc) FUNC_ATTR_NONNULL_ALL
-{
- CLOSE_PROC_STREAM(proc, in);
-}
-
-void process_close_out(Process *proc) FUNC_ATTR_NONNULL_ALL
-{
- CLOSE_PROC_STREAM(proc, out);
-}
-
-void process_close_err(Process *proc) FUNC_ATTR_NONNULL_ALL
-{
- CLOSE_PROC_STREAM(proc, err);
+ stream_may_close(&proc->in);
+ stream_may_close(&proc->out);
+ stream_may_close(&proc->err);
}
/// Synchronously wait for a process to finish
@@ -237,8 +214,9 @@ void process_stop(Process *proc) FUNC_ATTR_NONNULL_ALL
switch (proc->type) {
case kProcessTypeUv:
// Close the process's stdin. If the process doesn't close its own
- // stdout/stderr, they will be closed when it exits (voluntarily or not).
- process_close_in(proc);
+ // stdout/stderr, they will be closed when it exits(possibly due to being
+ // terminated after a timeout)
+ stream_may_close(&proc->in);
ILOG("Sending SIGTERM to pid %d", proc->pid);
uv_kill(proc->pid, SIGTERM);
break;
diff --git a/src/nvim/event/stream.c b/src/nvim/event/stream.c
index 7c865bfe1e..ba25b76ec7 100644
--- a/src/nvim/event/stream.c
+++ b/src/nvim/event/stream.c
@@ -92,6 +92,13 @@ void stream_close(Stream *stream, stream_close_cb on_stream_close, void *data)
}
}
+void stream_may_close(Stream *stream)
+{
+ if (!stream->closed) {
+ stream_close(stream, NULL, NULL);
+ }
+}
+
void stream_close_handle(Stream *stream)
FUNC_ATTR_NONNULL_ALL
{