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:
Renato Filho 2010-02-19 17:10:24 -03:00
commit 75b7afbd63
11 changed files with 212 additions and 84 deletions

View file

@ -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__':

View file

@ -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,

View file

@ -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."""

View file

@ -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