@@ -20,6 +20,9 @@ class AlamofireRequestBuilderFactory: RequestBuilderFactory {
2020// Store manager to retain its reference
2121private 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+
2326open 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