From 4b0a5bd1b860f915108c4c1eceb50ac5113d5497 Mon Sep 17 00:00:00 2001 From: Elad Ashkenazi <18193363+elad335@users.noreply.github.com> Date: Mon, 23 Sep 2024 17:32:18 +0300 Subject: [PATCH] SPU: Fix callback leak --- rpcs3/Emu/Cell/SPUThread.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/rpcs3/Emu/Cell/SPUThread.cpp b/rpcs3/Emu/Cell/SPUThread.cpp index 0532b72e92..2468e72c09 100644 --- a/rpcs3/Emu/Cell/SPUThread.cpp +++ b/rpcs3/Emu/Cell/SPUThread.cpp @@ -5701,7 +5701,7 @@ s64 spu_thread::get_ch_value(u32 ch) static thread_local bool s_tls_try_notify = false; s_tls_try_notify = false; - atomic_wait_engine::set_one_time_use_wait_callback(mask1 != SPU_EVENT_LR ? nullptr : +[](u64 attempts) -> bool + const auto wait_cb = mask1 != SPU_EVENT_LR ? nullptr : +[](u64 attempts) -> bool { const auto _this = static_cast(cpu_thread::get_current()); AUDIT(_this->get_class() == thread_class::spu); @@ -5750,10 +5750,11 @@ s64 spu_thread::get_ch_value(u32 ch) } return true; - }); + }; if (auto wait_var = vm::reservation_notifier_begin_wait(_raddr, rtime)) { + atomic_wait_engine::set_one_time_use_wait_callback(wait_cb); utils::bless>(&wait_var->raw().wait_flag)->wait(1, atomic_wait_timeout{80'000}); vm::reservation_notifier_end_wait(*wait_var); }