Mercurial > vim
changeset 10353:72d92c31b9f7 v8.0.0071
commit https://github.com/vim/vim/commit/c4d4ac22f78fb1394c79eccc8a1e6812c0c7d8a7
Author: Bram Moolenaar <Bram@vim.org>
Date: Mon Nov 7 22:42:57 2016 +0100
patch 8.0.0071
Problem: Exit value from a shell command is wrong. (Hexchain Tong)
Solution: Do not check for ended jobs while waiting for a shell command.
(ichizok, closes https://github.com/vim/vim/issues/1196)
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Mon, 07 Nov 2016 22:45:04 +0100 |
parents | 7cb9b1d055d5 |
children | 1406a8ee653a |
files | src/os_unix.c src/version.c |
diffstat | 2 files changed, 21 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/src/os_unix.c +++ b/src/os_unix.c @@ -238,6 +238,10 @@ static volatile int deadly_signal = 0; /* volatile because it is used in signal handler deathtrap(). */ static volatile int in_mch_delay = FALSE; /* sleeping in mch_delay() */ +#if defined(FEAT_JOB_CHANNEL) && !defined(USE_SYSTEM) +static int dont_check_job_ended = 0; +#endif + static int curr_tmode = TMODE_COOK; /* contains current terminal mode */ #ifdef USE_XSMP @@ -4485,7 +4489,9 @@ mch_call_shell( catch_signals(SIG_IGN, SIG_ERR); catch_int_signal(); UNBLOCK_SIGNALS(&curset); - +# ifdef FEAT_JOB_CHANNEL + ++dont_check_job_ended; +# endif /* * For the GUI we redirect stdin, stdout and stderr to our window. * This is also used to pipe stdin/stdout to/from the external @@ -5030,6 +5036,10 @@ finished: wait4pid(wpid, NULL); } +# ifdef FEAT_JOB_CHANNEL + --dont_check_job_ended; +# endif + /* * Set to raw mode right now, otherwise a CTRL-C after * catch_signals() will kill Vim. @@ -5363,6 +5373,14 @@ mch_detect_ended_job(job_T *job_list) pid_t wait_pid = 0; job_T *job; +# ifndef USE_SYSTEM + /* Do not do this when waiting for a shell command to finish, we would get + * the exit value here (and discard it), the exit value obtained there + * would then be wrong. */ + if (dont_check_job_ended > 0) + return NULL; +# endif + # ifdef __NeXT__ wait_pid = wait4(-1, &status, WNOHANG, (struct rusage *)0); # else