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:
@@ -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
|
||||||
|
@@ -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,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user