From affe1218dc368f909ee46fcd5f1713ccb800757a Mon Sep 17 00:00:00 2001 From: David Perl Date: Mon, 16 Mar 2026 12:56:50 +0100 Subject: [PATCH] fix: check duplicate stream sub --- bec_widgets/utils/bec_dispatcher.py | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/bec_widgets/utils/bec_dispatcher.py b/bec_widgets/utils/bec_dispatcher.py index 8c5690c1..47766dc6 100644 --- a/bec_widgets/utils/bec_dispatcher.py +++ b/bec_widgets/utils/bec_dispatcher.py @@ -176,12 +176,15 @@ class BECDispatcher: cb_info (dict | None): A dictionary containing information about the callback. Defaults to None. """ qt_slot = QtThreadSafeCallback(cb=slot, cb_info=cb_info) - if qt_slot not in self._registered_slots: - self._registered_slots[qt_slot] = qt_slot - qt_slot = self._registered_slots[qt_slot] - self.client.connector.register(topics, cb=qt_slot, **kwargs) - topics_str, _ = self.client.connector._convert_endpointinfo(topics) - qt_slot.topics.update(set(topics_str)) + if not self.client.connector.any_stream_is_registered(topics, qt_slot): + if qt_slot not in self._registered_slots: + self._registered_slots[qt_slot] = qt_slot + qt_slot = self._registered_slots[qt_slot] + self.client.connector.register(topics, cb=qt_slot, **kwargs) + topics_str, _ = self.client.connector._convert_endpointinfo(topics) + qt_slot.topics.update(set(topics_str)) + else: + logger.warning(f"Attempted to create duplicate stream subscription for {topics=}") def disconnect_slot( self, slot: Callable, topics: EndpointInfo | str | list[EndpointInfo] | list[str]