From fde912005db61a60707e7181c3425a4557bdc011 Mon Sep 17 00:00:00 2001 From: wakonig_k Date: Sun, 27 Apr 2025 13:45:58 +0200 Subject: [PATCH] fix(cleanup): prevent double cleanup by tracking object destruction state --- bec_widgets/utils/bec_connector.py | 7 ++++++- bec_widgets/utils/bec_widget.py | 4 +++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/bec_widgets/utils/bec_connector.py b/bec_widgets/utils/bec_connector.py index 11b106d6..a50fed70 100644 --- a/bec_widgets/utils/bec_connector.py +++ b/bec_widgets/utils/bec_connector.py @@ -99,6 +99,9 @@ class BECConnector: self, QObject ), "BECConnector must be used with a QObject or any qt related class." + # flag to check if the object was destroyed and its cleanup was called + self._destroyed = False + # BEC related connections self.bec_dispatcher = BECDispatcher(client=client) self.client = self.bec_dispatcher.client if client is None else client @@ -173,7 +176,9 @@ class BECConnector: if not hasattr(self, "cleanup"): return try: - self.cleanup() + if not self._destroyed: + self.cleanup() + self._destroyed = True except Exception: content = traceback.format_exc() logger.info( diff --git a/bec_widgets/utils/bec_widget.py b/bec_widgets/utils/bec_widget.py index b7eb1916..35920c18 100644 --- a/bec_widgets/utils/bec_widget.py +++ b/bec_widgets/utils/bec_widget.py @@ -112,6 +112,8 @@ class BECWidget(BECConnector): def closeEvent(self, event): """Wrap the close even to ensure the rpc_register is cleaned up.""" try: - self.cleanup() + if not self._destroyed: + self.cleanup() + self._destroyed = True finally: super().closeEvent(event) # pylint: disable=no-member