Fetcher: avoid response deadlock (#975)

This commit is contained in:
Nikolay Edigaryev 2024-12-17 01:19:06 +04:00 committed by GitHub
parent e6a30b07e3
commit e27da23f4c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 11 additions and 5 deletions

View File

@ -55,6 +55,7 @@ fileprivate class Delegate: NSObject, URLSessionDataDelegate {
buffer = Data(capacity: Int(capacity))
responseContinuation?.resume(returning: response)
responseContinuation = nil
completionHandler(.allow)
}
@ -76,15 +77,20 @@ fileprivate class Delegate: NSObject, URLSessionDataDelegate {
task: URLSessionTask,
didCompleteWithError error: Error?
) {
if !buffer.isEmpty {
streamContinuation?.yield(buffer)
buffer.removeAll(keepingCapacity: true)
}
if let error = error {
responseContinuation?.resume(throwing: error)
responseContinuation = nil
streamContinuation?.finish(throwing: error)
streamContinuation = nil
} else {
if !buffer.isEmpty {
streamContinuation?.yield(buffer)
buffer.removeAll(keepingCapacity: true)
}
streamContinuation?.finish()
streamContinuation = nil
}
}
}