From 1d4563771bcdaca0e6ec3eba1ca3ee6461d7afb5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Linse?= Date: Thu, 17 Nov 2016 08:53:05 +0100 Subject: [PATCH] jobs: ensure calling jobclose() on a pty job sends SIGHUP. Closes #5619 --- runtime/doc/eval.txt | 3 ++- src/nvim/eval.c | 3 +++ test/functional/core/job_spec.lua | 6 ++++++ 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/runtime/doc/eval.txt b/runtime/doc/eval.txt index 64f58c5599..9c6cbd5a1a 100644 --- a/runtime/doc/eval.txt +++ b/runtime/doc/eval.txt @@ -4411,7 +4411,8 @@ jobclose({job}[, {stream}]) {Nvim} *jobclose()* Close {job}'s {stream}, which can be one of "stdin", "stdout", "stderr" or "rpc" (closes the rpc channel for a job started with the "rpc" option.) If {stream} is omitted, all streams - are closed. + are closed. If the job is a pty job, this will then close the + pty master, sending SIGHUP to the job process. jobpid({job}) {Nvim} *jobpid()* Return the pid (process id) of {job}. diff --git a/src/nvim/eval.c b/src/nvim/eval.c index 87fe329ec2..750ef4f94f 100644 --- a/src/nvim/eval.c +++ b/src/nvim/eval.c @@ -11459,6 +11459,9 @@ static void f_jobclose(typval_T *argvars, typval_T *rettv, FunPtr fptr) process_close_err(proc); } else { process_close_streams(proc); + if (proc->type == kProcessTypePty) { + pty_process_close_master(&data->proc.pty); + } } } } diff --git a/test/functional/core/job_spec.lua b/test/functional/core/job_spec.lua index 5872ebe8ee..58594db8ac 100644 --- a/test/functional/core/job_spec.lua +++ b/test/functional/core/job_spec.lua @@ -480,6 +480,12 @@ describe('jobs', function() nvim('command', 'call jobresize(j, 10, 40)') eq('rows: 40, cols: 10', next_chunk()) end) + + it('calling jobclose()', function() + -- this should send SIGHUP to the process + nvim('command', 'call jobclose(j)') + eq({'notification', 'exit', {0, 1}}, next_msg()) + end) end) end)