[Bug: 21.5-b28] another crash on aix

Aidan Kehoe kehoea at parhasard.net
Wed May 7 17:49:13 EDT 2008


 Ar an séiú lá de mí Márta, scríobh Jerry James: 

 > On Wed, Feb 27, 2008 at 9:27 AM, Stephen J. Turnbull <stephen at xemacs.org> wrote:
 > > Thomas Mittelstaedt writes:
 > >
 > >   > #5  0x10004708 in assert_failed (file=0x10337e10 "signal.c", line=730,
 > >   >     expr=0x10337ed4 "QUIT called from within redisplay without being
 > >   > properly wrapped") at emacs.c:3987
 > >
 > >  This looks like an XEmacs bug.
 > 
 > In protected_menu_item_descriptor_to_widget_value (menubar-x.c), we
 > explicitly pass the UNINHIBIT_QUIT flag.  The comment above that
 > function says that we "need to reenable quit checking, which was
 > disabled by next_event_internal() so as to read C-g as an event".
 > However, when we do read C-g as an event, we get this crash.  I don't
 > see a way to fix this without immediately undoing all this work to
 > inhibit QUIT again.  So the radical solution to this problem is to
 > change that flag to INHIBIT_QUIT, which means C-g will not break you
 > out of a menu browse gone bad.  I don't see a less radical solution
 > right now, although I'll think on it some more.

It looks like like the assertion itself may be out of date. It’s in
signal.c, but the referenced Internals manual info page is no longer
there. On the website, 
http://www.xemacs.org/Documentation/beta/html/internals_27.html#SEC269 ,
it says:

‘These are now fixed as of November 10, 2004.’

If Ben can say that redisplay is now re-entrant, it we can use the #if 0
part of the code, instead of the FUCKME! part. If he doesn’t, well, we need
more research on our part. 

#ifdef ERROR_CHECK_TRAPPING_PROBLEMS
      /* Since the code below can call Lisp, make sure that proper wrapping is
	 in place during redisplay. */
#if 0
      assert_with_message
	(proper_redisplay_wrapping_in_place (),
	 "QUIT called from within redisplay without being properly wrapped");
#else
    /* FUCKME!  It looks like we cannot even check for QUIT, *EVER*, during
       redisplay.  Checking for quit can dispatch events, which can enter
       redisplay recursively, which can trip on 

Fatal error: assertion failed, file c:\xemacs\build\src\redisplay.c, line 5532,
!dy->locked

Backtrace given in

  (Info-goto-node "(internals)Nasty Bugs due to Reentrancy in Redisplay Structures handling QUIT")

    */
      assert_with_message
	(!in_display,
	 "QUIT called from within redisplay without being properly wrapped");
#endif /* 0 */
#endif /* ERROR_CHECK_TRAPPING_PROBLEMS */

-- 
¿Dónde estará ahora mi sobrino Yoghurtu Nghé, que tuvo que huir
precipitadamente de la aldea por culpa de la escasez de rinocerontes?



More information about the XEmacs-Beta mailing list