forked from loafle/openapi-generator-original
[swift5] URLSession: Fix memory leak of SessionDelegate (#8558)
* Remove unused stored reference of delegate. URLSession keeps a strong reference anyway. * Fix cleanup * Update samples
This commit is contained in:
parent
2553d056dc
commit
64f5dc8077
@ -24,9 +24,6 @@ private var urlSessionStore = SynchronizedDictionary<String, URLSession>()
|
||||
|
||||
{{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}open{{/nonPublicApi}} class URLSessionRequestBuilder<T>: RequestBuilder<T> {
|
||||
|
||||
// swiftlint:disable:next weak_delegate
|
||||
fileprivate let sessionDelegate = SessionDelegate()
|
||||
|
||||
/**
|
||||
May be assigned if you want to control the authentication challenges.
|
||||
*/
|
||||
@ -52,6 +49,7 @@ private var urlSessionStore = SynchronizedDictionary<String, URLSession>()
|
||||
{{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}open{{/nonPublicApi}} func createURLSession() -> URLSession {
|
||||
let configuration = URLSessionConfiguration.default
|
||||
configuration.httpAdditionalHeaders = buildHeaders()
|
||||
let sessionDelegate = SessionDelegate()
|
||||
sessionDelegate.credential = credential
|
||||
sessionDelegate.taskDidReceiveChallenge = taskDidReceiveChallenge
|
||||
return URLSession(configuration: configuration, delegate: sessionDelegate, delegateQueue: nil)
|
||||
@ -126,6 +124,7 @@ private var urlSessionStore = SynchronizedDictionary<String, URLSession>()
|
||||
}
|
||||
|
||||
let cleanupRequest = {
|
||||
urlSessionStore[urlSessionId]?.finishTasksAndInvalidate()
|
||||
urlSessionStore[urlSessionId] = nil
|
||||
}
|
||||
|
||||
@ -144,12 +143,14 @@ private var urlSessionStore = SynchronizedDictionary<String, URLSession>()
|
||||
} else {
|
||||
apiResponseQueue.async {
|
||||
self.processRequestResponse(urlRequest: request, data: data, response: response, error: error, completion: completion)
|
||||
cleanupRequest()
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
apiResponseQueue.async {
|
||||
self.processRequestResponse(urlRequest: request, data: data, response: response, error: error, completion: completion)
|
||||
cleanupRequest()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -24,9 +24,6 @@ private var urlSessionStore = SynchronizedDictionary<String, URLSession>()
|
||||
|
||||
open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
|
||||
|
||||
// swiftlint:disable:next weak_delegate
|
||||
fileprivate let sessionDelegate = SessionDelegate()
|
||||
|
||||
/**
|
||||
May be assigned if you want to control the authentication challenges.
|
||||
*/
|
||||
@ -52,6 +49,7 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
|
||||
open func createURLSession() -> URLSession {
|
||||
let configuration = URLSessionConfiguration.default
|
||||
configuration.httpAdditionalHeaders = buildHeaders()
|
||||
let sessionDelegate = SessionDelegate()
|
||||
sessionDelegate.credential = credential
|
||||
sessionDelegate.taskDidReceiveChallenge = taskDidReceiveChallenge
|
||||
return URLSession(configuration: configuration, delegate: sessionDelegate, delegateQueue: nil)
|
||||
@ -126,6 +124,7 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
|
||||
}
|
||||
|
||||
let cleanupRequest = {
|
||||
urlSessionStore[urlSessionId]?.finishTasksAndInvalidate()
|
||||
urlSessionStore[urlSessionId] = nil
|
||||
}
|
||||
|
||||
@ -144,12 +143,14 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
|
||||
} else {
|
||||
apiResponseQueue.async {
|
||||
self.processRequestResponse(urlRequest: request, data: data, response: response, error: error, completion: completion)
|
||||
cleanupRequest()
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
apiResponseQueue.async {
|
||||
self.processRequestResponse(urlRequest: request, data: data, response: response, error: error, completion: completion)
|
||||
cleanupRequest()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -24,9 +24,6 @@ private var urlSessionStore = SynchronizedDictionary<String, URLSession>()
|
||||
|
||||
open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
|
||||
|
||||
// swiftlint:disable:next weak_delegate
|
||||
fileprivate let sessionDelegate = SessionDelegate()
|
||||
|
||||
/**
|
||||
May be assigned if you want to control the authentication challenges.
|
||||
*/
|
||||
@ -52,6 +49,7 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
|
||||
open func createURLSession() -> URLSession {
|
||||
let configuration = URLSessionConfiguration.default
|
||||
configuration.httpAdditionalHeaders = buildHeaders()
|
||||
let sessionDelegate = SessionDelegate()
|
||||
sessionDelegate.credential = credential
|
||||
sessionDelegate.taskDidReceiveChallenge = taskDidReceiveChallenge
|
||||
return URLSession(configuration: configuration, delegate: sessionDelegate, delegateQueue: nil)
|
||||
@ -126,6 +124,7 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
|
||||
}
|
||||
|
||||
let cleanupRequest = {
|
||||
urlSessionStore[urlSessionId]?.finishTasksAndInvalidate()
|
||||
urlSessionStore[urlSessionId] = nil
|
||||
}
|
||||
|
||||
@ -144,12 +143,14 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
|
||||
} else {
|
||||
apiResponseQueue.async {
|
||||
self.processRequestResponse(urlRequest: request, data: data, response: response, error: error, completion: completion)
|
||||
cleanupRequest()
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
apiResponseQueue.async {
|
||||
self.processRequestResponse(urlRequest: request, data: data, response: response, error: error, completion: completion)
|
||||
cleanupRequest()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -24,9 +24,6 @@ private var urlSessionStore = SynchronizedDictionary<String, URLSession>()
|
||||
|
||||
open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
|
||||
|
||||
// swiftlint:disable:next weak_delegate
|
||||
fileprivate let sessionDelegate = SessionDelegate()
|
||||
|
||||
/**
|
||||
May be assigned if you want to control the authentication challenges.
|
||||
*/
|
||||
@ -52,6 +49,7 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
|
||||
open func createURLSession() -> URLSession {
|
||||
let configuration = URLSessionConfiguration.default
|
||||
configuration.httpAdditionalHeaders = buildHeaders()
|
||||
let sessionDelegate = SessionDelegate()
|
||||
sessionDelegate.credential = credential
|
||||
sessionDelegate.taskDidReceiveChallenge = taskDidReceiveChallenge
|
||||
return URLSession(configuration: configuration, delegate: sessionDelegate, delegateQueue: nil)
|
||||
@ -126,6 +124,7 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
|
||||
}
|
||||
|
||||
let cleanupRequest = {
|
||||
urlSessionStore[urlSessionId]?.finishTasksAndInvalidate()
|
||||
urlSessionStore[urlSessionId] = nil
|
||||
}
|
||||
|
||||
@ -144,12 +143,14 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
|
||||
} else {
|
||||
apiResponseQueue.async {
|
||||
self.processRequestResponse(urlRequest: request, data: data, response: response, error: error, completion: completion)
|
||||
cleanupRequest()
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
apiResponseQueue.async {
|
||||
self.processRequestResponse(urlRequest: request, data: data, response: response, error: error, completion: completion)
|
||||
cleanupRequest()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -24,9 +24,6 @@ private var urlSessionStore = SynchronizedDictionary<String, URLSession>()
|
||||
|
||||
internal class URLSessionRequestBuilder<T>: RequestBuilder<T> {
|
||||
|
||||
// swiftlint:disable:next weak_delegate
|
||||
fileprivate let sessionDelegate = SessionDelegate()
|
||||
|
||||
/**
|
||||
May be assigned if you want to control the authentication challenges.
|
||||
*/
|
||||
@ -52,6 +49,7 @@ internal class URLSessionRequestBuilder<T>: RequestBuilder<T> {
|
||||
internal func createURLSession() -> URLSession {
|
||||
let configuration = URLSessionConfiguration.default
|
||||
configuration.httpAdditionalHeaders = buildHeaders()
|
||||
let sessionDelegate = SessionDelegate()
|
||||
sessionDelegate.credential = credential
|
||||
sessionDelegate.taskDidReceiveChallenge = taskDidReceiveChallenge
|
||||
return URLSession(configuration: configuration, delegate: sessionDelegate, delegateQueue: nil)
|
||||
@ -126,6 +124,7 @@ internal class URLSessionRequestBuilder<T>: RequestBuilder<T> {
|
||||
}
|
||||
|
||||
let cleanupRequest = {
|
||||
urlSessionStore[urlSessionId]?.finishTasksAndInvalidate()
|
||||
urlSessionStore[urlSessionId] = nil
|
||||
}
|
||||
|
||||
@ -144,12 +143,14 @@ internal class URLSessionRequestBuilder<T>: RequestBuilder<T> {
|
||||
} else {
|
||||
apiResponseQueue.async {
|
||||
self.processRequestResponse(urlRequest: request, data: data, response: response, error: error, completion: completion)
|
||||
cleanupRequest()
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
apiResponseQueue.async {
|
||||
self.processRequestResponse(urlRequest: request, data: data, response: response, error: error, completion: completion)
|
||||
cleanupRequest()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -24,9 +24,6 @@ private var urlSessionStore = SynchronizedDictionary<String, URLSession>()
|
||||
|
||||
open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
|
||||
|
||||
// swiftlint:disable:next weak_delegate
|
||||
fileprivate let sessionDelegate = SessionDelegate()
|
||||
|
||||
/**
|
||||
May be assigned if you want to control the authentication challenges.
|
||||
*/
|
||||
@ -52,6 +49,7 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
|
||||
open func createURLSession() -> URLSession {
|
||||
let configuration = URLSessionConfiguration.default
|
||||
configuration.httpAdditionalHeaders = buildHeaders()
|
||||
let sessionDelegate = SessionDelegate()
|
||||
sessionDelegate.credential = credential
|
||||
sessionDelegate.taskDidReceiveChallenge = taskDidReceiveChallenge
|
||||
return URLSession(configuration: configuration, delegate: sessionDelegate, delegateQueue: nil)
|
||||
@ -126,6 +124,7 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
|
||||
}
|
||||
|
||||
let cleanupRequest = {
|
||||
urlSessionStore[urlSessionId]?.finishTasksAndInvalidate()
|
||||
urlSessionStore[urlSessionId] = nil
|
||||
}
|
||||
|
||||
@ -144,12 +143,14 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
|
||||
} else {
|
||||
apiResponseQueue.async {
|
||||
self.processRequestResponse(urlRequest: request, data: data, response: response, error: error, completion: completion)
|
||||
cleanupRequest()
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
apiResponseQueue.async {
|
||||
self.processRequestResponse(urlRequest: request, data: data, response: response, error: error, completion: completion)
|
||||
cleanupRequest()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -24,9 +24,6 @@ private var urlSessionStore = SynchronizedDictionary<String, URLSession>()
|
||||
|
||||
open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
|
||||
|
||||
// swiftlint:disable:next weak_delegate
|
||||
fileprivate let sessionDelegate = SessionDelegate()
|
||||
|
||||
/**
|
||||
May be assigned if you want to control the authentication challenges.
|
||||
*/
|
||||
@ -52,6 +49,7 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
|
||||
open func createURLSession() -> URLSession {
|
||||
let configuration = URLSessionConfiguration.default
|
||||
configuration.httpAdditionalHeaders = buildHeaders()
|
||||
let sessionDelegate = SessionDelegate()
|
||||
sessionDelegate.credential = credential
|
||||
sessionDelegate.taskDidReceiveChallenge = taskDidReceiveChallenge
|
||||
return URLSession(configuration: configuration, delegate: sessionDelegate, delegateQueue: nil)
|
||||
@ -126,6 +124,7 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
|
||||
}
|
||||
|
||||
let cleanupRequest = {
|
||||
urlSessionStore[urlSessionId]?.finishTasksAndInvalidate()
|
||||
urlSessionStore[urlSessionId] = nil
|
||||
}
|
||||
|
||||
@ -144,12 +143,14 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
|
||||
} else {
|
||||
apiResponseQueue.async {
|
||||
self.processRequestResponse(urlRequest: request, data: data, response: response, error: error, completion: completion)
|
||||
cleanupRequest()
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
apiResponseQueue.async {
|
||||
self.processRequestResponse(urlRequest: request, data: data, response: response, error: error, completion: completion)
|
||||
cleanupRequest()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -24,9 +24,6 @@ private var urlSessionStore = SynchronizedDictionary<String, URLSession>()
|
||||
|
||||
open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
|
||||
|
||||
// swiftlint:disable:next weak_delegate
|
||||
fileprivate let sessionDelegate = SessionDelegate()
|
||||
|
||||
/**
|
||||
May be assigned if you want to control the authentication challenges.
|
||||
*/
|
||||
@ -52,6 +49,7 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
|
||||
open func createURLSession() -> URLSession {
|
||||
let configuration = URLSessionConfiguration.default
|
||||
configuration.httpAdditionalHeaders = buildHeaders()
|
||||
let sessionDelegate = SessionDelegate()
|
||||
sessionDelegate.credential = credential
|
||||
sessionDelegate.taskDidReceiveChallenge = taskDidReceiveChallenge
|
||||
return URLSession(configuration: configuration, delegate: sessionDelegate, delegateQueue: nil)
|
||||
@ -126,6 +124,7 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
|
||||
}
|
||||
|
||||
let cleanupRequest = {
|
||||
urlSessionStore[urlSessionId]?.finishTasksAndInvalidate()
|
||||
urlSessionStore[urlSessionId] = nil
|
||||
}
|
||||
|
||||
@ -144,12 +143,14 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
|
||||
} else {
|
||||
apiResponseQueue.async {
|
||||
self.processRequestResponse(urlRequest: request, data: data, response: response, error: error, completion: completion)
|
||||
cleanupRequest()
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
apiResponseQueue.async {
|
||||
self.processRequestResponse(urlRequest: request, data: data, response: response, error: error, completion: completion)
|
||||
cleanupRequest()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -24,9 +24,6 @@ private var urlSessionStore = SynchronizedDictionary<String, URLSession>()
|
||||
|
||||
open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
|
||||
|
||||
// swiftlint:disable:next weak_delegate
|
||||
fileprivate let sessionDelegate = SessionDelegate()
|
||||
|
||||
/**
|
||||
May be assigned if you want to control the authentication challenges.
|
||||
*/
|
||||
@ -52,6 +49,7 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
|
||||
open func createURLSession() -> URLSession {
|
||||
let configuration = URLSessionConfiguration.default
|
||||
configuration.httpAdditionalHeaders = buildHeaders()
|
||||
let sessionDelegate = SessionDelegate()
|
||||
sessionDelegate.credential = credential
|
||||
sessionDelegate.taskDidReceiveChallenge = taskDidReceiveChallenge
|
||||
return URLSession(configuration: configuration, delegate: sessionDelegate, delegateQueue: nil)
|
||||
@ -126,6 +124,7 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
|
||||
}
|
||||
|
||||
let cleanupRequest = {
|
||||
urlSessionStore[urlSessionId]?.finishTasksAndInvalidate()
|
||||
urlSessionStore[urlSessionId] = nil
|
||||
}
|
||||
|
||||
@ -144,12 +143,14 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
|
||||
} else {
|
||||
apiResponseQueue.async {
|
||||
self.processRequestResponse(urlRequest: request, data: data, response: response, error: error, completion: completion)
|
||||
cleanupRequest()
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
apiResponseQueue.async {
|
||||
self.processRequestResponse(urlRequest: request, data: data, response: response, error: error, completion: completion)
|
||||
cleanupRequest()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -24,9 +24,6 @@ private var urlSessionStore = SynchronizedDictionary<String, URLSession>()
|
||||
|
||||
open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
|
||||
|
||||
// swiftlint:disable:next weak_delegate
|
||||
fileprivate let sessionDelegate = SessionDelegate()
|
||||
|
||||
/**
|
||||
May be assigned if you want to control the authentication challenges.
|
||||
*/
|
||||
@ -52,6 +49,7 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
|
||||
open func createURLSession() -> URLSession {
|
||||
let configuration = URLSessionConfiguration.default
|
||||
configuration.httpAdditionalHeaders = buildHeaders()
|
||||
let sessionDelegate = SessionDelegate()
|
||||
sessionDelegate.credential = credential
|
||||
sessionDelegate.taskDidReceiveChallenge = taskDidReceiveChallenge
|
||||
return URLSession(configuration: configuration, delegate: sessionDelegate, delegateQueue: nil)
|
||||
@ -126,6 +124,7 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
|
||||
}
|
||||
|
||||
let cleanupRequest = {
|
||||
urlSessionStore[urlSessionId]?.finishTasksAndInvalidate()
|
||||
urlSessionStore[urlSessionId] = nil
|
||||
}
|
||||
|
||||
@ -144,12 +143,14 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
|
||||
} else {
|
||||
apiResponseQueue.async {
|
||||
self.processRequestResponse(urlRequest: request, data: data, response: response, error: error, completion: completion)
|
||||
cleanupRequest()
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
apiResponseQueue.async {
|
||||
self.processRequestResponse(urlRequest: request, data: data, response: response, error: error, completion: completion)
|
||||
cleanupRequest()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -24,9 +24,6 @@ private var urlSessionStore = SynchronizedDictionary<String, URLSession>()
|
||||
|
||||
open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
|
||||
|
||||
// swiftlint:disable:next weak_delegate
|
||||
fileprivate let sessionDelegate = SessionDelegate()
|
||||
|
||||
/**
|
||||
May be assigned if you want to control the authentication challenges.
|
||||
*/
|
||||
@ -52,6 +49,7 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
|
||||
open func createURLSession() -> URLSession {
|
||||
let configuration = URLSessionConfiguration.default
|
||||
configuration.httpAdditionalHeaders = buildHeaders()
|
||||
let sessionDelegate = SessionDelegate()
|
||||
sessionDelegate.credential = credential
|
||||
sessionDelegate.taskDidReceiveChallenge = taskDidReceiveChallenge
|
||||
return URLSession(configuration: configuration, delegate: sessionDelegate, delegateQueue: nil)
|
||||
@ -126,6 +124,7 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
|
||||
}
|
||||
|
||||
let cleanupRequest = {
|
||||
urlSessionStore[urlSessionId]?.finishTasksAndInvalidate()
|
||||
urlSessionStore[urlSessionId] = nil
|
||||
}
|
||||
|
||||
@ -144,12 +143,14 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
|
||||
} else {
|
||||
apiResponseQueue.async {
|
||||
self.processRequestResponse(urlRequest: request, data: data, response: response, error: error, completion: completion)
|
||||
cleanupRequest()
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
apiResponseQueue.async {
|
||||
self.processRequestResponse(urlRequest: request, data: data, response: response, error: error, completion: completion)
|
||||
cleanupRequest()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user