|
@@ -142,7 +142,7 @@ struct System::Impl {
|
|
|
cpu_barrier = std::make_unique<CpuBarrier>();
|
|
cpu_barrier = std::make_unique<CpuBarrier>();
|
|
|
cpu_exclusive_monitor = Cpu::MakeExclusiveMonitor(cpu_cores.size());
|
|
cpu_exclusive_monitor = Cpu::MakeExclusiveMonitor(cpu_cores.size());
|
|
|
for (std::size_t index = 0; index < cpu_cores.size(); ++index) {
|
|
for (std::size_t index = 0; index < cpu_cores.size(); ++index) {
|
|
|
- cpu_cores[index] = std::make_shared<Cpu>(cpu_exclusive_monitor, *cpu_barrier, index);
|
|
|
|
|
|
|
+ cpu_cores[index] = std::make_shared<Cpu>(*cpu_exclusive_monitor, *cpu_barrier, index);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
telemetry_session = std::make_unique<Core::TelemetrySession>();
|
|
telemetry_session = std::make_unique<Core::TelemetrySession>();
|
|
@@ -245,6 +245,7 @@ struct System::Impl {
|
|
|
for (auto& cpu_core : cpu_cores) {
|
|
for (auto& cpu_core : cpu_cores) {
|
|
|
cpu_core.reset();
|
|
cpu_core.reset();
|
|
|
}
|
|
}
|
|
|
|
|
+ cpu_exclusive_monitor.reset();
|
|
|
cpu_barrier.reset();
|
|
cpu_barrier.reset();
|
|
|
|
|
|
|
|
// Shutdown kernel and core timing
|
|
// Shutdown kernel and core timing
|
|
@@ -282,7 +283,7 @@ struct System::Impl {
|
|
|
std::unique_ptr<VideoCore::RendererBase> renderer;
|
|
std::unique_ptr<VideoCore::RendererBase> renderer;
|
|
|
std::unique_ptr<Tegra::GPU> gpu_core;
|
|
std::unique_ptr<Tegra::GPU> gpu_core;
|
|
|
std::shared_ptr<Tegra::DebugContext> debug_context;
|
|
std::shared_ptr<Tegra::DebugContext> debug_context;
|
|
|
- std::shared_ptr<ExclusiveMonitor> cpu_exclusive_monitor;
|
|
|
|
|
|
|
+ std::unique_ptr<ExclusiveMonitor> cpu_exclusive_monitor;
|
|
|
std::unique_ptr<CpuBarrier> cpu_barrier;
|
|
std::unique_ptr<CpuBarrier> cpu_barrier;
|
|
|
std::array<std::shared_ptr<Cpu>, NUM_CPU_CORES> cpu_cores;
|
|
std::array<std::shared_ptr<Cpu>, NUM_CPU_CORES> cpu_cores;
|
|
|
std::array<std::unique_ptr<std::thread>, NUM_CPU_CORES - 1> cpu_core_threads;
|
|
std::array<std::unique_ptr<std::thread>, NUM_CPU_CORES - 1> cpu_core_threads;
|