[Zope-dev] Zope Head (2.8) breaks "refresh"

Dieter Maurer dieter at handshake.de
Mon Dec 15 07:34:27 EST 2003


Jeremy Hylton wrote at 2003-12-8 15:28 -0500:
>On Mon, 2003-12-08 at 13:17, Dieter Maurer wrote:
>> Jeremy Hylton wrote at 2003-12-7 23:01 -0500:
>> >On Sun, 2003-12-07 at 08:15, Dieter Maurer wrote:
>> >>   ATT: replacing the cache without clearing it can lead to huge
>> >>   memory leaks (everything in the old cache is leaked!).
>> >
>> >Without commenting on the rest of the bug report, I should mention that
>> >caches and persistent objects all participate in cyclic GC.  They will
>> >not leak the way pre-2.8 caches did.
>> 
>> Has the "do not free when a cycle contains an object with destructor"
>> restriction been removed from the cyclic GC?
>> 
>> It is not unlikely that the cache references an object with a "__del__".
>> This may keep the cache and all its content.
>
>I don't think it makes a lot of sense to put an __del__ method on a
>Persistent object.

I just read in "cPersistence.c:ghostify":

    /* We remove the reference to the just ghosted object that the ring
     * holds.  Note that the dictionary of oids->objects has an uncounted
     * reference, so if the ring's reference was the only one, this frees
     * the ghost object.  Note further that the object's dealloc knows to
     * inform the dictionary that it is going away.
     */

This means: *all* persistent objects have a special "dealloc"
function. Hope, this "dealloc" function plays well with the
cyclic garbage collector.

-- 
Dieter



More information about the Zope-Dev mailing list