From c2720dc5f085d70412f9502c4ded5d0624722813 Mon Sep 17 00:00:00 2001 From: kean Date: Mon, 6 May 2024 20:08:48 -0400 Subject: [PATCH] Make sure that legacy API continues setting state on the callback queue --- Sources/Nuke/ImageTask.swift | 6 ++++-- Sources/Nuke/Pipeline/ImagePipeline.swift | 4 +++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/Sources/Nuke/ImageTask.swift b/Sources/Nuke/ImageTask.swift index abf55a498..5c62cfa37 100644 --- a/Sources/Nuke/ImageTask.swift +++ b/Sources/Nuke/ImageTask.swift @@ -224,10 +224,12 @@ public final class ImageTask: Hashable, CustomStringConvertible, @unchecked Send } /// Synchronized on `pipeline.queue`. - private func _setState(_ state: State) -> Bool { + func _setState(_ state: State) -> Bool { guard _state == .running else { return false } _state = state - withLock { $0.state = state } + if onEvent == nil { + withLock { $0.state = state } + } return true } diff --git a/Sources/Nuke/Pipeline/ImagePipeline.swift b/Sources/Nuke/Pipeline/ImagePipeline.swift index 32b152502..f9ad8a897 100644 --- a/Sources/Nuke/Pipeline/ImagePipeline.swift +++ b/Sources/Nuke/Pipeline/ImagePipeline.swift @@ -217,7 +217,9 @@ public final class ImagePipeline: @unchecked Sendable { case .progress(let value): progress?(nil, value) case .preview(let response): progress?(response, task.currentProgress) case .cancelled: break // The legacy APIs do not send cancellation events - case .finished(let result): completion(result) + case .finished(let result): + _ = task._setState(.completed) // Important to do it on the callback queue + completion(result) } } }