Savestates: Fix minor race with LV2 timers

This commit is contained in:
Eladash 2022-07-07 13:39:45 +03:00 committed by Ivan
parent 4ac88fa8d3
commit 1fd5fb2f7e

View file

@ -19,6 +19,7 @@ struct lv2_timer_thread
shared_mutex mutex; shared_mutex mutex;
std::deque<std::shared_ptr<lv2_timer>> timers; std::deque<std::shared_ptr<lv2_timer>> timers;
lv2_timer_thread();
void operator()(); void operator()();
SAVESTATE_INIT_POS(46); // Dependency ion LV2 objects (lv2_timer) SAVESTATE_INIT_POS(46); // Dependency ion LV2 objects (lv2_timer)
@ -93,20 +94,16 @@ u64 lv2_timer::check()
return umax; return umax;
} }
void lv2_timer_thread::operator()() lv2_timer_thread::lv2_timer_thread()
{ {
idm::select<lv2_obj, lv2_timer>([&](u32 id, lv2_timer&)
{ {
decltype(timers) vec; timers.emplace_back(idm::get_unlocked<lv2_obj, lv2_timer>(id));
idm::select<lv2_obj, lv2_timer>([&vec](u32 id, lv2_timer&)
{
vec.emplace_back(idm::get_unlocked<lv2_obj, lv2_timer>(id));
}); });
std::lock_guard lock(mutex);
timers = std::move(vec);
} }
void lv2_timer_thread::operator()()
{
u64 sleep_time = 0; u64 sleep_time = 0;
while (thread_ctrl::state() != thread_state::aborting) while (thread_ctrl::state() != thread_state::aborting)