diff --git a/LCS/Messaging/python/messaging/messagebus.py b/LCS/Messaging/python/messaging/messagebus.py index 827cf0857b51947907b7aeb56ba34ed80225e41a..1cdaf3a819dbd3c82ecf8c91997e18d9e5974c98 100644 --- a/LCS/Messaging/python/messaging/messagebus.py +++ b/LCS/Messaging/python/messaging/messagebus.py @@ -1621,19 +1621,31 @@ class BusListenerJanitor: def __enter__(self) -> BusListener: """enter the context, and make the bus_listener start listening. :return a reference to the buslistener, not to the janitor!""" - self._bus_listener.start_listening() - return self._bus_listener + try: + self.open() + return self._bus_listener + except Exception as e: + logger.exception(e) + self.close() + raise def __exit__(self, exc_type, exc_val, exc_tb): """leave the context, make the bus_listener stop listening, and clean up the auto-generated queue""" + self.close() + + def open(self): + """make the bus_listener start listening.""" + self._bus_listener.start_listening() + + def close(self): + """make the bus_listener stop listening, and delete listener queue""" try: + bus_listener_address = self._bus_listener.address self._bus_listener.stop_listening() - except Exception as e: - logger.error(e) finally: - logger.info("BusListenerJanitor deleting auto-generated queue: %s", self._bus_listener.address) - delete_queue(self._bus_listener.address) + logger.info("BusListenerJanitor deleting auto-generated queue: %s", bus_listener_address) + delete_queue(bus_listener_address) # do not expose create/delete_queue/exchange etc methods in all, it's not part of the public API