From 8a6229e69bba5d3b72a685003400e30407d99fde Mon Sep 17 00:00:00 2001 From: Kostia Kolesnyk Date: Fri, 13 Oct 2023 20:03:32 +0300 Subject: [PATCH] Fix memory safety issue --- Sources/Mockingjay/MockingjayProtocol.swift | 29 +++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/Sources/Mockingjay/MockingjayProtocol.swift b/Sources/Mockingjay/MockingjayProtocol.swift index 50f5cf7..6f2687a 100644 --- a/Sources/Mockingjay/MockingjayProtocol.swift +++ b/Sources/Mockingjay/MockingjayProtocol.swift @@ -28,10 +28,35 @@ public func ==(lhs:Stub, rhs:Stub) -> Bool { return lhs.uuid == rhs.uuid } -var stubs = [Stub]() -var registered: Bool = false +class MockingjayStorage { + static let shared = MockingjayStorage() + + var stubs: [Stub] { + get { accessQueue.sync { _stubs } } + set { accessQueue.sync { _stubs = newValue } } + } + + var registered: Bool { + get { accessQueue.sync { _registered } } + set { accessQueue.sync { _registered = newValue } } + } + + private var _stubs = [Stub]() + private var _registered: Bool = false + private var accessQueue: DispatchQueue { DispatchQueue(label: "MockingjayStorageQueue", qos: .default) } +} public class MockingjayProtocol: URLProtocol { + private class var storage: MockingjayStorage { .shared } + private class var stubs: [Stub] { + get { storage.stubs } + set { storage.stubs = newValue } + } + private class var registered: Bool { + get { storage.registered } + set { storage.registered = newValue } + } + // MARK: Stubs fileprivate var enableDownloading = true fileprivate let operationQueue = OperationQueue()