Преглед на файлове

Merge pull request #1394 from bguidolim/fix-state-race-condition

Fixes race condition for State of CacheCallbackCoordinator
Wei Wang преди 6 години
родител
ревизия
7290dbb3e8
променени са 1 файла, в които са добавени 8 реда и са изтрити 1 реда
  1. 8 1
      Sources/General/KingfisherManager.swift

+ 8 - 1
Sources/General/KingfisherManager.swift

@@ -627,12 +627,19 @@ class CacheCallbackCoordinator {
 
 
     private let shouldWaitForCache: Bool
     private let shouldWaitForCache: Bool
     private let shouldCacheOriginal: Bool
     private let shouldCacheOriginal: Bool
+    private let stateQueue: DispatchQueue
+    private var threadSafeState: State = .idle
 
 
-    private (set) var state: State = .idle
+    private (set) var state: State {
+        set { stateQueue.sync { threadSafeState = newValue } }
+        get { stateQueue.sync { threadSafeState } }
+    }
 
 
     init(shouldWaitForCache: Bool, shouldCacheOriginal: Bool) {
     init(shouldWaitForCache: Bool, shouldCacheOriginal: Bool) {
         self.shouldWaitForCache = shouldWaitForCache
         self.shouldWaitForCache = shouldWaitForCache
         self.shouldCacheOriginal = shouldCacheOriginal
         self.shouldCacheOriginal = shouldCacheOriginal
+        let stateQueueName = "com.onevcat.Kingfisher.CacheCallbackCoordinator.stateQueue.\(UUID().uuidString)"
+        self.stateQueue = DispatchQueue(label: stateQueueName)
     }
     }
 
 
     func apply(_ action: Action, trigger: () -> Void) {
     func apply(_ action: Action, trigger: () -> Void) {