[prev in list] [next in list] [prev in thread] [next in thread]
List: pykde
Subject: Re: [PyQt] Regressions on destruction of objects?
From: Phil Thompson <phil () riverbankcomputing ! co ! uk>
Date: 2009-10-29 7:56:42
Message-ID: 2f90d0a7e42e08956182af2770f42726 () localhost
[Download RAW message or body]
On Thu, 29 Oct 2009 00:37:14 +0100, Giovanni Bajo <rasky@develer.com>
wrote:
> On Wed, 28 Oct 2009 22:14:41 +0000, Phil Thompson
> <phil@riverbankcomputing.co.uk> wrote:
>> On Wed, 28 Oct 2009 19:35:44 +0100, Giovanni Bajo <rasky@develer.com>
>> wrote:
>>> Hi Phil,
>>>
>>> I'm testing PyQt 4.6.1 and SIP 4.9.1 over my small regression testsuite
>>> (it contains testcases for bugs that I have reported to you over the
>>> years and that you have fixed).
>>>
>>> There are 4 testcases failing with the new SIP/PyQt pair, but they all
>>> seem related to the same issue. Try this one:
>>>
>>> =====================================================================
>>> #!/usr/bin/env python
>>> from PyQt4.Qt import *
>>>
>>> a = QObject(None)
>>>
>>> called = []
>>> def myslot():
>>> called.append(True)
>>>
>>> QObject.connect(a, SIGNAL("destroyed()"), a, SIGNAL("QUIT()"))
>>> QObject.connect(a, SIGNAL("destroyed()"), myslot)
>>> QObject.connect(a, SIGNAL("QUIT()"), myslot)
>>>
>>> del a
>>> assert len(called) == 2, len(called)
>>> =====================================================================
>>>
>>> I would say this should work, right?
>>
>> Fixed in tonight's PyQt snapshot (and test added to the test suite).
>
> Can you send me the patch please?
Attached.
Phil
["destroyed.diff" (text/x-diff)]
--- PyQt/trunk/4/qpy/QtCore/qpycore_pyqtproxy.cpp (revision 2662)
+++ PyQt/trunk/4/qpy/QtCore/qpycore_pyqtproxy.cpp (revision 2674)
@@ -217,7 +217,10 @@
// by making the proxy a child of the transmitter. This doesn't work as
// expected because QWidget destroys its children before emitting the
- // destroyed signal.)
+ // destroyed signal.) We use a queued connection in case the proxy is also
+ // connected to the same signal and we want to make sure it has a chance
+ // to invoke the slot before being destroyed.
if (qtx)
- connect(qtx, SIGNAL(destroyed(QObject *)), SLOT(disable()));
+ connect(qtx, SIGNAL(destroyed(QObject *)), SLOT(disable()),
+ Qt::QueuedConnection);
}
_______________________________________________
PyQt mailing list PyQt@riverbankcomputing.com
http://www.riverbankcomputing.com/mailman/listinfo/pyqt
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic