From 89a56eebcddc1e5e421d1638380236c667a0fabd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20D=E2=80=99Aquino?= Date: Sat, 17 Jan 2026 11:29:38 -0800 Subject: [PATCH] Add missing timeout task to advanced stream MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Changelog-Fixed: Fixed an issue that could cause certain networking operations to hang indefinitely Signed-off-by: Daniel D’Aquino --- .../NostrNetworkManager/SubscriptionManager.swift | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/damus/Core/Networking/NostrNetworkManager/SubscriptionManager.swift b/damus/Core/Networking/NostrNetworkManager/SubscriptionManager.swift index 7b25fd29..1ebce515 100644 --- a/damus/Core/Networking/NostrNetworkManager/SubscriptionManager.swift +++ b/damus/Core/Networking/NostrNetworkManager/SubscriptionManager.swift @@ -115,6 +115,13 @@ extension NostrNetworkManager { let id = id ?? UUID() let streamMode = streamMode ?? defaultStreamMode() return AsyncStream { continuation in + let timeoutTask = Task { + guard let timeout else { return } + try? await Task.sleep(for: timeout) + Self.logger.debug("Subscription \(id.uuidString, privacy: .public): Timed out!") + continuation.finish() + } + let startTime = CFAbsoluteTimeGetCurrent() Self.logger.debug("Session subscription \(id.uuidString, privacy: .public): Started") var ndbEOSEIssued = false @@ -213,6 +220,7 @@ extension NostrNetworkManager { } continuation.onTermination = { @Sendable _ in + timeoutTask.cancel() networkStreamTask?.cancel() ndbStreamTask.cancel() }