Subject: 29.0.50; Illegal -layoutSubtreeIfNeeded on NS
From: Gerd Möllmann <[email-masked]>
To: [email-masked]
Date: Mon, 27 Jun 2022 16:22:31 +0200
List-Id: <debbugs-submit.debbugs.gnu.org>

On macOS 12.4, selecting Options -> Set Default Font from the menu bar 
reproducibly prints a message to the terminal:

emacs[76309:7042282] It's not legal to call -layoutSubtreeIfNeeded on
a view which is already being laid out.  If you are implementing the
view's -layout method, you can call -[super layout] instead. Break on
void _NSDetectedLayoutRecursion(void) to debug.  This will be logged
only once.  This may break in the future.

Hopefully nobody get's sued because of that illegal action...

Backtrace from lldb:

 * frame #0: 0x000000019e2f5f40 AppKit`_NSDetectedLayoutRecursion
    frame #1: 0x000000019dac4148 AppKit`-[NSWindow(NSConstraintBasedLayout) _layoutViewTree] + 148
    frame #2: 0x000000019dac11d0 AppKit`-[NSWindow _oldPlaceWindow:fromServer:] + 584
    frame #3: 0x000000019dac0050 AppKit`-[NSWindow _setFrameCommon:display:fromServer:] + 2220
    frame #4: 0x000000019db854cc AppKit`-[NSThemeFrame _growWindowReshapeContentAndToolbarView:withOldToolbarFrameSize:animate:] + 1232
    frame #5: 0x000000019db84ddc AppKit`-[NSThemeFrame _reshapeContentAndToolbarView:withOldToolbarFrameSize:resizeWindow:animate:] + 300
    frame #6: 0x000000019db738bc AppKit`-[NSThemeFrame _toolbarFrameSizeChanged:oldSize:] + 76
    frame #7: 0x000000019db737f4 AppKit`-[NSWindow _toolbarFrameSizeChanged:oldSize:] + 96
    frame #8: 0x000000019db68870 AppKit`-[NSToolbarView _layoutDirtyItemViewersAndTileToolbar] + 428
    frame #9: 0x000000019db8b114 AppKit`-[NSToolbarView layout] + 88
    frame #10: 0x000000019dac5700 AppKit`_NSViewLayout + 688
    frame #11: 0x000000019dac5178 AppKit`-[NSView _layoutSubtreeWithOldSize:] + 380
    frame #12: 0x000000019dac52e4 AppKit`-[NSView _layoutSubtreeWithOldSize:] + 744
    frame #13: 0x000000019dac52e4 AppKit`-[NSView _layoutSubtreeWithOldSize:] + 744
    frame #14: 0x000000019dac52e4 AppKit`-[NSView _layoutSubtreeWithOldSize:] + 744
    frame #15: 0x000000019dac4600 AppKit`-[NSView _layoutSubtreeIfNeededAndAllowTemporaryEngine:] + 996
    frame #16: 0x000000019dac4148 AppKit`-[NSWindow(NSConstraintBasedLayout) _layoutViewTree] + 148
    frame #17: 0x000000019db3b8ec AppKit`-[NSWindow(NSConstraintBasedLayout) layoutIfNeeded] + 308
    frame #18: 0x000000019dba7388 AppKit`-[NSWindow _setUpFirstResponderBeforeBecomingVisible] + 84
    frame #19: 0x000000019dba6750 AppKit`-[NSWindow _doWindowWillBeVisibleAsSheet:] + 164
    frame #20: 0x000000019dba507c AppKit`-[NSWindow _reallyDoOrderWindowAboveOrBelow:relativeTo:findKey:forCounter:force:isModal:] + 1232
    frame #21: 0x000000019dba4790 AppKit`-[NSWindow _reallyDoOrderWindow:relativeTo:findKey:forCounter:force:isModal:] + 132
    frame #22: 0x000000019dba377c AppKit`-[NSWindow _doOrderWindow:relativeTo:findKey:forCounter:force:isModal:] + 324
    frame #23: 0x000000010088d424 emacs`-[EmacsView showFontPanel](self=0x0000000108431400, _cmd="showFontPanel") at nsterm.m:6585:3
    frame #24: 0x000000010090d670 emacs`Fx_select_font(frame=0x0000000000000000, ignored=0x0000000000000000) at nsfns.m:1662:22

A related bug might be bug#53481 (status done, fixed by Alan Third).