Phil Thompson <[EMAIL PROTECTED]> wrote:

> I think one way around the problem is to avoid the extra reference to the
> Python object and move the data that it contains into a separate data
> structure. In other words, weaken the link between the Python world and
> the C++ world. My concern would then be stopping the new data structure
> leaking - I need to think about it a bit more.

While I am not able to help you with this design issue, I think I have found
also a GC-counterpart of this bug:

-----------------------------------------
#!/usr/bin/env python
from qt import *

class Foo:
    pass

app = QApplication([])
w1 = QWidget(None)
w2 = QWidget(w1)
w2.xxxx = w1
w2.deleteLater()

f1 = Foo()
f2 = Foo()
f1.w = w1
f2.w = w2
f1.f = f2
f2.f = f1

del w1
del w2
del f1
del f2

app.processEvents()

import gc
gc.collect()

-----------------------------------------
Instead of a segfault, this crashes with an assertion failure in Python
itself (assuming you have assertion enabled): Modules/gcmodule.c:231: failed
assertion `gc->gc.gc_refs != 0'

This is biting me very hard now that you fixed the other GC problem, since
more things are being collected and thus this bug is exposed in many places.
-- 
Giovanni Bajo

_______________________________________________
PyKDE mailing list    PyKDE@mats.imk.fraunhofer.de
http://mats.imk.fraunhofer.de/mailman/listinfo/pykde

Reply via email to