|
@@ -44,33 +44,27 @@ class ProductsInfoController: NSObject {
|
|
|
}
|
|
|
|
|
|
let inAppProductRequestBuilder: InAppProductRequestBuilder
|
|
|
-
|
|
|
- private var unfairLock: os_unfair_lock_s!
|
|
|
- private var spinLock: OSSpinLock!
|
|
|
+
|
|
|
+ private var spinLock: OSSpinLock
|
|
|
|
|
|
init(inAppProductRequestBuilder: InAppProductRequestBuilder = InAppProductQueryRequestBuilder()) {
|
|
|
self.inAppProductRequestBuilder = inAppProductRequestBuilder
|
|
|
- if #available(iOSApplicationExtension 10.0, *) {
|
|
|
- self.unfairLock = os_unfair_lock()
|
|
|
- } else {
|
|
|
- self.spinLock = OSSpinLock()
|
|
|
- }
|
|
|
- super.init()
|
|
|
+ self.spinLock = OSSpinLock()
|
|
|
}
|
|
|
|
|
|
// As we can have multiple inflight requests, we store them in a dictionary by product ids
|
|
|
private var inflightRequests: [Set<String>: InAppProductQuery] = [:]
|
|
|
|
|
|
func retrieveProductsInfo(_ productIds: Set<String>, completion: @escaping (RetrieveResults) -> Void) {
|
|
|
- self.lock()
|
|
|
+ OSSpinLockLock(&self.spinLock)
|
|
|
defer {
|
|
|
- self.unlock()
|
|
|
+ OSSpinLockUnlock(&self.spinLock)
|
|
|
}
|
|
|
if inflightRequests[productIds] == nil {
|
|
|
let request = inAppProductRequestBuilder.request(productIds: productIds) { results in
|
|
|
- self.lock()
|
|
|
+ OSSpinLockLock(&self.spinLock)
|
|
|
defer {
|
|
|
- self.unlock()
|
|
|
+ OSSpinLockUnlock(&self.spinLock)
|
|
|
}
|
|
|
|
|
|
if let query = self.inflightRequests[productIds] {
|
|
@@ -89,22 +83,4 @@ class ProductsInfoController: NSObject {
|
|
|
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)
|
|
|
- }
|
|
|
- }
|
|
|
}
|