Fixed memory leak on callbacks used on signal connection.
Now using the 'destroyed()' signal the reference is cleaned after source object destroyed.
This commit is contained in:
parent
ab738e07d2
commit
75b7afbd63
11 changed files with 212 additions and 84 deletions
|
|
@ -23,7 +23,7 @@ class QObjectReceivers(unittest.TestCase):
|
|||
self.assertEqual(obj.receivers(SIGNAL("destroyed()")), 0)
|
||||
|
||||
QObject.connect(obj, SIGNAL("destroyed()"), self.cb)
|
||||
self.assertEqual(obj.receivers(SIGNAL("destroyed()")), 1)
|
||||
self.assertEqual(obj.receivers(SIGNAL("destroyed()")), 0)
|
||||
|
||||
def testQThreadReceiversExtern(self):
|
||||
#QThread.receivers() - Inherited protected method
|
||||
|
|
@ -31,7 +31,7 @@ class QObjectReceivers(unittest.TestCase):
|
|||
obj = QThread()
|
||||
self.assertEqual(obj.receivers(SIGNAL('destroyed()')), 0)
|
||||
QObject.connect(obj, SIGNAL("destroyed()"), self.cb)
|
||||
self.assertEqual(obj.receivers(SIGNAL("destroyed()")), 1)
|
||||
self.assertEqual(obj.receivers(SIGNAL("destroyed()")), 0)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ from helper import BasicPySlotCase, UsesQCoreApplication
|
|||
from helper.decorators import requires
|
||||
|
||||
|
||||
def random_gen(count=100, largest=99, lowest=0):
|
||||
def random_gen(count=50, largest=49, lowest=0):
|
||||
for i in range(count):
|
||||
yield random.randint(lowest, largest)
|
||||
|
||||
|
|
@ -50,7 +50,7 @@ class PythonMultipleSlots(UsesQCoreApplication, MultipleSignalConnections):
|
|||
class Dummy(QObject):
|
||||
pass
|
||||
|
||||
for test in random_gen(30):
|
||||
for test in random_gen(20):
|
||||
sender = Dummy()
|
||||
receivers = [BasicPySlotCase() for x in range(10)]
|
||||
self.run_many(sender, 'foobar', partial(sender.emit,
|
||||
|
|
|
|||
|
|
@ -50,6 +50,18 @@ class PythonSigSlot(unittest.TestCase):
|
|||
self.assert_(self.called)
|
||||
|
||||
|
||||
def testDisconnect(self):
|
||||
obj1 = Dummy()
|
||||
|
||||
QObject.connect(obj1, SIGNAL('foo(int)'), self.callback)
|
||||
QObject.disconnect(obj1, SIGNAL('foo(int)'), self.callback)
|
||||
|
||||
self.args = (42, )
|
||||
obj1.emit(SIGNAL('foo(int)'), *self.args)
|
||||
|
||||
self.assert_(not self.called)
|
||||
|
||||
|
||||
@requires('PySide.QtGui')
|
||||
class SpinBoxPySignal(UsesQApplication):
|
||||
"""Tests the connection of python signals to QSpinBox qt slots."""
|
||||
|
|
|
|||
|
|
@ -30,9 +30,9 @@ class TestQObjectReceivers(unittest.TestCase):
|
|||
sender = QObject()
|
||||
receiver = QObject()
|
||||
sender.connect(sender, SIGNAL("destroyed()"), cute_slot)
|
||||
self.assertEqual(sender.receivers(SIGNAL("destroyed( )")), 1)
|
||||
self.assertEqual(sender.receivers(SIGNAL("destroyed( )")), 0)
|
||||
sender.connect(sender, SIGNAL("destroyed()"), receiver, SLOT("deleteLater()"))
|
||||
self.assertEqual(sender.receivers(SIGNAL("destroyed()")), 2)
|
||||
self.assertEqual(sender.receivers(SIGNAL("destroyed()")), 1)
|
||||
del sender
|
||||
del receiver
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue