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 87530af..7605914 100644
--- a/src/terminal.c
+++ b/src/terminal.c
@@ -1375,19 +1375,24 @@
 
     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();