On 1/21/2007 5:43 PM, Phil Thompson wrote:

I think I have managed to produce a (convoluted) testcase for what
appears to be a reference leak introduced by recent SIP versions. It
ought to be when you added support for lambda expressions as slots.
I think I know the problem: sipWrapper_traverse() does not know anything
about lambda expressions in slots. Thus, the GC can't fully traverse the
lambda expressions (whose reference is being kept by the sender object),
and can't do a full collection of all unreachable items.

I could attempt a fix but I'm not sure how you want to deal with it, since
the signal/slot part is pretty internal of qtlib.c, while
sipWrapper_traverse() is in siplib.c. Also, I don't fully understand all
the semantics of sipSlot (all the combinations of possible NULLs/values for
its members) so I'd rather leave this to you.

Should be fixed in tonight's SIP and PyQt3/4 snapshots.

The testcase is indeed fixed, but my application still crashes just as before. Just sticking qApp.processEvents() and/or gc.collect() before destroying qApp only changes the segfault into weird AttributeErrors/RuntimeErrors about resurrected Python wrappers and such.

I will work on it to further analyze and reduce these problems into simple testcases, but not right now and probably not today. I'd suggest you not to spin an official release right now, though :)

I suspect that these fixes represent most of the work needed to allow SIP to take a reference to non-lambda slots as well. Can you come up with a similar test case for that scenario?

I am not sure how to do it. I think you should just be bold, add support for it, and then wait for me to come back and complain with crashes and bugs... but please allow me a few days to analyze the *current* problems and do proper bug reports. Adding more things in right now is a recipe for bad headaches to me :)
--
Giovanni Bajo

_______________________________________________
PyKDE mailing list    [email protected]
http://mats.imk.fraunhofer.de/mailman/listinfo/pykde

Reply via email to