[PyQt] segfault when using Qt.QueuedConnection

Phil Thompson phil at riverbankcomputing.com
Fri Aug 26 11:27:18 BST 2011


On Thu, 25 Aug 2011 17:18:13 +0200, Erik Janssens
<Erik.Janssens at conceptive.be> wrote:
> Hi,
> 
> After lots of tries I have been able to get a stacktrace
> + core of a segfault that I believe occurs from time to time.
> 
> The attached stacktrace shows the segfault is inside the QT
> event loop, without even involving Python.
> 
> What I believe that happens is this :
> 
> 1) A signal is connected to a slot with a queued connection.
> 
> 2) within PyQtProxy::unislot, the sender() mehtod is
>    called on a QObject
> 
> 3) the documentation of sender() however states that the
>    returned pointer is only valid if the sending object has
>    not been deleted yet.
> 
> I think the segfault occurs because sometimes this object
> has been deleted allready, and thus the casting of the 
> sender object to its type segfaults the application sometimes.
> 
> Best regards and thanks for any view on this.
> 
> Erik

I think the only place PyQt uses the sender (rather than just remembering
its value for possible future wrapping as a Python QObject) is in the
qobject_cast call at the beginning of PyQtProxy::unislot(). This is only
done to support short circuit signals. Assuming you don't use these can you
try replacing the cast with 0 so that the if () test always fails?

Thanks,
Phil


More information about the PyQt mailing list