[pylucene-dev] finalizing the deadly embrace
vajda at osafoundation.org
Thu Jan 17 12:38:47 PST 2008
Thinking about this some more, I believe that Anurag's finalizer proxy idea
is on the right track. It provides the "trick" needed to break the deadly
embrace when the ref count of the python object is down to 1, that is, down
to when the only reference is the one from the Java parent wrapper.
When the finalizer proxy's refcount goes to zero, it is safe to assume that
only Java _may_ still be needing the object. This is enough then to replace
the strong global reference to the Java parent wrapper with a weak global
reference thereby breaking the deadly embrace and letting Java garbage
collect it when its time has come. When that time comes, the finalize()
method on it is normally called by the Java garbage collector and the python
ref count to the Python extension instance is brought to zero and the object
is finally freed.
This assumes, of course, that when such an extension object is instantiated,
the finalizer proxy is actually returned.
I should be able to implement this in C/C++ so that the performance hit
is minimal and in a way that is transparent to PyLucene users.
More on this in the next few days....
More information about the pylucene-dev