From 06f379bd5ce264aee2f85fd0725bd044e3266fb7 Mon Sep 17 00:00:00 2001
From: Jacob Kaplan-Moss <jacob@jacobian.org>
Date: Fri, 10 Apr 2009 21:40:38 +0000
Subject: [PATCH] [1.0.X] Fixed #10753 -- Fixed regression in dispatcher after
 [10398]. Thanks for the patch and tests, minmax. Backport of r10497 from
 trunk.

git-svn-id: http://code.djangoproject.com/svn/django/branches/releases/1.0.X@10503 bcc190cf-cafb-0310-a4f2-bffc1f526a37
---
 django/dispatch/dispatcher.py                       |  1 +
 .../dispatch/tests/test_dispatcher.py               | 13 +++++++++++++
 2 files changed, 14 insertions(+)

diff --git a/django/dispatch/dispatcher.py b/django/dispatch/dispatcher.py
index bb60fc906d..07377d6411 100644
--- a/django/dispatch/dispatcher.py
+++ b/django/dispatch/dispatcher.py
@@ -124,6 +124,7 @@ class Signal(object):
             (r_key, _) = self.receivers[index]
             if r_key == lookup_key:
                 del self.receivers[index]
+                break
 
     def send(self, sender, **named):
         """Send signal from sender to all connected receivers.
diff --git a/tests/regressiontests/dispatch/tests/test_dispatcher.py b/tests/regressiontests/dispatch/tests/test_dispatcher.py
index baaae9cd95..adf760386c 100644
--- a/tests/regressiontests/dispatch/tests/test_dispatcher.py
+++ b/tests/regressiontests/dispatch/tests/test_dispatcher.py
@@ -103,6 +103,19 @@ class DispatcherTests(unittest.TestCase):
         a_signal.disconnect(fails)
         self._testIsClean(a_signal)
 
+    def testDisconnection(self):
+        receiver_1 = Callable()
+        receiver_2 = Callable()
+        receiver_3 = Callable()
+        a_signal.connect(receiver_1)
+        a_signal.connect(receiver_2)
+        a_signal.connect(receiver_3)
+        a_signal.disconnect(receiver_1)
+        del receiver_2
+        garbage_collect()
+        a_signal.disconnect(receiver_3)
+        self._testIsClean(a_signal)
+
 def getSuite():
     return unittest.makeSuite(DispatcherTests,'test')