From 75b24467def65284ea6b6114b25098437e31ec95 Mon Sep 17 00:00:00 2001 From: appel_c Date: Mon, 24 Mar 2025 15:24:52 +0100 Subject: [PATCH] fix: server shutdown widgets --- bec_widgets/cli/server.py | 9 +-------- bec_widgets/widgets/containers/dock/dock.py | 10 ++++++++-- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/bec_widgets/cli/server.py b/bec_widgets/cli/server.py index 4c7970ef..ccb60deb 100644 --- a/bec_widgets/cli/server.py +++ b/bec_widgets/cli/server.py @@ -172,9 +172,6 @@ class BECWidgetsCLIServer: # We only need to broadcast the dock areas data = {key: self.serialize_object(val) for key, val in connections.items()} - # logger.info(f"All registered connections: {list(connections.keys())}") - for k, v in data.items(): - logger.info(f"key: {k}, value: {v}") self.client.connector.xadd( MessageEndpoints.gui_registry_state(self.gui_id), msg_dict={"data": messages.GUIRegistryStateMessage(state=data)}, @@ -182,12 +179,9 @@ class BECWidgetsCLIServer: ) def shutdown(self): # TODO not sure if needed when cleanup is done at level of BECConnector - logger.info(f"Shutting down server with gui_id: {self.gui_id}") self.status = messages.BECStatus.IDLE self._heartbeat_timer.stop() self.emit_heartbeat() - logger.info(f"Shutting down app with {self.gui.gui_id}") - self.gui.close() logger.info("Succeded in shutting down gui") self.client.shutdown() @@ -318,11 +312,10 @@ def main(): def sigint_handler(*args): # display message, for people to let it terminate gracefully print("Caught SIGINT, exiting") - # Close all widgets + # Widgets should be all closed. with RPCRegister.delayed_broadcast(): for widget in QApplication.instance().topLevelWidgets(): widget.close() - app.quit() # gui.bec.close() diff --git a/bec_widgets/widgets/containers/dock/dock.py b/bec_widgets/widgets/containers/dock/dock.py index 23251a30..6f0c5874 100644 --- a/bec_widgets/widgets/containers/dock/dock.py +++ b/bec_widgets/widgets/containers/dock/dock.py @@ -406,14 +406,20 @@ class BECDock(BECWidget, Dock): """ Clean up the dock, including all its widgets. """ + # # FIXME Cleanup might be called twice + try: + logger.info(f"Cleaning up dock {self.name()}") + self.label.close() + self.label.deleteLater() + except Exception as e: + logger.error(f"Error while closing dock label: {e}") + # Remove the dock from the parent dock area if self.parent_dock_area: self.parent_dock_area.dock_area.docks.pop(self.name(), None) self.parent_dock_area.config.docks.pop(self.name(), None) self.delete_all() self.widgets.clear() - self.label.close() - self.label.deleteLater() super().cleanup() def close(self):