Browse Source

[Issue #175] Refining dispatch-based synchronized access to subdelegates

Mattt Thompson 11 years ago
parent
commit
923c009859
1 changed files with 8 additions and 3 deletions
  1. 8 3
      Source/Alamofire.swift

+ 8 - 3
Source/Alamofire.swift

@@ -337,14 +337,19 @@ 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 let subdelegateQueue = dispatch_queue_create(nil, DISPATCH_QUEUE_CONCURRENT)
         private subscript(task: NSURLSessionTask) -> Request.TaskDelegate? {
             get {
-                return subdelegates[task.taskIdentifier]
+                var subdelegate: Request.TaskDelegate?
+                dispatch_sync(subdelegateQueue) {
+                    subdelegate = self.subdelegates[task.taskIdentifier]
+                }
+
+                return subdelegate
             }
             
             set {
-                dispatch_sync(subdelegateQueue) {
+                dispatch_barrier_async(subdelegateQueue) {
                     self.subdelegates[task.taskIdentifier] = newValue
                 }
             }