From: Christophe R. <cs...@ca...> - 2005-04-08 14:22:57
|
Kevin Reid <kp...@ma...> writes: > Reduced code to reproduce the problem: > > $ sbcl > This is SBCL 0.8.19, ... > * (dotimes (i 1000000) (eval '(lambda ()))) > set_auto_gc_trigger: tried to set gc trigger too high! (0x802d8e8) > fatal error encountered in SBCL pid 21291: > lost > The system is too badly corrupted ... Hi. This is a particularly nasty instance of bug #135: information about functions named by symbols is stored in a table keyed on the name, coupled with the fact that sbcl's evaluator compiles any mildly tricky expression to a gensymmed function before evaluating it. Because the information is keyed by name, the function named by that name is never collected. Fixing this problem at the root involves a fair amount of surgery to fundamental compiler data structures in a way which is unlikely to be fun. However, to work around this problem of yours (and possibly also other people's similar problems on genetic algorithms code) I've altered the system to compile to a nameless function for EVAL's purposes, which means that this "leak" is slightly harder to trigger. (It can still happen on deleting packages and similar events, but these are probably less likely than calling EVAL in a typical lisp session :-) Cheers, Christophe |