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
index 54a141c..4039b6b 100644
--- a/src/channel.c
+++ b/src/channel.c
@@ -5148,12 +5148,17 @@
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