diff options
author | Justin M. Keyes <justinkz@gmail.com> | 2017-11-12 15:34:04 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-11-12 15:34:04 +0100 |
commit | 881f9e42d1821214b97732022b406ddb4330b775 (patch) | |
tree | d45ceeae8c139a9b0be4c7812982b58c7772e15c | |
parent | b6a603fe515ee1cd554a8c4151286b26209a467b (diff) | |
download | rneovim-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
-rw-r--r-- | src/nvim/event/libuv_process.c | 2 | ||||
-rw-r--r-- | src/nvim/event/process.c | 7 |
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); |