fix(macos): prevent gateway request double-resume

This commit is contained in:
Peter Steinberger
2025-12-12 16:52:02 +00:00
parent b0187d7f28
commit cd84c5ad08
2 changed files with 114 additions and 2 deletions

View File

@@ -355,7 +355,8 @@ actor GatewayChannelActor {
do {
try await self.task?.send(.data(data))
} catch {
self.pending.removeValue(forKey: id)
let wrapped = self.wrap(error, context: "gateway send \(method)")
let waiter = self.pending.removeValue(forKey: id)
// Treat send failures as a broken socket: mark disconnected and trigger reconnect.
self.connected = false
self.task?.cancel(with: .goingAway, reason: nil)
@@ -363,7 +364,7 @@ actor GatewayChannelActor {
guard let self else { return }
await self.scheduleReconnect()
}
cont.resume(throwing: self.wrap(error, context: "gateway send \(method)"))
if let waiter { waiter.resume(throwing: wrapped) }
}
}
}