From 4b88a62626b9f8b4386431d1125a209f6a2ef600 Mon Sep 17 00:00:00 2001 From: vic Date: Sat, 4 Nov 2023 22:20:39 -0400 Subject: [PATCH] Remove relay fixes - clear subscriptions tracked when closing relay - join and pop queue_threads when removing relay --- nostr/relay.py | 4 +++- nostr/relay_manager.py | 17 +++++++++++------ 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/nostr/relay.py b/nostr/relay.py index 5448e64..9911237 100644 --- a/nostr/relay.py +++ b/nostr/relay.py @@ -68,8 +68,10 @@ class Relay: ) def close(self): - self.ws.close() self.shutdown = True + self.ws.close() + with self.lock: + self.subscriptions = {} def check_reconnect(self): try: diff --git a/nostr/relay_manager.py b/nostr/relay_manager.py index 3eccb63..9c04886 100644 --- a/nostr/relay_manager.py +++ b/nostr/relay_manager.py @@ -27,10 +27,15 @@ class RelayManager: self.relays[url] = relay def remove_relay(self, url: str): - self.relays[url].close() - self.relays.pop(url) - self.threads[url].join(timeout=1) - self.threads.pop(url) + if url in self.relays: + self.relays[url].close() + self.relays.pop(url, None) + if url in self.threads: + self.threads[url].join(timeout=1) + self.threads.pop(url, None) + if url in self.queue_threads: + self.queue_threads[url].join(timeout=1) + self.queue_threads.pop(url, None) def add_subscription(self, id: str, filters: Filters): for relay in self.relays.values(): @@ -51,7 +56,7 @@ class RelayManager: self.threads[relay.url].start() self.queue_threads[relay.url] = threading.Thread( - target=relay.queue_worker, + target=relay.queue_worker, args=(lambda: relay.shutdown,), name=f"{relay.url}-queue", daemon=True, @@ -88,4 +93,4 @@ class RelayManager: raise RelayException( f"Could not publish {auth.id}: failed to verify signature {auth.signature}" ) - self.publish_message(auth.to_message(), auth.relay_url) \ No newline at end of file + self.publish_message(auth.to_message(), auth.relay_url)