Prechádzať zdrojové kódy

fix: implement OS agnostic locking.

Riccardo Cipolleschi 5 rokov pred
rodič
commit
72f88b03ca
1 zmenil súbory, kde vykonal 28 pridanie a 0 odobranie
  1. 28 0
      SwiftyStoreKit/ProductsInfoController.swift

+ 28 - 0
SwiftyStoreKit/ProductsInfoController.swift

@@ -44,8 +44,18 @@ class ProductsInfoController: NSObject {
     }
     }
     
     
     let inAppProductRequestBuilder: InAppProductRequestBuilder
     let inAppProductRequestBuilder: InAppProductRequestBuilder
+  
+    private var unfairLock: os_unfair_lock_s!
+    private var spinLock: OSSpinLock!
+  
     init(inAppProductRequestBuilder: InAppProductRequestBuilder = InAppProductQueryRequestBuilder()) {
     init(inAppProductRequestBuilder: InAppProductRequestBuilder = InAppProductQueryRequestBuilder()) {
         self.inAppProductRequestBuilder = inAppProductRequestBuilder
         self.inAppProductRequestBuilder = inAppProductRequestBuilder
+        if #available(iOSApplicationExtension 10.0, *) {
+          self.unfairLock = os_unfair_lock()
+        } else {
+          self.spinLock = OSSpinLock()
+        }
+        super.init()
     }
     }
     
     
     // As we can have multiple inflight requests, we store them in a dictionary by product ids
     // As we can have multiple inflight requests, we store them in a dictionary by product ids
@@ -72,4 +82,22 @@ class ProductsInfoController: NSObject {
             inflightRequests[productIds]!.completionHandlers.append(completion)
             inflightRequests[productIds]!.completionHandlers.append(completion)
         }
         }
     }
     }
+  
+  
+      
+    private func lock() {
+      if #available(iOSApplicationExtension 10.0, *) {
+        os_unfair_lock_lock(&self.unfairLock)
+      } else {
+        OSSpinLockLock(&self.spinLock)
+      }
+    }
+  
+  private func unlock() {
+    if #available(iOSApplicationExtension 10.0, *) {
+      os_unfair_lock_unlock(&self.unfairLock)
+    } else {
+      OSSpinLockUnlock(&self.spinLock)
+    }
+  }
 }
 }