aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJustin M. Keyes <justinkz@gmail.com>2017-11-12 15:34:04 +0100
committerGitHub <noreply@github.com>2017-11-12 15:34:04 +0100
commit881f9e42d1821214b97732022b406ddb4330b775 (patch)
treed45ceeae8c139a9b0be4c7812982b58c7772e15c /src
parentb6a603fe515ee1cd554a8c4151286b26209a467b (diff)
downloadrneovim-881f9e42d1821214b97732022b406ddb4330b775.tar.gz
rneovim-881f9e42d1821214b97732022b406ddb4330b775.tar.bz2
rneovim-881f9e42d1821214b97732022b406ddb4330b775.zip
process_close(): uv_unref() detached processes (#7539)
Doc for UV_PROCESS_DETACHED in uv.h mentions: > child process will still keep the parent's event loop alive unless > the parent process calls uv_unref() on the child's process handle. ref #3944
Diffstat (limited to 'src')
-rw-r--r--src/nvim/event/libuv_process.c2
-rw-r--r--src/nvim/event/process.c7
2 files changed, 8 insertions, 1 deletions
diff --git a/src/nvim/event/libuv_process.c b/src/nvim/event/libuv_process.c
index f6a567a520..758b35796e 100644
--- a/src/nvim/event/libuv_process.c
+++ b/src/nvim/event/libuv_process.c
@@ -38,7 +38,7 @@ int libuv_process_spawn(LibuvProcess *uvproc)
#endif
uvproc->uvopts.exit_cb = exit_cb;
uvproc->uvopts.cwd = proc->cwd;
- uvproc->uvopts.env = NULL;
+ uvproc->uvopts.env = NULL; // Inherits the parent (nvim) env.
uvproc->uvopts.stdio = uvproc->uvstdio;
uvproc->uvopts.stdio_count = 3;
uvproc->uvstdio[0].flags = UV_IGNORE;
diff --git a/src/nvim/event/process.c b/src/nvim/event/process.c
index 8371d3cd48..41e793500a 100644
--- a/src/nvim/event/process.c
+++ b/src/nvim/event/process.c
@@ -324,6 +324,13 @@ static void process_close(Process *proc)
}
assert(!proc->closed);
proc->closed = true;
+
+ if (proc->detach) {
+ if (proc->type == kProcessTypeUv) {
+ uv_unref((uv_handle_t *)&(((LibuvProcess *)proc)->uv));
+ }
+ }
+
switch (proc->type) {
case kProcessTypeUv:
libuv_process_close((LibuvProcess *)proc);