# HG changeset patch # User Bram Moolenaar # Date 1548800105 -3600 # Node ID d8b4cbb14e1e31ed18e89176cb90e85cd3f64991 # Parent de793242c37ac481cbab13f7ba1f02a4207285e1 patch 8.1.0847: may use terminal after it was cleaned up commit https://github.com/vim/vim/commit/9172d23d05f3f25996e03612654920b01158d734 Author: Bram Moolenaar Date: Tue Jan 29 23:06:54 2019 +0100 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 --- 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; - - /* call job_status() to update jv_status */ - job_status(buf->b_term->tl_job); - if (buf->b_term->tl_job->jv_status >= JOB_ENDED) + job = buf->b_term->tl_job; + + // 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 --- a/src/version.c +++ b/src/version.c @@ -784,6 +784,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 847, +/**/ 846, /**/ 845,