Patch 8.2.1948

4 views
Skip to first unread message

Bram Moolenaar

unread,
Nov 4, 2020, 5:03:49 AM11/4/20
to vim...@googlegroups.com

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 -- Br...@Moolenaar.net -- 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 ///
Reply all
Reply to author
Forward
0 new messages