From f157ba023050ab6641d98e1835ee8b215b2f7dae Mon Sep 17 00:00:00 2001 From: Subeom Choi Date: Wed, 17 Apr 2024 21:05:27 +0900 Subject: [PATCH] fix: add lock to client --- Source/Network/Implement/Client/DataClient.swift | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/Source/Network/Implement/Client/DataClient.swift b/Source/Network/Implement/Client/DataClient.swift index 13434dc..5486eb7 100644 --- a/Source/Network/Implement/Client/DataClient.swift +++ b/Source/Network/Implement/Client/DataClient.swift @@ -15,6 +15,7 @@ public final class DataClient: Client { public typealias Request = Data? public typealias Response = Data? + let lock = Lock() var storage = [ObjectIdentifier: PromisePending, Error>]() let session: URLSession @@ -107,10 +108,14 @@ extension DataClient { task.resume() + lock.lock() storage[ObjectIdentifier(pending)] = pending + lock.unlock() let remove = { [weak self, weak pending] in guard let self, let pending else { return } - self.storage[ObjectIdentifier(pending)] = nil + self.lock.lock() + self.storage.removeValue(forKey: ObjectIdentifier(pending)) + self.lock.unlock() } pending.promise.subscribe( onResolved: { _ in remove() },