1
0
forked from aniani/vim

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)
This commit is contained in:
Bram Moolenaar
2017-04-29 16:24:38 +02:00
parent 0635ee6824
commit 1a9020d4cb
2 changed files with 9 additions and 2 deletions

View File

@@ -5148,12 +5148,17 @@ job_stop(job_T *job, typval_T *argvars)
return 0; 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); ch_logs(job->jv_channel, "Stopping job with '%s'", (char *)arg);
if (mch_stop_job(job, arg) == FAIL) if (mch_stop_job(job, arg) == FAIL)
return 0; return 0;
/* Assume that "hup" does not kill the job. */ /* Assume that only "kill" will kill the job. */
if (job->jv_channel != NULL && STRCMP(arg, "hup") != 0) if (job->jv_channel != NULL && STRCMP(arg, "kill") == 0)
job->jv_channel->ch_job_killed = TRUE; job->jv_channel->ch_job_killed = TRUE;
/* We don't try freeing the job, obviously the caller still has a /* We don't try freeing the job, obviously the caller still has a

View File

@@ -764,6 +764,8 @@ static char *(features[]) =
static int included_patches[] = static int included_patches[] =
{ /* Add new patch number below this line */ { /* Add new patch number below this line */
/**/
588,
/**/ /**/
587, 587,
/**/ /**/