>>>>> "rif" == rif  <[EMAIL PROTECTED]> writes:

    rif> It seems that if I unintern a symbol without first setting its value
    rif> to nil, the value is never GC'd.  For example, in a fresh CMUCL
    rif> post-18e (2003-08-15), with a first gc to flush garbage from
    rif> initialization/startup:

    rif> (gc :full t)
    rif> ; [GC threshold exceeded with 27,760,320 bytes in use.  Commencing GC.]
    rif> ; [GC completed with 5,547,208 bytes retained and 22,213,112 bytes freed.]
    rif> ; [GC will next occur when at least 133,547,208 bytes are in use.]
    rif> NIL
    rif> * (defparameter *a* (random-df-vec 5000000))
    rif> *A*
    rif> * (unintern '*a*)
    rif> T

[snip]

    rif> etc.  I can gc a large number of times, but the vector is not
    rif> collected.  This is not a huge practical problem, because if I setf
    rif> *a* to nil before uninterning, the collection happens, but I am
    rif> curious as to how the large vector could still be accessible. 

This doesn't go away because it's held in a cmucl-internal INFO
database that holds information about all kinds of things like
function and variable types.  (Thanks to Christophe Rhodes and Bill
Newman for explaining this to me.)

Ray


Reply via email to