Skip to content

Commit 46c4663

Browse files
authored
Merge pull request #9499 from AMiketta/fix-multi-thread-issue
[Swift] fix multi thread issue
2 parents 6f7f156 + e77a8e1 commit 46c4663

File tree

1 file changed

+12
-3
lines changed

1 file changed

+12
-3
lines changed

modules/swagger-codegen/src/main/resources/swift4/AlamofireImplementations.mustache

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,9 @@ class AlamofireRequestBuilderFactory: RequestBuilderFactory {
2020
// Store manager to retain its reference
2121
private var managerStore: [String: Alamofire.SessionManager] = [:]
2222

23+
// Sync queue to manage safe access to the store manager
24+
private let syncQueue = DispatchQueue(label: "thread-safe-sync-queue", attributes: .concurrent)
25+
2326
open class AlamofireRequestBuilder<T>: RequestBuilder<T> {
2427
required public init(method: String, URLString: String, parameters: [String : Any]?, isBody: Bool, headers: [String : String] = [:]) {
2528
super.init(method: method, URLString: URLString, parameters: parameters, isBody: isBody, headers: headers)
@@ -58,7 +61,9 @@ open class AlamofireRequestBuilder<T>: RequestBuilder<T> {
5861
let managerId:String = UUID().uuidString
5962
// Create a new manager for each request to customize its request header
6063
let manager = createSessionManager()
61-
managerStore[managerId] = manager
64+
syncQueue.async(flags: .barrier) {
65+
managerStore[managerId] = manager
66+
}
6267

6368
let encoding:ParameterEncoding = isBody ? JSONDataEncoding() : URLEncoding()
6469

@@ -112,7 +117,9 @@ open class AlamofireRequestBuilder<T>: RequestBuilder<T> {
112117
}
113118

114119
let cleanupRequest = {
115-
_ = managerStore.removeValue(forKey: managerId)
120+
syncQueue.async(flags: .barrier) {
121+
_ = managerStore.removeValue(forKey: managerId)
122+
}
116123
}
117124

118125
let validatedRequest = request.validate()
@@ -314,7 +321,9 @@ open class AlamofireDecodableRequestBuilder<T:Decodable>: AlamofireRequestBuilde
314321
}
315322

316323
let cleanupRequest = {
317-
_ = managerStore.removeValue(forKey: managerId)
324+
syncQueue.async(flags: .barrier) {
325+
_ = managerStore.removeValue(forKey: managerId)
326+
}
318327
}
319328

320329
let validatedRequest = request.validate()

0 commit comments

Comments
 (0)