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 18:04:00 +0300

> Date: Sun, 13 Jul 2014 14:56:26 +0400
> From: Dmitry Antipov <[email-masked]>
> Cc: Ken Raeburn <[email-masked]>
> 
> Just for the record: running Motif build with the same args, i.e.
> 
> ./src/emacs -Q --eval '(let ((f (selected-frame))) (make-frame-on-display ":0") (delete-frame f))'
> 
> produces a hard crash caused by an attempt to dereference NULL
> 'Display *' pointer somewhere in Motif's libXm.so library:
> 
> Program received signal SIGSEGV, Segmentation fault.
> XFindContext (display=display@entry=0x0, rid=14237104, context=context@entry=-5, data=data@entry=0x7ffffffecc80) at Context.c:245
> 245		LockDisplay(display);
> (gdb) bt
> #0  XFindContext (display=display@entry=0x0, rid=14237104, context=context@entry=-5, data=data@entry=0x7ffffffecc80) at Context.c:245
> #1  0x00000037da3a92d8 in _XmRCColorHook (w=w@entry=0x14bb6a0, alIn=alIn@entry=0x7ffffffed340, acPtrIn=acPtrIn@entry=0x7ffffffecd7c)
>      at RCHook.c:73
> #2  0x00000037dbc1bed7 in CallInitialize (class=<optimized out>, req_widget=req_widget@entry=0x7ffffffecec0,
>      new_widget=new_widget@entry=0x14bb6a0, args=args@entry=0x7ffffffed340, num_args=num_args@entry=1) at Create.c:231
> #3  0x00000037dbc1c867 in xtCreate (name=name@entry=0xd60490 "Line Wrapping in This Buffer", class=class@entry=0x0,
>      widget_class=widget_class@entry=0x37da6b8800 <xmRowColumnClassRec>, parent=parent@entry=0x157b060, default_screen=0x133b0a0,
>      args=args@entry=0x7ffffffed340, num_args=num_args@entry=1, typed_args=typed_args@entry=0x0,
>      num_typed_args=num_typed_args@entry=0, parent_constraint_class=0x0, post_proc=post_proc@entry=0x37dbc1bef0 <widgetPostProc>)
>      at Create.c:416
> #4  0x00000037dbc1cc90 in _XtCreateWidget (name=name@entry=0xd60490 "Line Wrapping in This Buffer",
>      widget_class=widget_class@entry=0x37da6b8800 <xmRowColumnClassRec>, parent=parent@entry=0x157b060,
>      args=args@entry=0x7ffffffed340, num_args=num_args@entry=1, typed_args=typed_args@entry=0x0,
>      num_typed_args=num_typed_args@entry=0) at Create.c:570
> #5  0x00000037dbc1cf7e in XtCreateWidget (name=name@entry=0xd60490 "Line Wrapping in This Buffer",
>      widget_class=0x37da6b8800 <xmRowColumnClassRec>, parent=0x157b060, args=args@entry=0x7ffffffed340, num_args=num_args@entry=1)
>      at Create.c:589
> #6  0x00000037da2f5a02 in create (p=p@entry=0x16c7300, name=name@entry=0xd60490 "Line Wrapping in This Buffer",
>      old_al=old_al@entry=0x0, old_ac=old_ac@entry=0, type=type@entry=2, is_radio=is_radio@entry=0) at RowColumn.c:3246
> #7  0x00000037da2f7cbe in XmCreatePulldownMenu (p=0x16c7300, name=0xd60490 "Line Wrapping in This Buffer", al=0x0, ac=0)
>      at RowColumn.c:3485
> #8  0x00000000006d07a1 in update_one_menu_entry (instance=0xe22a00, widget=0x16c88c0, val=0xd60420, deep_p=1 '\001')
>      at ../../trunk/lwlib/lwlib-Xm.c:695
> #9  0x00000000006d0b40 in xm_update_menu (instance=0xe22a00, widget=0x16c7300, val=0xd56a30, deep_p=1 '\001')
>      at ../../trunk/lwlib/lwlib-Xm.c:783
> #10 0x00000000006d09c8 in update_one_menu_entry (instance=0xe22a00, widget=0x171ad50, val=0xd56a30, deep_p=1 '\001')
>      at ../../trunk/lwlib/lwlib-Xm.c:726
> #11 0x00000000006d0b40 in xm_update_menu (instance=0xe22a00, widget=0x156e1e0, val=0xc53ed0, deep_p=1 '\001')
>      at ../../trunk/lwlib/lwlib-Xm.c:783
> #12 0x00000000006d0ec3 in xm_update_one_widget (instance=0xe22a00, widget=0x156e1e0, val=0xc53ed0, deep_p=1 '\001')
>      at ../../trunk/lwlib/lwlib-Xm.c:879
> #13 0x00000000006ce0b1 in set_one_value (instance=0xe22a00, val=0xc53ed0, deep_p=1 '\001') at ../../trunk/lwlib/lwlib.c:534
> #14 0x00000000006ce106 in update_one_widget_instance (instance=0xe22a00, deep_p=1 '\001') at ../../trunk/lwlib/lwlib.c:554
> #15 0x00000000006ce14c in update_all_widget_values (info=0xce4bd0, deep_p=1 '\001') at ../../trunk/lwlib/lwlib.c:564
> #16 0x00000000006ce370 in lw_modify_all_widgets (id=2, val=0x1384670, deep_p=1 '\001') at ../../trunk/lwlib/lwlib.c:618
> #17 0x00000000004a5413 in set_frame_menubar (f=0x11b59e0, first_time=false, deep_p=true) at ../../trunk/src/xmenu.c:973
> #18 0x000000000045c90e in update_menu_bar (f=0x11b59e0, save_match_data=0, hooks_run=1) at ../../trunk/src/xdisp.c:11818
> #19 0x000000000045c552 in prepare_menu_bars () at ../../trunk/src/xdisp.c:11701

Does it help to avoid calling update_menu_bar for frames that don't
pass the FRAME_LIVE_P test?