Quellcode durchsuchen

[PR #2190] Added an NSLock for the task delegate’s task.

* Add an NSLock for the task delegate’s task.

* Cleanup whitespace.

* Move private variable below internal ones.
Jon Shier vor 8 Jahren
Ursprung
Commit
70e5be022d
1 geänderte Dateien mit 14 neuen und 3 gelöschten Zeilen
  1. 14 3
      Source/TaskDelegate.swift

+ 14 - 3
Source/TaskDelegate.swift

@@ -40,17 +40,28 @@ open class TaskDelegate: NSObject {
     public var error: Error?
 
     var task: URLSessionTask? {
-        didSet { reset() }
+        set {
+            taskLock.lock(); defer { taskLock.unlock() }
+            _task = newValue
+        }
+        get {
+            taskLock.lock(); defer { taskLock.unlock() }
+            return _task
+        }
     }
-
     var initialResponseTime: CFAbsoluteTime?
     var credential: URLCredential?
     var metrics: AnyObject? // URLSessionTaskMetrics
+    
+    private var _task: URLSessionTask? {
+        didSet { reset() }
+    }
+    private let taskLock = NSLock()
 
     // MARK: Lifecycle
 
     init(task: URLSessionTask?) {
-        self.task = task
+        _task = task
 
         self.queue = {
             let operationQueue = OperationQueue()