Patch 8.2.1948
Problem:    GUI: crash when handling message while closing a window. (Srinath
            Avadhanula)
Solution:   Don't handle message while closing a window. (closes #7250)
Files:      src/window.c, src/globals.h, src/getchar.c


*** ../vim-8.2.1947/src/window.c        2020-10-25 17:55:06.173001826 +0100
--- src/window.c        2020-11-04 10:58:39.421347889 +0100
***************
*** 2569,2575 ****
--- 2569,2580 ----
  
      // Now we are really going to close the window.  Disallow any autocommand
      // to split a window to avoid trouble.
+     // Also bail out of parse_queued_messages() to avoid it tries to update 
the
+     // screen.
      ++split_disallowed;
+ #ifdef MESSAGE_QUEUE
+     ++dont_parse_messages;
+ #endif
  
      // Free the memory used for the window and get the window that received
      // the screen space.
***************
*** 2626,2631 ****
--- 2631,2639 ----
      }
  
      --split_disallowed;
+ #ifdef MESSAGE_QUEUE
+     --dont_parse_messages;
+ #endif
  
      /*
       * If last window has a status line now and we don't want one,
*** ../vim-8.2.1947/src/globals.h       2020-10-30 18:32:57.430698692 +0100
--- src/globals.h       2020-11-04 10:58:42.037340330 +0100
***************
*** 581,586 ****
--- 581,592 ----
  // ('lines' and 'rows') must not be changed.
  EXTERN int    updating_screen INIT(= FALSE);
  
+ #ifdef MESSAGE_QUEUE
+ // While closing windows or buffers messages should not be handled to avoid
+ // using invalid windows or buffers.
+ EXTERN int    dont_parse_messages INIT(= FALSE);
+ #endif
+ 
  #ifdef FEAT_MENU
  // The root of the menu hierarchy.
  EXTERN vimmenu_T      *root_menu INIT(= NULL);
*** ../vim-8.2.1947/src/getchar.c       2020-09-28 22:29:25.421766301 +0200
--- src/getchar.c       2020-11-04 10:52:19.430444990 +0100
***************
*** 2155,2161 ****
  
      // Do not handle messages while redrawing, because it may cause buffers to
      // change or be wiped while they are being redrawn.
!     if (updating_screen)
        return;
  
      // If memory allocation fails during startup we'll exit but curbuf or
--- 2155,2162 ----
  
      // Do not handle messages while redrawing, because it may cause buffers to
      // change or be wiped while they are being redrawn.
!     // Also bail out when parsing messages was explicitly disabled.
!     if (updating_screen || dont_parse_messages)
        return;
  
      // If memory allocation fails during startup we'll exit but curbuf or
*** ../vim-8.2.1947/src/version.c       2020-11-03 20:05:36.178750002 +0100
--- src/version.c       2020-11-04 10:43:40.003940502 +0100
***************
*** 752,753 ****
--- 752,755 ----
  {   /* Add new patch number below this line */
+ /**/
+     1948,
  /**/

-- 
I'm in shape.  Round IS a shape.

 /// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\  an exciting new programming language -- http://www.Zimbu.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/vim_dev/202011041003.0A4A3ghp3985765%40masaka.moolenaar.net.

Raspunde prin e-mail lui