patch 8.2.2040: terminal buffer disappears even when 'bufhidden' is "hide"

Problem:    Terminal buffer disappears even when 'bufhidden' is "hide".
            (Sergey Vlasov)
Solution:   Check 'bufhiddden' when a terminal buffer becomes hidden.
            (closes #7358)
diff --git a/src/buffer.c b/src/buffer.c
index a4c6a00..8497bcf 100644
--- a/src/buffer.c
+++ b/src/buffer.c
@@ -552,6 +552,11 @@
 		unload_buf = FALSE;
 	    }
 	}
+	else if (buf->b_p_bh[0] == 'h' && !del_buf)
+	{
+	    // Hide a terminal buffer.
+	    unload_buf = FALSE;
+	}
 	else
 	{
 	    // A terminal buffer is wiped out if the job has finished.
diff --git a/src/testdir/test_terminal.vim b/src/testdir/test_terminal.vim
index cef379a..8d47c08 100644
--- a/src/testdir/test_terminal.vim
+++ b/src/testdir/test_terminal.vim
@@ -123,7 +123,7 @@
   unlet g:job
 endfunc
 
-func Test_terminal_hide_buffer()
+func Test_terminal_hide_buffer_job_running()
   let buf = Run_shell_in_terminal({})
   setlocal bufhidden=hide
   quit
@@ -140,6 +140,25 @@
   unlet g:job
 endfunc
 
+func Test_terminal_hide_buffer_job_finished()
+  term echo hello
+  let buf = bufnr()
+  setlocal bufhidden=hide
+  call WaitForAssert({-> assert_equal('finished', term_getstatus(buf))})
+  call assert_true(bufloaded(buf))
+  call assert_true(buflisted(buf))
+  edit Xasdfasdf
+  call assert_true(bufloaded(buf))
+  call assert_true(buflisted(buf))
+  exe buf .. 'buf'
+  call assert_equal(buf, bufnr())
+  setlocal bufhidden=
+  edit Xasdfasdf
+  call assert_false(bufloaded(buf))
+  call assert_false(buflisted(buf))
+  bwipe Xasdfasdf
+endfunc
+
 func s:Nasty_exit_cb(job, st)
   exe g:buf . 'bwipe!'
   let g:buf = 0
diff --git a/src/version.c b/src/version.c
index 91c820d..19757ca 100644
--- a/src/version.c
+++ b/src/version.c
@@ -751,6 +751,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    2040,
+/**/
     2039,
 /**/
     2038,