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(a)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?
_______________________________________________
XEmacs-Beta mailing list
XEmacs-Beta(a)xemacs.org
http://calypso.tux.org/cgi-bin/mailman/listinfo/xemacs-beta