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

@@ -29,4 +29,13 @@ internal class ConcurrentQueue<T> {
guard !elements.isEmpty else { return nil }
return elements.removeFirst()
}
/// Dequeue all elements at once (used for cleanup)
func dequeueAll() -> [T] {
lock.lock()
defer { lock.unlock() }
let all = elements
elements.removeAll()
return all
}
}