From 75b7afbd63be9b27d3bd964891720e8c16079280 Mon Sep 17 00:00:00 2001 From: Renato Filho Date: Fri, 19 Feb 2010 17:10:24 -0300 Subject: Fixed memory leak on callbacks used on signal connection. Now using the 'destroyed()' signal the reference is cleaned after source object destroyed. --- tests/signals/multiple_connections_test.py | 4 ++-- tests/signals/pysignal_test.py | 12 ++++++++++++ tests/signals/qobject_receivers_test.py | 4 ++-- 3 files changed, 16 insertions(+), 4 deletions(-) (limited to 'tests/signals') diff --git a/tests/signals/multiple_connections_test.py b/tests/signals/multiple_connections_test.py index d2a207673..9f45f4da4 100644 --- a/tests/signals/multiple_connections_test.py +++ b/tests/signals/multiple_connections_test.py @@ -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, diff --git a/tests/signals/pysignal_test.py b/tests/signals/pysignal_test.py index 3d741dcca..639a7dee2 100644 --- a/tests/signals/pysignal_test.py +++ b/tests/signals/pysignal_test.py @@ -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.""" diff --git a/tests/signals/qobject_receivers_test.py b/tests/signals/qobject_receivers_test.py index e1d429ec6..cb4c9ced8 100644 --- a/tests/signals/qobject_receivers_test.py +++ b/tests/signals/qobject_receivers_test.py @@ -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 -- cgit v1.2.3