[pypy-dev] GC problems with PyObject

Carl Friedrich Bolz cfbolz at gmx.de
Wed Mar 22 11:44:42 CET 2006


Hi Christian!

Christian Tismer wrote:
> I spent the last two days hunting refcounting problems
> with pypy generated extension modules.
>
> After infinitely long staring at the final flow graphs,
> I found out that our transition to the gctransform
> is not as complete as I assumed. Impossible too find
> by flow graphs, because we are still chiming extra increfs
> in from the backend, see funcgen.py .
>
> I tried to solve this by disabling all the extra increfs,
> but this doesn't work, yet. Something else must be adjusted.
> 
> The problem is an inconsistency about how getattr is handled.
> The code in funcgen.py always adds an incref when we access
> a field or array item of a PyObject.

I am not exactly surprised. When we wrote the gctransformer we were 
mostly annoyed by PyObjects and did the minimal thing to make all tests 
that use them pass.

> In gctransformation.py, there are deallocators created,
> which produce code like
> 
>   v_xxx = obj.xxx
>   pop_alive(v_xxx)
> 
> but this doesn't work for PyOnject, since funcget.py adds
> an extra ref, and the object stays as alive as it was before.
> 
> I hoped to solve this, assuming that our gc code is generic
> enough to get this right for PyObject as well. Maybe I'm missing
> something, have to give up. I'm probably anyway interfering
> with other people's work.

It would be quite helpful if you checked in a small test that shows the 
faulty behaviour. It's a bit hard to look for the problem if you have no 
way to reproduce it.

Anyway, as I said, the gctransformer is a complete mess right now and 
needs a rewrite -- which we will tackle as soon as we found out why our 
exception transformation crashes.

Cheers,

Carl Friedrich



More information about the Pypy-dev mailing list