[PyQt] sip segfault in disconnectNotify
Phil Thompson
phil at riverbankcomputing.com
Thu Sep 9 15:46:09 BST 2010
On Thu, 09 Sep 2010 16:35:15 +0200, Erik Janssens
<Erik.Janssens at conceptive.be> wrote:
> Hi,
>
> I understand that it's possible to segfault writing
> python code (although in my naive view this should
> not be the case ;)). I'm rather convinced the code
> is not doing anything 'illegal', but it would be helpful
> to have some descriptions on what exactly one can
> do wrong using pyqt with regard to these kind of
> segfaults ?
Typically not keeping a reference to an object. Historically (but I'm not
sure how much it is still the case, particularly with the new-style
connections) sip/PyQt would keep pointers to Python objects without taking
a reference. This was to avoid creating circular references in the days
before the cyclic garbage collector.
> I will try to write a test case for this situation,
> as well as for the deadlocks I mentioned earlier.
>
> Can you maybe comment on the meaning of this line
> in siplib.c
>
> 7288 assert(PyTuple_Check(mro));
>
> It might help me finding the cause at the python
> level.
It's just a sanity check. If Python is working fine then mro will always
be a tuple, and the following call to PyTuple_GET_SIZE() assumes that it
is. If it fails then it is likely that mro has been garbage collected and
the memory reused.
Phil
More information about the PyQt
mailing list