[Ecls-list] Bug report (?) and two questions
worm
worm at arrakis.es
Wed Nov 28 10:59:01 UTC 2001
> Thanks for your reply. I've investigated this a little further, and
> here's what I got.
> 1. I compiled the function. If I do this, (FAC 10000) works fine - but
> only once: If I submit something like (DOTIMES (N 10) (FAC 10000)),
> I get lots of messages like
> Needed to allocate blacklisted block at 0x99a9000
Then this is a problem with the Boehm-Weiser garbage collector. This
collector keeps a list of memory that it believes to be unreclaimable.
If this list gets too large, then the amount of allocatable memory
drops down to zero. This surely deserves investigation, but it would
help me if you could try the same program, on the same platform but
building ECLS with --disable-boehm. That reverts to the original
garbage collector, which may or may not work on your version of Unix.
> One other thing that I noticed (by accident): If I compile this
> function
> (defun foo (x)
> (gc)
> x)
> and then call it like (FOO 3), I get a message like
> Function FOO requires one argument,
> but only zero were supplied.
This is trickier. Calls to functions from within compiled code are not
registered in the Invocation History Stack. This is due for performance
reasons. Therefore, when you call (foo 3) the topmost record on the IHS
is your call to FOO, and not the call to GC, which is the one that
causes the error.
All I can do for now is to fix the error message to display something
like:
"A compiled function with one argument has been called
with only one. Offending call occurs inside function ~S"
where ~S is the name of the topmost registered frame (FOO in this case)
Juanjo
More information about the ecl-devel
mailing list