diff --git a/modules/swagger-codegen/src/main/resources/swift4/AlamofireImplementations.mustache b/modules/swagger-codegen/src/main/resources/swift4/AlamofireImplementations.mustache index 381fddcc81f..ed89576c8a3 100644 --- a/modules/swagger-codegen/src/main/resources/swift4/AlamofireImplementations.mustache +++ b/modules/swagger-codegen/src/main/resources/swift4/AlamofireImplementations.mustache @@ -19,6 +19,8 @@ class AlamofireRequestBuilderFactory: RequestBuilderFactory { // Store manager to retain its reference private var managerStore: [String: Alamofire.SessionManager] = [:] +// Concurrent queue to save sessionmanagers thread safe +private let concurrentQueue = DispatchQueue(label: "concurrentQueue", attributes: .concurrent) open class AlamofireRequestBuilder: RequestBuilder { required public init(method: String, URLString: String, parameters: [String : Any]?, isBody: Bool, headers: [String : String] = [:]) { @@ -58,7 +60,9 @@ open class AlamofireRequestBuilder: RequestBuilder { let managerId:String = UUID().uuidString // Create a new manager for each request to customize its request header let manager = createSessionManager() - managerStore[managerId] = manager + concurrentQueue.async(flags: .barrier) { + managerStore[managerId] = manager + } let encoding:ParameterEncoding = isBody ? JSONDataEncoding() : URLEncoding() @@ -112,7 +116,9 @@ open class AlamofireRequestBuilder: RequestBuilder { } let cleanupRequest = { - _ = managerStore.removeValue(forKey: managerId) + concurrentQueue.async(flags: .barrier) { + _ = managerStore.removeValue(forKey: managerId) + } } let validatedRequest = request.validate() @@ -314,7 +320,9 @@ open class AlamofireDecodableRequestBuilder: AlamofireRequestBuilde } let cleanupRequest = { - _ = managerStore.removeValue(forKey: managerId) + concurrentQueue.async(flags: .barrier) { + _ = managerStore.removeValue(forKey: managerId) + } } let validatedRequest = request.validate()