From 5b5a1b7fa7470bd32b5481ae6a6cf5f4b07c80c8 Mon Sep 17 00:00:00 2001 From: lat9nq Date: Fri, 1 Apr 2022 18:32:20 -0400 Subject: kernel: Fix current_process race TSan reported a race at :258 and :803, so make current_process an atomic pointer. --- src/core/hle/kernel/kernel.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/core/hle/kernel/kernel.cpp b/src/core/hle/kernel/kernel.cpp index 34da7c23b..caa91a509 100644 --- a/src/core/hle/kernel/kernel.cpp +++ b/src/core/hle/kernel/kernel.cpp @@ -84,7 +84,7 @@ struct KernelCore::Impl { void InitializeCores() { for (u32 core_id = 0; core_id < Core::Hardware::NUM_CPU_CORES; core_id++) { - cores[core_id].Initialize(current_process->Is64BitProcess()); + cores[core_id].Initialize((*current_process).Is64BitProcess()); system.Memory().SetCurrentPageTable(*current_process, core_id); } } @@ -167,11 +167,11 @@ struct KernelCore::Impl { // Shutdown all processes. if (current_process) { - current_process->Finalize(); + (*current_process).Finalize(); // current_process->Close(); // TODO: The current process should be destroyed based on accurate ref counting after // calling Close(). Adding a manual Destroy() call instead to avoid a memory leak. - current_process->Destroy(); + (*current_process).Destroy(); current_process = nullptr; } @@ -697,7 +697,7 @@ struct KernelCore::Impl { // Lists all processes that exist in the current session. std::vector process_list; - KProcess* current_process{}; + std::atomic current_process{}; std::unique_ptr global_scheduler_context; Kernel::TimeManager time_manager; -- cgit v1.2.3