|
|
@ -189,7 +189,7 @@ struct System::Impl {
|
|
|
|
|
|
|
|
|
|
|
|
kernel.Suspend(false);
|
|
|
|
kernel.Suspend(false);
|
|
|
|
core_timing.SyncPause(false);
|
|
|
|
core_timing.SyncPause(false);
|
|
|
|
is_paused = false;
|
|
|
|
is_paused.store(false, std::memory_order_relaxed);
|
|
|
|
|
|
|
|
|
|
|
|
return status;
|
|
|
|
return status;
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -200,14 +200,13 @@ struct System::Impl {
|
|
|
|
|
|
|
|
|
|
|
|
core_timing.SyncPause(true);
|
|
|
|
core_timing.SyncPause(true);
|
|
|
|
kernel.Suspend(true);
|
|
|
|
kernel.Suspend(true);
|
|
|
|
is_paused = true;
|
|
|
|
is_paused.store(true, std::memory_order_relaxed);
|
|
|
|
|
|
|
|
|
|
|
|
return status;
|
|
|
|
return status;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
bool IsPaused() const {
|
|
|
|
bool IsPaused() const {
|
|
|
|
std::unique_lock lk(suspend_guard);
|
|
|
|
return is_paused.load(std::memory_order_relaxed);
|
|
|
|
return is_paused;
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
std::unique_lock<std::mutex> StallProcesses() {
|
|
|
|
std::unique_lock<std::mutex> StallProcesses() {
|
|
|
@ -218,7 +217,7 @@ struct System::Impl {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void UnstallProcesses() {
|
|
|
|
void UnstallProcesses() {
|
|
|
|
if (!is_paused) {
|
|
|
|
if (!IsPaused()) {
|
|
|
|
core_timing.SyncPause(false);
|
|
|
|
core_timing.SyncPause(false);
|
|
|
|
kernel.Suspend(false);
|
|
|
|
kernel.Suspend(false);
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -465,7 +464,7 @@ struct System::Impl {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
mutable std::mutex suspend_guard;
|
|
|
|
mutable std::mutex suspend_guard;
|
|
|
|
bool is_paused{};
|
|
|
|
std::atomic_bool is_paused{};
|
|
|
|
std::atomic<bool> is_shutting_down{};
|
|
|
|
std::atomic<bool> is_shutting_down{};
|
|
|
|
|
|
|
|
|
|
|
|
Timing::CoreTiming core_timing;
|
|
|
|
Timing::CoreTiming core_timing;
|
|
|
|