From: Bram Moolenaar Date: Mon, 7 Nov 2016 21:42:57 +0000 (+0100) Subject: patch 8.0.0071 X-Git-Tag: v8.0.0071 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=c4d4ac22f78fb1394c79eccc8a1e6812c0c7d8a7;p=vim 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 #1196) --- diff --git a/src/os_unix.c b/src/os_unix.c index c6beba2cc..5d5b15167 100644 --- a/src/os_unix.c +++ b/src/os_unix.c @@ -238,6 +238,10 @@ static volatile int deadly_signal = 0; /* The signal we caught */ /* 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 index 19a22f325..d51160bf2 100644 --- a/src/version.c +++ b/src/version.c @@ -764,6 +764,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 71, /**/ 70, /**/