mirror of
https://github.com/django/django.git
synced 2025-07-20 09:39:13 +00:00
Fixed #9989: fixed a subtle edge case where removing signals could break. Thanks, ferringb. Backport of r10398 from trunk.
git-svn-id: http://code.djangoproject.com/svn/django/branches/releases/1.0.X@10399 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
50d3ebf72a
commit
35c30ee957
@ -120,9 +120,10 @@ class Signal(object):
|
|||||||
else:
|
else:
|
||||||
lookup_key = (_make_id(receiver), _make_id(sender))
|
lookup_key = (_make_id(receiver), _make_id(sender))
|
||||||
|
|
||||||
for idx, (r_key, _) in enumerate(self.receivers):
|
for index in xrange(len(self.receivers)):
|
||||||
|
(r_key, _) = self.receivers[index]
|
||||||
if r_key == lookup_key:
|
if r_key == lookup_key:
|
||||||
del self.receivers[idx]
|
del self.receivers[index]
|
||||||
|
|
||||||
def send(self, sender, **named):
|
def send(self, sender, **named):
|
||||||
"""Send signal from sender to all connected receivers.
|
"""Send signal from sender to all connected receivers.
|
||||||
|
@ -96,4 +96,15 @@ instance.id is None: False
|
|||||||
>>> models.signals.pre_delete.disconnect(pre_delete_test)
|
>>> models.signals.pre_delete.disconnect(pre_delete_test)
|
||||||
>>> models.signals.post_save.disconnect(post_save_test)
|
>>> models.signals.post_save.disconnect(post_save_test)
|
||||||
>>> models.signals.pre_save.disconnect(pre_save_test)
|
>>> models.signals.pre_save.disconnect(pre_save_test)
|
||||||
|
|
||||||
|
# Make sure all the signals got removed properly (#9989)
|
||||||
|
>>> models.signals.post_delete.receivers
|
||||||
|
[]
|
||||||
|
>>> models.signals.pre_delete.receivers
|
||||||
|
[]
|
||||||
|
>>> models.signals.post_save.receivers
|
||||||
|
[]
|
||||||
|
>>> models.signals.pre_save.receivers
|
||||||
|
[]
|
||||||
|
|
||||||
"""}
|
"""}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user