Kingfisher icon indicating copy to clipboard operation
Kingfisher copied to clipboard

ImageProgressive.swift:121 Crash

Open b-onc opened this issue 4 months ago • 2 comments

Check List

Thanks for considering to open an issue. Before you submit your issue, please confirm these boxes are checked.

Issue Description

We're using Kingfisher 7.10.2 via Carthage.

When loading multiple images using Swift concurrency, sometimes we see a crash originating from ImageProgressive.swift:121

What

We have this code:

Task {
  let images = await withTaskGroup(of: [UUID: UIImage].self) { group in
      var results = [UUID: UIImage]()
  
      for entry in imageTemplates { // `imageTemplates` is of type `[(uuid: UUID, url: URL)]`
          group.addTask {
              await withCheckedContinuation { continuation in
                  KingfisherManager.shared.retrieveImage(
                      with: .network(entry.url),
                      options: kingfisherHeadersOptions, // some headers so we can load images from our CDN
                      progressBlock: nil,
                      downloadTaskUpdated: nil
                  ) { [weak self] result in
                      guard let self else {
                          return
                      }
                      switch result {
                      case let .success(imageResult):
                          continuation.resume(returning: [entry.uuid: imageResult])
                      case let .failure(error):
                          // Handle error
                      }
                  }
              }
          }
      }
  
      for await dict in group {
          results.merge(dict) { $1 }
      }
  
      return results
  }

  // Do something with `images`
}

Our aim is to concurrently load multiple images and keep the ordering in a given array. The code works almost always. Sometimes we see the loading fail due to various reasons but that's not the topic of this issue.

We see a crash originating from this part of the code. It looks like this: image

This looks like #1449 but that issue is quite old, Swift Concurrency wasn't available back then. Perhaps it's somewhat related?

Reproduce

Unfortunately we are not able to reproduce the issue.

b-onc avatar Mar 04 '24 16:03 b-onc