# HG changeset patch # User Christian Brabandt # Date 1478555104 -3600 # Node ID 72d92c31b9f7ad28738a94d213c46963ad59c805 # Parent 7cb9b1d055d5f2d7649278ad800af73fdf840c8d commit https://github.com/vim/vim/commit/c4d4ac22f78fb1394c79eccc8a1e6812c0c7d8a7 Author: Bram Moolenaar 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) diff --git a/src/os_unix.c b/src/os_unix.c --- 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 diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -765,6 +765,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 71, +/**/ 70, /**/ 69,