From 47436bd774ca856492787a3a5befd0ba111f2b3f Mon Sep 17 00:00:00 2001 From: Eladash Date: Fri, 14 May 2021 15:24:41 +0300 Subject: [PATCH] sys_spu: weak_ptr -> shared_ptr --- rpcs3/Emu/Cell/lv2/sys_spu.cpp | 4 ++-- rpcs3/Emu/Cell/lv2/sys_spu.h | 27 +++++++++------------------ 2 files changed, 11 insertions(+), 20 deletions(-) diff --git a/rpcs3/Emu/Cell/lv2/sys_spu.cpp b/rpcs3/Emu/Cell/lv2/sys_spu.cpp index b604ded9c9..f36cbc8b6a 100644 --- a/rpcs3/Emu/Cell/lv2/sys_spu.cpp +++ b/rpcs3/Emu/Cell/lv2/sys_spu.cpp @@ -1428,7 +1428,7 @@ error_code sys_spu_thread_group_connect_event(ppu_thread& ppu, u32 id, u32 eq, u return CELL_EINVAL; } - const auto queue = idm::get(eq); + auto queue = idm::get(eq); std::lock_guard lock(group->mutex); @@ -1443,7 +1443,7 @@ error_code sys_spu_thread_group_connect_event(ppu_thread& ppu, u32 id, u32 eq, u return CELL_ESRCH; } - *ep = queue; + *ep = std::move(queue); return CELL_OK; } diff --git a/rpcs3/Emu/Cell/lv2/sys_spu.h b/rpcs3/Emu/Cell/lv2/sys_spu.h index d513f76ef0..a56db12d6c 100644 --- a/rpcs3/Emu/Cell/lv2/sys_spu.h +++ b/rpcs3/Emu/Cell/lv2/sys_spu.h @@ -293,9 +293,9 @@ struct lv2_spu_group std::array>, 8> imgs; // Entry points, SPU image segments std::array, 8> args; // SPU Thread Arguments - std::weak_ptr ep_run; // port for SYS_SPU_THREAD_GROUP_EVENT_RUN events - std::weak_ptr ep_exception; // TODO: SYS_SPU_THREAD_GROUP_EVENT_EXCEPTION - std::weak_ptr ep_sysmodule; // TODO: SYS_SPU_THREAD_GROUP_EVENT_SYSTEM_MODULE + std::shared_ptr ep_run; // port for SYS_SPU_THREAD_GROUP_EVENT_RUN events + std::shared_ptr ep_exception; // TODO: SYS_SPU_THREAD_GROUP_EVENT_EXCEPTION + std::shared_ptr ep_sysmodule; // TODO: SYS_SPU_THREAD_GROUP_EVENT_SYSTEM_MODULE lv2_spu_group(std::string name, u32 num, s32 prio, s32 type, lv2_memory_container* ct, bool uses_scheduler, u32 mem_size) : name(std::move(name)) @@ -318,28 +318,19 @@ struct lv2_spu_group threads_map.fill(-1); } - void send_run_event(u64 data1, u64 data2, u64 data3) const + CellError send_run_event(u64 data1, u64 data2, u64 data3) const { - if (const auto queue = ep_run.lock()) - { - queue->send(SYS_SPU_THREAD_GROUP_EVENT_RUN_KEY, data1, data2, data3); - } + return ep_run ? ep_run->send(SYS_SPU_THREAD_GROUP_EVENT_RUN_KEY, data1, data2, data3) : CELL_ENOTCONN; } - void send_exception_event(u64 data1, u64 data2, u64 data3) const + CellError send_exception_event(u64 data1, u64 data2, u64 data3) const { - if (const auto queue = ep_exception.lock()) - { - queue->send(SYS_SPU_THREAD_GROUP_EVENT_EXCEPTION_KEY, data1, data2, data3); - } + return ep_exception ? ep_exception->send(SYS_SPU_THREAD_GROUP_EVENT_EXCEPTION_KEY, data1, data2, data3) : CELL_ENOTCONN; } - void send_sysmodule_event(u64 data1, u64 data2, u64 data3) const + CellError send_sysmodule_event(u64 data1, u64 data2, u64 data3) const { - if (const auto queue = ep_sysmodule.lock()) - { - queue->send(SYS_SPU_THREAD_GROUP_EVENT_SYSTEM_MODULE_KEY, data1, data2, data3); - } + return ep_sysmodule ? ep_sysmodule->send(SYS_SPU_THREAD_GROUP_EVENT_SYSTEM_MODULE_KEY, data1, data2, data3) : CELL_ENOTCONN; } static std::pair*, std::shared_ptr> get_thread(u32 id);