bug-guile
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

GC loop


From: Neil Jerram
Subject: GC loop
Date: 03 Feb 2002 13:44:29 +0000
User-agent: Gnus/5.0808 (Gnus v5.8.8) Emacs/20.7

Using the current unstable CVS Guile...

Running under gdb, type in the following:

(gdb) run -q
Starting program: /usr/local/bin/guile -q
guile> (trap-set! enter-frame-handler (lambda () 1))
(exit-frame-handler #f apply-frame-handler #f enter-frame-handler #<procedure 
#f ()> traps)
guile> (trap-enable 'enter-frame)

There is no response.  Wait a few seconds, and then C-c to send an
interrupt.  You'll find that the call stack shows a huge number of
recursive calls to scm_gc_mark (about 4000 per second waited on my
box).  (If you don't see scm_gc_mark immediately, you may have
interrupted too quickly: let it run for another second and then C-c
again.)

Here's as much of an explanation as I can offer...  The intended
effect of the two `trap' lines above is that the evaluator calls the
specified procedure every time it enters a new evaluation frame or is
about to perform an application.  However, the procedure above doesn't
accept the right number of arguments, so the attempt to call it gives
rise to a wrong-num-args error, which (I presume) jumps us out of that
level of the evaluator and is caught by the usual REPL machinery in
boot-9.scm.

Then, the next time that we need to GC, we hit this scm_gc_mark loop.
My guess is that something about the trap+error scenario has left data
or the stack in a state which exposes a bug in the GC.

        Neil




reply via email to

[Prev in Thread] Current Thread [Next in Thread]