summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2020-02-10 21:32:19 +0100
committerBram Moolenaar <Bram@vim.org>2020-02-10 21:32:19 +0100
commitb3e195cca7b3201b188c1713b64012b1bef4f61f (patch)
tree807cac065c03984fe15891e8f7a93fb0a19803b8
parent7ba3b91e0385c848c773e2f2d803db01730e7786 (diff)
downloadvim-git-8.2.0238.tar.gz
patch 8.2.0238: MS-Windows: job_stop() results in exit value zerov8.2.0238
Problem: MS-Windows: job_stop() results in exit value zero. Solution: Call TerminateJobObject() with -1 instead of 0. (Yasuhiro Matsumoto, closes #5150, closes #5614)
-rw-r--r--src/os_win32.c4
-rw-r--r--src/testdir/test_channel.vim15
-rw-r--r--src/version.c2
3 files changed, 19 insertions, 2 deletions
diff --git a/src/os_win32.c b/src/os_win32.c
index 7dc37a111..2594aeea5 100644
--- a/src/os_win32.c
+++ b/src/os_win32.c
@@ -5384,9 +5384,9 @@ mch_signal_job(job_T *job, char_u *how)
{
if (job->jv_channel != NULL && job->jv_channel->ch_anonymous_pipe)
job->jv_channel->ch_killing = TRUE;
- return TerminateJobObject(job->jv_job_object, 0) ? OK : FAIL;
+ return TerminateJobObject(job->jv_job_object, -1) ? OK : FAIL;
}
- return terminate_all(job->jv_proc_info.hProcess, 0) ? OK : FAIL;
+ return terminate_all(job->jv_proc_info.hProcess, -1) ? OK : FAIL;
}
if (!AttachConsole(job->jv_proc_info.dwProcessId))
diff --git a/src/testdir/test_channel.vim b/src/testdir/test_channel.vim
index c2068105b..ebcd76e0f 100644
--- a/src/testdir/test_channel.vim
+++ b/src/testdir/test_channel.vim
@@ -1991,3 +1991,18 @@ func Test_job_start_fails()
" this was leaking memory
call assert_fails("call job_start([''])", "E474:")
endfunc
+
+func Test_issue_5150()
+ let g:job = job_start('grep foo', {})
+ call job_stop(g:job)
+ sleep 10m
+ call assert_equal(-1, job_info(g:job).exitval)
+ let g:job = job_start('grep foo', {})
+ call job_stop(g:job, 'term')
+ sleep 10m
+ call assert_equal(-1, job_info(g:job).exitval)
+ let g:job = job_start('grep foo', {})
+ call job_stop(g:job, 'kill')
+ sleep 10m
+ call assert_equal(-1, job_info(g:job).exitval)
+endfunc
diff --git a/src/version.c b/src/version.c
index 7c48e0bdc..61a9f958a 100644
--- a/src/version.c
+++ b/src/version.c
@@ -743,6 +743,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 238,
+/**/
237,
/**/
236,