From: Bram Moolenaar Date: Tue, 29 Jan 2019 22:06:54 +0000 (+0100) Subject: patch 8.1.0847: may use terminal after it was cleaned up X-Git-Tag: v8.1.0847 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=9172d23d05f3f25996e03612654920b01158d734;p=vim patch 8.1.0847: may use terminal after it was cleaned up Problem: May use terminal after it was cleaned up. Solution: Use the job pointer. --- diff --git a/src/terminal.c b/src/terminal.c index 87530af2e..760591443 100644 --- a/src/terminal.c +++ b/src/terminal.c @@ -1375,19 +1375,24 @@ term_try_stop_job(buf_T *buf) job_stop(buf->b_term->tl_job, NULL, how); - /* wait for up to a second for the job to die */ + // wait for up to a second for the job to die for (count = 0; count < 100; ++count) { - /* buffer, terminal and job may be cleaned up while waiting */ + job_T *job; + + // buffer, terminal and job may be cleaned up while waiting if (!buf_valid(buf) || buf->b_term == NULL || buf->b_term->tl_job == NULL) return OK; + job = buf->b_term->tl_job; - /* call job_status() to update jv_status */ - job_status(buf->b_term->tl_job); - if (buf->b_term->tl_job->jv_status >= JOB_ENDED) + // Call job_status() to update jv_status. It may cause the job to be + // cleaned up but it won't be freed. + job_status(job); + if (job->jv_status >= JOB_ENDED) return OK; + ui_delay(10L, FALSE); mch_check_messages(); parse_queued_messages(); diff --git a/src/version.c b/src/version.c index f693b660e..729f65017 100644 --- a/src/version.c +++ b/src/version.c @@ -783,6 +783,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 847, /**/ 846, /**/