diff --git a/local/recipes/system/driver-manager/source/src/main.rs b/local/recipes/system/driver-manager/source/src/main.rs index c4e82d9daf..10e525bd5c 100644 --- a/local/recipes/system/driver-manager/source/src/main.rs +++ b/local/recipes/system/driver-manager/source/src/main.rs @@ -383,10 +383,14 @@ fn main() { )); let scheme_for_events = Arc::clone(&scheme); + // Both listener callbacks capture the scheme Arc by move: the bound-pairs + // provider closure and the event handler (which calls dispatch_recovery). + // Clone one so each closure owns its own Arc (Arc is not Copy). + let scheme_for_pairs = Arc::clone(&scheme_for_events); let _events_thread = unified_events::spawn_unified_listener( std::path::PathBuf::from("/scheme/pci/aer"), std::path::PathBuf::from("/scheme/pci/pciehp"), - move || scheme_for_events.bound_device_pairs(), + move || scheme_for_pairs.bound_device_pairs(), move |event| match event { unified_events::UnifiedEvent::Aer { event, action } => { if matches!(