diff --git a/rpcs3/Emu/CPU/CPUThread.cpp b/rpcs3/Emu/CPU/CPUThread.cpp index 2b67d3e2f6..9325d00c28 100644 --- a/rpcs3/Emu/CPU/CPUThread.cpp +++ b/rpcs3/Emu/CPU/CPUThread.cpp @@ -537,6 +537,8 @@ void cpu_thread::operator()() g_tls_current_cpu_thread = nullptr; + g_threads_deleted++; + _this = nullptr; } @@ -590,8 +592,6 @@ void cpu_thread::operator()() cpu_thread::~cpu_thread() { - vm::cleanup_unlock(*this); - g_threads_deleted++; } cpu_thread::cpu_thread(u32 id) diff --git a/rpcs3/Emu/Cell/SPURecompiler.cpp b/rpcs3/Emu/Cell/SPURecompiler.cpp index 3b7f3cff73..892a0a3498 100644 --- a/rpcs3/Emu/Cell/SPURecompiler.cpp +++ b/rpcs3/Emu/Cell/SPURecompiler.cpp @@ -9031,7 +9031,7 @@ struct spu_llvm { const u64 name = atomic_storage::load(spu.block_hash); - if (!(spu.state.load() & (cpu_flag::wait + cpu_flag::stop + cpu_flag::dbg_global_pause))) + if (auto state = +spu.state; !::is_paused(state) && !::is_stopped(state) && !(state & cpu_flag::wait)) { const auto found = std::as_const(samples).find(name); @@ -9108,6 +9108,8 @@ struct spu_llvm (workers.begin() + (worker_index++ % worker_count))->registered.push(reinterpret_cast(_old), &func); } + static_cast(prof_mutex.init_always([&]{ samples.clear(); })); + for (u32 i = 0; i < worker_count; i++) { (workers.begin() + i)->registered.push(0, nullptr);