[PyQt] segfault when using qml (probably reference counting error)

Phil Thompson phil at riverbankcomputing.com
Fri Mar 18 20:55:53 GMT 2011


On Fri, 18 Mar 2011 16:20:23 +0000, Phil Thompson
<phil at riverbankcomputing.com> wrote:
> On Fri, 18 Mar 2011 10:54:16 -0500, Rex Dieter <rdieter at math.unl.edu>
> wrote:
>> Quoting downstream bug report,
>> https://bugzilla.redhat.com/show_bug.cgi?id=676042
>> 
>> (Using PyQt-4.8.3)...
>> 
>> When running some simple PyQt4 + QML apps, a segfault can be produced
> when 
>> the QML tries to make use of an object that is exposed to it by the
PyQt
> 
>> code. Changing the code very slightly so that the PyQt4 code has an
> extra 
>> reference to the object removes the segfault.  This likely means that a

>> reference to the object is not being created in the PyQt4 declarative
> code.
>> 
>> the downstream bug also includes some sample code as a test-case.
> 
> It's a feature, not a bug...
> 
> PyQt correctly gives an extra reference to the Stopwatch context object
to
> the QDeclarativeContext returned by rootContext() to prevent it being
> garbage collected. However the QDeclarativeContext Python object (not
the
> C++ instance) is itself garbage collected and so the extra reference is
> then discarded.
> 
> Therefore you need to keep an explicit reference to the Stopwatch
instance
> (as in your workaround), or the value returned by rootContext(), or give
> the Stopwatch instance a sensible parent.

...on second thoughts I can make this work. Should be fixed in tonight's
SIP and PyQt snapshots.

Phil


More information about the PyQt mailing list