From 24a158c2d3889c86ca76641320718b6cabba5dd4 Mon Sep 17 00:00:00 2001 From: Igor Skovorodkin Date: Sun, 9 May 2021 00:29:42 +0300 Subject: [PATCH] MultipleImageFetcher crashfix Sync access to fetch results to avoid race condition crash --- Sources/Shared/Fetcher/MultipleImageFetcher.swift | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/Sources/Shared/Fetcher/MultipleImageFetcher.swift b/Sources/Shared/Fetcher/MultipleImageFetcher.swift index 530c471..0192d6e 100644 --- a/Sources/Shared/Fetcher/MultipleImageFetcher.swift +++ b/Sources/Shared/Fetcher/MultipleImageFetcher.swift @@ -5,6 +5,7 @@ public class MultipleImageFetcher { private var fetchers: [ImageFetcher] = [] private let fetcherMaker: () -> ImageFetcher + private let syncQueue: DispatchQueue = .init(label: "multiple.fetcher.queue") public init(fetcherMaker: @escaping () -> ImageFetcher) { self.fetcherMaker = fetcherMaker @@ -26,11 +27,15 @@ public class MultipleImageFetcher { var results: [Result] = [] zip(fetchers, urls).forEach { fetcher, url in - fetcher.fetch(url: url, completion: { result in + fetcher.fetch(url: url, completion: { [weak self] result in + guard let self = self else { return } + each?(result) - results.append(result) - + self.syncQueue.sync { + results.append(result) + } + if results.count == urls.count { completion?(results) }