@@ -20,6 +20,9 @@ class AlamofireRequestBuilderFactory: RequestBuilderFactory {
20
20
// Store manager to retain its reference
21
21
private var managerStore: [String: Alamofire.SessionManager] = [:]
22
22
23
+ // Sync queue to manage safe access to the store manager
24
+ private let syncQueue = DispatchQueue(label: "thread-safe-sync-queue", attributes: .concurrent)
25
+
23
26
open class AlamofireRequestBuilder<T >: RequestBuilder<T > {
24
27
required public init(method: String, URLString: String, parameters: [String : Any]?, isBody: Bool, headers: [String : String] = [:]) {
25
28
super.init(method: method, URLString: URLString, parameters: parameters, isBody: isBody, headers: headers)
@@ -58,7 +61,9 @@ open class AlamofireRequestBuilder<T>: RequestBuilder<T> {
58
61
let managerId:String = UUID().uuidString
59
62
// Create a new manager for each request to customize its request header
60
63
let manager = createSessionManager()
61
- managerStore[managerId] = manager
64
+ syncQueue.async(flags: .barrier) {
65
+ managerStore[managerId] = manager
66
+ }
62
67
63
68
let encoding:ParameterEncoding = isBody ? JSONDataEncoding() : URLEncoding()
64
69
@@ -112,7 +117,9 @@ open class AlamofireRequestBuilder<T>: RequestBuilder<T> {
112
117
}
113
118
114
119
let cleanupRequest = {
115
- _ = managerStore.removeValue(forKey: managerId)
120
+ syncQueue.async(flags: .barrier) {
121
+ _ = managerStore.removeValue(forKey: managerId)
122
+ }
116
123
}
117
124
118
125
let validatedRequest = request.validate()
@@ -314,7 +321,9 @@ open class AlamofireDecodableRequestBuilder<T:Decodable>: AlamofireRequestBuilde
314
321
}
315
322
316
323
let cleanupRequest = {
317
- _ = managerStore.removeValue(forKey: managerId)
324
+ syncQueue.async(flags: .barrier) {
325
+ _ = managerStore.removeValue(forKey: managerId)
326
+ }
318
327
}
319
328
320
329
let validatedRequest = request.validate()
0 commit comments