fix: clear pending pings to avoid promise leaks on connection close/suspend
Some checks failed
ci / macos (push) Has been cancelled
ci / ios (push) Has been cancelled
ci / check-linter (push) Has been cancelled

- Add cancel() method to RttCommand to fail promise on connection close
- Add dequeueAll() method to ConcurrentQueue for batch cleanup
- Call clearPendingPings() in close(), suspend(), and disconnect() methods
- Prevents 'leaking promise' crash when connection is closed while pings are pending
This commit is contained in:
wenzuhuai
2026-01-12 19:16:56 +08:00
parent d7bdb4f378
commit 153e600bbc
3 changed files with 31 additions and 0 deletions

View File

@@ -36,4 +36,9 @@ internal class RttCommand {
func getRoundTripTime() async throws -> TimeInterval {
try await promise?.futureResult.get() ?? 0
}
/// Cancel the ping request to avoid promise leaks when connection is closed
func cancel() {
promise?.fail(NatsError.ClientError.connectionClosed)
}
}