Wrap the `getValue` logic in a `performMap` to ensure thread safety

pull/1061/head
Morgan Pretty 2 months ago
parent 2642d3925e
commit e1f38f3761

@ -386,7 +386,10 @@ private extension Dependencies {
/// Convenience method to retrieve the existing dependency instance from memory in a thread-safe way
private func getValue<T>(_ key: String, of variant: DependencyStorage.Key.Variant) -> T? {
guard let typedValue: DependencyStorage.Value = storage.instances[variant.key(key)] else { return nil }
return _storage.performMap { storage in
guard let typedValue: DependencyStorage.Value = storage.instances[variant.key(key)] else {
return nil
}
guard let result: T = typedValue.value(as: T.self) else {
/// If there is a value stored for the key, but it's not the right type then something has gone wrong, and we should log
Log.critical("Failed to convert stored dependency '\(variant.key(key))' to expected type: \(T.self)")
@ -395,6 +398,7 @@ private extension Dependencies {
return result
}
}
/// Convenience method to store a dependency instance in memory in a thread-safe way
@discardableResult private func setValue<T>(_ value: T, typedStorage: DependencyStorage.Value, key: String) -> T {

Loading…
Cancel
Save