Subject: bug#17975: 24.3.92; assertion failure deleting frames with varying names for the same display (and, using multiple X11 connections in that case too)

From: Eli Zaretskii <[email-masked]>
Date: Sun, 13 Jul 2014 19:35:42 +0300

> Date: Sun, 13 Jul 2014 19:54:15 +0400
> From: Dmitry Antipov <[email-masked]>
> CC: [email-masked], [email-masked]
> 
> On 07/13/2014 07:04 PM, Eli Zaretskii wrote:
> 
> > Does it help to avoid calling update_menu_bar for frames that don't
> > pass the FRAME_LIVE_P test?
> 
> If you mean just this:
> 
> === modified file 'src/xdisp.c'
> --- src/xdisp.c	2014-07-12 17:53:29 +0000
> +++ src/xdisp.c	2014-07-13 15:32:01 +0000
> @@ -11698,7 +11698,8 @@
>   	    }
> 
>   	  GCPRO1 (tail);
> -	  menu_bar_hooks_run = update_menu_bar (f, 0, menu_bar_hooks_run);
> +	  if (FRAME_LIVE_P (f))
> +	    menu_bar_hooks_run = update_menu_bar (f, 0, menu_bar_hooks_run);
>   #ifdef HAVE_WINDOW_SYSTEM
>   	  update_tool_bar (f, 0);
>   #endif
> 
> then no, at least for Ken's test case.

No, I meant to skip the entire loop for non-live frames, like we do
for tooltip frames.

If this doesn't fix the crash, then please show the backtrace, because
the previous one started with the update_menu_bar call.  If it is
called for a frame other than the one just deleted, then what exactly
is the reason for the crash?  Why is the frame's display structure
NULL?