Subject: Re: bug#51007: 27.2; emacs hangs when using window-toggle-side-windows

From: martin rudalics <[email-masked]>
Date: Sun, 10 Oct 2021 10:58:12 +0200

> What are the actual values of the data in this assertion:
 >
 > 	      eassert (r->glyphs[TEXT_AREA] >= fr->glyphs[TEXT_AREA]
 > 		       && r->glyphs[LAST_AREA] <= fr->glyphs[LAST_AREA]);

How would I do that?  These are structures like

(gdb) p r->glyphs[TEXT_AREA]
$1 = (struct glyph *) 0xe2df90
(gdb) p fr->glyphs[TEXT_AREA]
$2 = (struct glyph *) 0xe36690

BTW, the bug is easily reproducible using the following scenario: With
a master emacs -Q in an -nw session I evaluate

(setq display-buffer-alist
       '(("\\*Info\\*" (display-buffer-in-side-window) (side . right))
         ("\\*Help\\*" (display-buffer-in-side-window) (side . top))))

If I then do

C-x 3
C-h m

and evaluate

(delete-other-windows (window-main-window))

I get the assertion violation.  If instead I do

C-x 3
C-h m
C-h i

and evaluate

(delete-other-windows (window-main-window))

Emacs hangs in redisplay.  And if instead I do

C-x 3
C-h i

and evaluate

(delete-other-windows (window-main-window))

Emacs behaves as expected.

I suppose 'delete-other-windows-internal' mangles the window dimensions
but the scenarios work on GUI frames and pass all internal checks here
so it will take me some time to sort this out ...

martin