On Mon, Dec 15, 2008 at 11:57 PM, Alejandro Forero Cuervo
<a...@freaks-unidos.net> wrote:
>
> I have a question about finalizers.
>
> If you run the following in csi:
>
>  (define x (list 1 2 3))
>  (begin (set-finalizer! x (lambda (o) (format #t "Delete: ~A~%" o))) #t)
>  (define y (list 4 5 6))
>  (begin (set-finalizer! y (let ((p x)) (lambda (o) (format #t "Delete: ~A: 
> ~A~%" o p)))) #t)
>  (gc #t)
>  (set! x #f)
>  (gc #t)
>
> Why do you get "Delete: (1 2 3)", the output of the finalizer for x,
> even though the finalizer for y depends on the value of x?
>
> Am I misunderstanding the way finalizer procedures get executed?
>

A bug. The finalizer itself is not considered in the calculation whether
something is still referenced or not (I think). I have to investigate.


cheers,
felix


_______________________________________________
Chicken-users mailing list
Chicken-users@nongnu.org
http://lists.nongnu.org/mailman/listinfo/chicken-users

Reply via email to