aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/event
diff options
context:
space:
mode:
authorbfredl <bjorn.linse@gmail.com>2023-01-09 12:28:10 +0100
committerGitHub <noreply@github.com>2023-01-09 12:28:10 +0100
commitdf60ac9767d8b6b4a9959d561d22f1e4f1ac3aa4 (patch)
treeefa860feff3753a227c8c381e4c0580eb01c6604 /src/nvim/event
parentd64549bc4e795cabca270f91b483ba9df7006b85 (diff)
parent1d16bba4d8b8b648d2dabd610924bcf3051a0f29 (diff)
downloadrneovim-df60ac9767d8b6b4a9959d561d22f1e4f1ac3aa4.tar.gz
rneovim-df60ac9767d8b6b4a9959d561d22f1e4f1ac3aa4.tar.bz2
rneovim-df60ac9767d8b6b4a9959d561d22f1e4f1ac3aa4.zip
Merge pull request #21675 from bfredl/nonstdio
fix(embed): handle stdio in server properly
Diffstat (limited to 'src/nvim/event')
-rw-r--r--src/nvim/event/libuv_process.c3
-rw-r--r--src/nvim/event/process.c3
-rw-r--r--src/nvim/event/process.h5
3 files changed, 9 insertions, 2 deletions
diff --git a/src/nvim/event/libuv_process.c b/src/nvim/event/libuv_process.c
index 811d96ff93..10a09275d9 100644
--- a/src/nvim/event/libuv_process.c
+++ b/src/nvim/event/libuv_process.c
@@ -85,6 +85,9 @@ int libuv_process_spawn(LibuvProcess *uvproc)
uvproc->uvstdio[2].flags = UV_CREATE_PIPE | UV_WRITABLE_PIPE;
uvproc->uvstdio[2].data.stream = STRUCT_CAST(uv_stream_t,
&proc->err.uv.pipe);
+ } else if (proc->fwd_err) {
+ uvproc->uvstdio[2].flags = UV_INHERIT_FD;
+ uvproc->uvstdio[2].data.fd = STDERR_FILENO;
}
int status;
diff --git a/src/nvim/event/process.c b/src/nvim/event/process.c
index 2fa789ac9a..9dfd6f329a 100644
--- a/src/nvim/event/process.c
+++ b/src/nvim/event/process.c
@@ -43,6 +43,9 @@ static int exit_need_delay = 0;
int process_spawn(Process *proc, bool in, bool out, bool err)
FUNC_ATTR_NONNULL_ALL
{
+ // forwarding stderr contradicts with processing it internally
+ assert(!(err && proc->fwd_err));
+
if (in) {
uv_pipe_init(&proc->loop->uv, &proc->in.uv.pipe, 0);
} else {
diff --git a/src/nvim/event/process.h b/src/nvim/event/process.h
index 26e03ff4f3..e0057faffb 100644
--- a/src/nvim/event/process.h
+++ b/src/nvim/event/process.h
@@ -38,7 +38,7 @@ struct process {
/// Exit handler. If set, user must call process_free().
process_exit_cb cb;
internal_process_cb internal_exit_cb, internal_close_cb;
- bool closed, detach, overlapped;
+ bool closed, detach, overlapped, fwd_err;
MultiQueue *events;
};
@@ -62,7 +62,8 @@ static inline Process process_init(Loop *loop, ProcessType type, void *data)
.closed = false,
.internal_close_cb = NULL,
.internal_exit_cb = NULL,
- .detach = false
+ .detach = false,
+ .fwd_err = false,
};
}