diff options
| author | Juho Hautala <juho.hautala@iki.fi> | 2026-02-22 19:16:34 -0800 |
|---|---|---|
| committer | Jacob Walls <jacobtylerwalls@gmail.com> | 2026-03-17 17:08:18 -0400 |
| commit | ba4751e0ca558dd8f0d9e6153bec4280289ca2f4 (patch) | |
| tree | 70d82804ae12344179731b15fbf29ea2e4d846e1 /django | |
| parent | 37284896f08e120505c8c01918b9d6bba03c2204 (diff) | |
Fixed #36939 -- Avoided weakref.finalize in Signal.connect().
Replaced weak receiver registration in Signal.connect() to pass
_flag_dead_receivers directly as the callback for weakref.ref() and
weakref.WeakMethod() instead of creating weakref.finalize() objects.
This prevented finalizer accumulation in repeated weak
connect()/disconnect() cycles where receivers remain alive.
Diffstat (limited to 'django')
| -rw-r--r-- | django/dispatch/dispatcher.py | 5 |
1 files changed, 1 insertions, 4 deletions
diff --git a/django/dispatch/dispatcher.py b/django/dispatch/dispatcher.py index d4a6eff2bc..aef6a942b1 100644 --- a/django/dispatch/dispatcher.py +++ b/django/dispatch/dispatcher.py @@ -154,13 +154,10 @@ class Signal: if weak: ref = weakref.ref - receiver_object = receiver # Check for bound methods if hasattr(receiver, "__self__") and hasattr(receiver, "__func__"): ref = weakref.WeakMethod - receiver_object = receiver.__self__ - receiver = ref(receiver) - weakref.finalize(receiver_object, self._flag_dead_receivers) + receiver = ref(receiver, self._flag_dead_receivers) # Keep a weakref to sender if possible to ensure associated receivers # are cleared if it gets garbage collected. This ensures there is no |
