[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