From e035e6842a31338781f1ea70e68f929eac53d662 Mon Sep 17 00:00:00 2001 From: Tim Besard Date: Thu, 2 Jul 2026 17:59:09 +0200 Subject: [PATCH] fix(ddc): stop crash on DDC volume change --- FineTune/Audio/DDC/DDCController.swift | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/FineTune/Audio/DDC/DDCController.swift b/FineTune/Audio/DDC/DDCController.swift index 52141704..3abada56 100644 --- a/FineTune/Audio/DDC/DDCController.swift +++ b/FineTune/Audio/DDC/DDCController.swift @@ -81,14 +81,16 @@ final class DDCController { settingsManager.setDDCVolume(for: uid, to: clamped) } - // Debounce DDC write + // Keep the work item @Sendable and avoid `self`; otherwise it inherits + // @MainActor isolation here and traps when run on `ddcQueue`. debounceTimers[deviceID]?.cancel() let service = services[deviceID] - let item = DispatchWorkItem { [weak self] in + let logger = self.logger + let item = DispatchWorkItem { @Sendable in do { try service?.setAudioVolume(clamped) } catch { - self?.logger.error("DDC write failed for device \(deviceID): \(error)") + logger.error("DDC write failed for device \(deviceID): \(error)") } } debounceTimers[deviceID] = item