1
0
mirror of https://github.com/TomHarte/CLK.git synced 2026-04-21 02:17:08 +00:00

Avoid potential unsafe access of updater.

This commit is contained in:
Thomas Harte
2026-02-18 13:06:22 -05:00
parent 455f40c6ef
commit 91a735e4a0
@@ -189,6 +189,7 @@ struct ActivityObserver: public Activity::Observer {
_machine->scan_producer()->set_scan_target(_view.scanTarget.scanTarget);
updater = std::make_unique<Updater>();
std::atomic_thread_fence(std::memory_order_release);
updater->performer.machine = _machine.get();
if(updater->performer.machine) {
updater->start();
@@ -532,6 +533,7 @@ struct ActivityObserver: public Activity::Observer {
}
- (void)applyInputEvent:(dispatch_block_t)event {
std::atomic_thread_fence(std::memory_order_acquire);
updater->enqueue([event] {
event();
});
@@ -763,6 +765,7 @@ struct ActivityObserver: public Activity::Observer {
- (void)audioQueueIsRunningDry:(nonnull CSAudioQueue *)audioQueue {
__weak CSMachine *weakSelf = self;
std::atomic_thread_fence(std::memory_order_acquire);
updater->enqueue([weakSelf] {
CSMachine *const strongSelf = weakSelf;
if(strongSelf) {
@@ -774,6 +777,7 @@ struct ActivityObserver: public Activity::Observer {
- (void)scanTargetViewDisplayLinkDidFire:(CSScanTargetView *)view now:(const CVTimeStamp *)now outputTime:(const CVTimeStamp *)outputTime {
__weak CSMachine *weakSelf = self;
std::atomic_thread_fence(std::memory_order_acquire);
updater->enqueue([weakSelf] {
CSMachine *const strongSelf = weakSelf;
if(!strongSelf) {
@@ -821,6 +825,7 @@ struct ActivityObserver: public Activity::Observer {
}
- (void)stop {
std::atomic_thread_fence(std::memory_order_acquire);
updater->stop();
}