Skip to content

Commit 17432ed

Browse files
committed
fix: use weakref of event handlers in event_handlers_queue
1 parent 291ff97 commit 17432ed

File tree

3 files changed

+19
-11
lines changed

3 files changed

+19
-11
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
## Version 0.12.7
44

55
- fix: automatically unsubscribe autoruns when the weakref is dead
6+
- fix: use weakref of event handlers in `event_handlers_queue`
67

78
## Version 0.12.6
89

redux/main.py

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -141,18 +141,18 @@ def _run_actions(self: Store[State, Action, Event]) -> None:
141141
def _run_event_handlers(self: Store[State, Action, Event]) -> None:
142142
event = self._events.pop(0)
143143
for event_handler_, options in self._event_handlers[type(event)].copy():
144-
if isinstance(event_handler_, weakref.ref):
145-
event_handler = event_handler_()
146-
if event_handler is None:
147-
self._event_handlers[type(event)].discard(
148-
(event_handler_, options),
149-
)
150-
continue
151-
else:
152-
event_handler = event_handler_
153144
if not options.immediate_run:
154-
self._event_handlers_queue.put((event_handler, event))
145+
self._event_handlers_queue.put((event_handler_, event))
155146
else:
147+
if isinstance(event_handler_, weakref.ref):
148+
event_handler = event_handler_()
149+
if event_handler is None:
150+
self._event_handlers[type(event)].discard(
151+
(event_handler_, options),
152+
)
153+
continue
154+
else:
155+
event_handler = event_handler_
156156
if len(signature(event_handler).parameters) == 1:
157157
result = cast(Callable[[Event], Any], event_handler)(event)
158158
else:

redux/side_effect_runner.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
from __future__ import annotations
44

55
import threading
6+
import weakref
67
from asyncio import iscoroutine
78
from inspect import signature
89
from typing import TYPE_CHECKING, Any, Callable, Generic, cast
@@ -36,7 +37,13 @@ def run(self: SideEffectRunnerThread[Event]) -> None:
3637
break
3738

3839
try:
39-
event_handler, event = task
40+
event_handler_, event = task
41+
if isinstance(event_handler_, weakref.ref):
42+
event_handler = event_handler_()
43+
if event_handler is None:
44+
continue
45+
else:
46+
event_handler = event_handler_
4047
if len(signature(event_handler).parameters) == 1:
4148
result = cast(Callable[[Event], Any], event_handler)(event)
4249
else:

0 commit comments

Comments
 (0)