Ivan Shmakov | 22 Jul 04:12

finalizers vs. weak pointers

	Seemingly, weak pointers are invalidated before the finalizers
	for the object are run.  I wonder, what is the reason behind
	such a behaviour?

foo> (define weak-pointer
       (let* ((s (string #\f #\o #\o))
              (w (make-weak-pointer s)))
         (add-finalizer! s
                         (lambda (obj)
                           (write `(finalizing: ,obj))
                           (newline)
                           (write `(weak-pointer
                                    => ,(weak-pointer-ref w)))
                           (newline)))
         w))
; no values returned
foo> ,collect
Before: 2009301 out of 3000000 words available
After:  2038984 out of 3000000 words available
foo> (finalizing: "foo")
(weak-pointer => #f)

foo> 


Gmane