Browse Source

Resolving pending response handler bug

Essan Parto 11 years ago
parent
commit
7779ae0ce3
1 changed files with 8 additions and 6 deletions
  1. 8 6
      Source/Alamofire.swift

+ 8 - 6
Source/Alamofire.swift

@@ -321,13 +321,16 @@ public class Manager {
 
     class SessionDelegate: NSObject, NSURLSessionDelegate, NSURLSessionTaskDelegate, NSURLSessionDataDelegate, NSURLSessionDownloadDelegate {
         private var subdelegates: [Int: Request.TaskDelegate]
+        private let subdelegateQueue = dispatch_queue_create(nil, DISPATCH_QUEUE_SERIAL)
         private subscript(task: NSURLSessionTask) -> Request.TaskDelegate? {
             get {
                 return subdelegates[task.taskIdentifier]
             }
-
+            
             set {
-                subdelegates[task.taskIdentifier] = newValue
+                dispatch_sync(subdelegateQueue) {
+                    self.subdelegates[task.taskIdentifier] = newValue
+                }
             }
         }
 
@@ -625,12 +628,11 @@ public class Request {
         :returns: The request.
     */
     public func response(queue: dispatch_queue_t? = nil, serializer: Serializer, completionHandler: (NSURLRequest, NSHTTPURLResponse?, AnyObject?, NSError?) -> Void) -> Self {
-        let delegate = self.delegate
-        dispatch_async(delegate.queue) { [weak delegate] in
-            let (responseObject: AnyObject?, serializationError: NSError?) = serializer(self.request, self.response, delegate?.data)
+        dispatch_async(delegate.queue) {
+            let (responseObject: AnyObject?, serializationError: NSError?) = serializer(self.request, self.response, self.delegate.data)
 
             dispatch_async(queue ?? dispatch_get_main_queue()) {
-                completionHandler(self.request, self.response, responseObject, delegate?.error ?? serializationError)
+                completionHandler(self.request, self.response, responseObject, self.delegate.error ?? serializationError)
             }
         }