From 97d93ad55cadb78f87797a50de07a66286d6035c Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Fri, 13 Jan 2023 22:02:15 -0500 Subject: [PATCH] Restore repeated lookup of timed machine. This restores culling of abandoned parallel machines during dynamic analysis. --- OSBindings/Mac/Clock Signal/Machine/CSMachine.mm | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/OSBindings/Mac/Clock Signal/Machine/CSMachine.mm b/OSBindings/Mac/Clock Signal/Machine/CSMachine.mm index ebb198f87..56368bc7b 100644 --- a/OSBindings/Mac/Clock Signal/Machine/CSMachine.mm +++ b/OSBindings/Mac/Clock Signal/Machine/CSMachine.mm @@ -43,10 +43,12 @@ struct MachineUpdater { // Top out at 1/20th of a second; this is a safeguard against a negative // feedback loop if emulation starts running slowly. const auto seconds = std::min(Time::seconds(duration), 0.05); - machine->run_for(seconds); + timed_machine = machine->timed_machine(); + timed_machine->run_for(seconds); } - MachineTypes::TimedMachine *machine = nullptr; + Machine::DynamicMachine *machine = nullptr; + MachineTypes::TimedMachine *timed_machine = nullptr; }; } @@ -148,7 +150,7 @@ struct ActivityObserver: public Activity::Observer { [missingROMs appendString:[NSString stringWithUTF8String:wstring_converter.to_bytes(description).c_str()]]; return nil; } - updater.performer.machine = _machine->timed_machine(); + updater.performer.machine = _machine.get(); if(updater.performer.machine) { updater.start(); } @@ -687,7 +689,7 @@ struct ActivityObserver: public Activity::Observer { updater.enqueue([weakSelf] { CSMachine *const strongSelf = weakSelf; if(strongSelf) { - strongSelf->updater.performer.machine->flush_output(MachineTypes::TimedMachine::Output::Audio); + strongSelf->updater.performer.timed_machine->flush_output(MachineTypes::TimedMachine::Output::Audio); } }); } @@ -703,7 +705,7 @@ struct ActivityObserver: public Activity::Observer { // Grab a pointer to the timed machine from somewhere where it has already // been dynamically cast, to avoid that cost here. - MachineTypes::TimedMachine *const timed_machine = strongSelf->updater.performer.machine; + MachineTypes::TimedMachine *const timed_machine = strongSelf->updater.performer.timed_machine; // Definitely update video; update audio too if that pipeline is looking a little dry. auto outputs = MachineTypes::TimedMachine::Output::Video;