Subject: bug#34179: 27.0.50; message hangs when buffer with process visible

From: Eli Zaretskii <[email-masked]>
Date: Thu, 24 Jan 2019 21:21:48 +0200

> From: Michael Heerdegen <[email-masked]>
> Cc: Eli Zaretskii <[email-masked]>,  [email-masked]
> Date: Thu, 24 Jan 2019 19:47:02 +0100
> 
> So, the recipe is: load the attached file, open a shell buffer (M-x
> shell), and C-x 5 2.  Also selecting a different frame works.
> 
> M-: (fracy-display-frame-list) seems to already suffice as recipe.

Thanks.  This is an infloop in redisplay_internal, because each time
we call run_window_change_functions, it causes
windows_or_buffers_changed to be set to a non-zero value, and we then
retry redisplay:

  if (!NILP (Vrun_hooks))
    {
      run_window_change_functions ();

      /* If windows or buffers changed or selected_window changed,
	 redisplay again.  */
      if ((windows_or_buffers_changed)
	  || (WINDOWP (selected_window)
	      && (w = XWINDOW (selected_window)) != sw))
	goto retry;
    }

Here's the Lisp backtrace:

  "select-window" (0x82a508)
  "window-max-chars-per-line" (0x82aae0)
  "window-adjust-process-window-size" (0x82b0a0)
  "window-adjust-process-window-size-smallest" (0x82b618)
  "window--adjust-process-windows" (0x82bbc0)
  "redisplay_internal (C function)" (0x0)
  "message" (0x82cdb0)
  "progn" (0x82cff8)
  "if" (0x82d198)
  "let*" (0x82d3c8)
  "catch" (0x82d608)
  "fracy-display-frame-list" (0x82d7c0)
  "if" (0x82dac8)
  "fracy-flash-window" (0x82dc80)
  "let" (0x82e018)
  "ad-Advice-handle-switch-frame" (0x82e4a0)
  "apply" (0x82e498)
  "handle-switch-frame" (0x82ebe0)
  "funcall-interactively" (0x82ebd8)
  "call-interactively" (0x82f030)
  "command-execute" (0x82f628)

The C portion of the backtrace below selec t-window is this:

  #0  redisplay_other_windows () at xdisp.c:597
  #1  0x010aa09e in select_window (window=XIL(0xa000000006919aa0),
      norecord=XIL(0x3d36a14), inhibit_point_swap=false) at window.c:540
  #2  0x010aa62a in Fselect_window (window=XIL(0xa000000006919aa0),
      norecord=XIL(0x3d36a14)) at window.c:628

Should we perhaps not "goto retry" there?