patch 9.0.0191: messages test fails; window size incorrect

Problem:    Messages test fails; window size incorrect when 'cmdheight' is
            made smaller.
Solution:   Properly cleanup after test with cmdheight zero.  Resize windows
            correctly when 'cmdheight' gets smaller.
diff --git a/src/testdir/dumps/Test_changing_cmdheight_5.dump b/src/testdir/dumps/Test_changing_cmdheight_5.dump
new file mode 100644
index 0000000..fb2a521
--- /dev/null
+++ b/src/testdir/dumps/Test_changing_cmdheight_5.dump
@@ -0,0 +1,8 @@
+> +0&#ffffff0@74
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|[+3#0000000&|N|o| |N|a|m|e|]| @47|0|,|0|-|1| @9|A|l@1
+| +0&&@74
diff --git a/src/testdir/test_cmdline.vim b/src/testdir/test_cmdline.vim
index 92adbd1..521312a 100644
--- a/src/testdir/test_cmdline.vim
+++ b/src/testdir/test_cmdline.vim
@@ -239,6 +239,11 @@
   call term_sendkeys(buf, ":set cmdheight-=2\<CR>")
   call VerifyScreenDump(buf, 'Test_changing_cmdheight_4', {})
 
+  " reducing window size and then setting cmdheight 
+  call term_sendkeys(buf, ":resize -1\<CR>")
+  call term_sendkeys(buf, ":set cmdheight=1\<CR>")
+  call VerifyScreenDump(buf, 'Test_changing_cmdheight_5', {})
+
   " clean up
   call StopVimInTerminal(buf)
   call delete('XTest_cmdheight')
diff --git a/src/testdir/test_messages.vim b/src/testdir/test_messages.vim
index 1f1bb9b..3c3712e 100644
--- a/src/testdir/test_messages.vim
+++ b/src/testdir/test_messages.vim
@@ -388,6 +388,7 @@
 endfunc
 
 func Test_cmdheight_zero()
+  enew
   set cmdheight=0
   set showcmd
   redraw!
@@ -437,10 +438,13 @@
   7
   call feedkeys(":\"\<C-R>=line('w0')\<CR>\<CR>", "xt")
   call assert_equal('"1', @:)
-  bwipe!
 
+  bwipe!
+  bwipe!
   set cmdheight&
   set showcmd&
+  tabnew
+  tabonly
 endfunc
 
 " vim: shiftwidth=2 sts=2 expandtab
diff --git a/src/version.c b/src/version.c
index a9887fa..c899966 100644
--- a/src/version.c
+++ b/src/version.c
@@ -736,6 +736,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    191,
+/**/
     190,
 /**/
     189,
diff --git a/src/window.c b/src/window.c
index 5b192cc..7d2fe42 100644
--- a/src/window.c
+++ b/src/window.c
@@ -6555,6 +6555,12 @@
     if (p_ch > old_p_ch && cmdline_row <= Rows - p_ch)
 	return;
 
+    // If cmdline_row is smaller than what it is supposed to be for 'cmdheight'
+    // then set old_p_ch to what it would be, so that the windows get resized
+    // properly for the new value.
+    if (cmdline_row < Rows - p_ch)
+	old_p_ch = Rows - cmdline_row;
+
     // Find bottom frame with width of screen.
     frp = lastwin->w_frame;
     while (frp->fr_width != Columns && frp->fr_parent != NULL)