# HG changeset patch # User Christian Brabandt # Date 1493476203 -7200 # Node ID c9924ea60cc725de061e0c0724b4e0af810ac733 # Parent cc525368116797d22b430c2809539b15fdce6457 patch 8.0.0588: job_stop() often assumes the channel will be closed commit https://github.com/vim/vim/commit/1a9020d4cba6d90688506102ab587c371ff72f8b Author: Bram Moolenaar Date: Sat Apr 29 16:24:38 2017 +0200 patch 8.0.0588: job_stop() often assumes the channel will be closed Problem: job_stop() often assumes the channel will be closed, while the job may not actually be stopped. (Martin Gammels?ter) Solution: Only assume the job stops on "kill". Don't send a signal if the job has already ended. (closes #1632) diff --git a/src/channel.c b/src/channel.c --- a/src/channel.c +++ b/src/channel.c @@ -5148,12 +5148,17 @@ job_stop(job_T *job, typval_T *argvars) return 0; } } + if (job->jv_status == JOB_ENDED) + { + ch_log(job->jv_channel, "Job has already ended, job_stop() skipped"); + return 0; + } ch_logs(job->jv_channel, "Stopping job with '%s'", (char *)arg); if (mch_stop_job(job, arg) == FAIL) return 0; - /* Assume that "hup" does not kill the job. */ - if (job->jv_channel != NULL && STRCMP(arg, "hup") != 0) + /* Assume that only "kill" will kill the job. */ + if (job->jv_channel != NULL && STRCMP(arg, "kill") == 0) job->jv_channel->ch_job_killed = TRUE; /* We don't try freeing the job, obviously the caller still has a 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 */ /**/ + 588, +/**/ 587, /**/ 586,