Marius Vollmer wrote:
Han-Wen Nienhuys <[EMAIL PROTECTED]> writes:


I've found a memory leak in GUILE.

The contents of modules are not garbage collected.


I believe this is fixed in CVS HEAD now in the 'proper' way:

    guile> (define g (make-guardian))
    guile> (g (make-module))
    guile> (gc)
    guile> (g)
    #<module b7b859b0>

The fix consists of storing procedure properties in a weak key
hashtable (as you did), and fixing weak hashtables so that cycles from
the value back to the key get properly collected.

I'm not convinced that you have fixed the original problem. I've CVS upped GUILE, and now LilyPond is again soaring to 750mb memory footprints while processing many trivial files. The problem is a little more acute, since I've upped the GC yield for performance reasons.

And... this version of Lily even has the kludge I built for 1.6: ie. clearing the 'module property, and replacing scm_stand_in_procs with a weak key hash table.


I think this change is a too large to go into 1.6, tho.  Is there a
workaround that you could put into your code, such as

    (set-procedure-property! (module-eval-closure M) 'module #f)

in an appropriate place?



--
 Han-Wen Nienhuys - [EMAIL PROTECTED] - http://www.xs4all.nl/~hanwen


_______________________________________________
Guile-devel mailing list
Guile-devel@gnu.org
http://lists.gnu.org/mailman/listinfo/guile-devel

Reply via email to