ffc team mailing list archive
-
ffc team
-
Mailing list archive
-
Message #04156
Re: [Ufl] [Bug 769811] [NEW] JIT cache problem with id(form)
On 26 April 2011 17:47, Martin Sandve Alnæs <martinal@xxxxxxxxx> wrote:
> On 26 April 2011 17:08, Johan Hake <johan.hake@xxxxxxxxx> wrote:
>
>> On Tuesday April 26 2011 01:01:55 Martin Sandve Alnæs wrote:
>> > I'm not sure if this is safe or even solves anything.
>> > If there are circular references a.b = b; b.a = a,
>> > a.__del__ won't be called if the reference from
>> > b.a is still intact, since a.__del__ is called when
>> > the reference count of a goes to 0. Adding the
>> > __del__ function will also stop the cyclic reference
>> > detection in Python from cleaning up. That is my
>> > understanding after reading
>> > http://docs.python.org/reference/datamodel.html
>> > just now. Correct me if I'm wrong!
>>
>> If the above situation was correct you would be right. As it is now a
>> preprocessed form keeps a reference to form_data and form_data keeps a
>> reference to the preprocessed form => Ciruclar dependency.
>>
>
> I.e. a.b = b; b.a = a.
>
> I tried to break that by deleting the preprocessed form from its form_data,
>> when the original form is deleted (not the preprocessed one.) When this
>> happens the preprocessed form will be deleted (I guess).
>>
>
> A guess is not enough :)
>
> I don't feel confident about the __del__ patch.
> As you say, removing the circular references sounds like a better solution.
>
A possible tool for breaking the cycle:
http://docs.python.org/library/weakref.html
Martin
Follow ups
References