From 45b7d60263da75363a3a3fa8caff1532da1e384c Mon Sep 17 00:00:00 2001 From: Shane Smiskol Date: Thu, 4 Dec 2025 01:56:38 -0800 Subject: [PATCH] ui: fix dialog memory leak (#36767) * weakref alternative * and here * clean up * fix * rm --- selfdrive/ui/mici/widgets/dialog.py | 10 ++++++++++ system/ui/widgets/__init__.py | 2 +- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/selfdrive/ui/mici/widgets/dialog.py b/selfdrive/ui/mici/widgets/dialog.py index b11056f99..26845765c 100644 --- a/selfdrive/ui/mici/widgets/dialog.py +++ b/selfdrive/ui/mici/widgets/dialog.py @@ -40,6 +40,11 @@ class BigDialogBase(NavWidget, abc.ABC): # move to right side self._right_btn._rect.x = self._rect.x + self._rect.width - self._right_btn._rect.width + def hide_event(self): + # Free reference to self to allow refcount to go to zero + super().hide_event() + self.set_back_callback(None) + def _render(self, _) -> DialogResult: """ Allows `gui_app.set_modal_overlay(BigDialog(...))`. @@ -163,6 +168,11 @@ class BigInputDialog(BigDialogBase): confirm_callback(self._keyboard.text()) self._confirm_callback = confirm_callback_wrapper + def hide_event(self): + # Free reference to self to allow refcount to go to zero + super().hide_event() + self._confirm_callback = None + def _update_state(self): super()._update_state() diff --git a/system/ui/widgets/__init__.py b/system/ui/widgets/__init__.py index 546c682f3..efa35bc01 100644 --- a/system/ui/widgets/__init__.py +++ b/system/ui/widgets/__init__.py @@ -252,7 +252,7 @@ class NavWidget(Widget, abc.ABC): def set_back_enabled(self, enabled: bool | Callable[[], bool]) -> None: self._back_enabled = enabled - def set_back_callback(self, callback: Callable[[], None]) -> None: + def set_back_callback(self, callback: Callable[[], None] | None) -> None: self._back_callback = callback def _handle_mouse_event(self, mouse_event: MouseEvent) -> None: