From 17a074e1aca52cdd104555f93264c7feafcbc7d2 Mon Sep 17 00:00:00 2001 From: Eladash Date: Tue, 21 Sep 2021 11:29:32 +0300 Subject: [PATCH] Fix memory leak in cellOskDialog (#10895) --- rpcs3/Emu/Cell/Modules/cellOskDialog.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/rpcs3/Emu/Cell/Modules/cellOskDialog.cpp b/rpcs3/Emu/Cell/Modules/cellOskDialog.cpp index 2a8c46c40d..ffc93491bc 100644 --- a/rpcs3/Emu/Cell/Modules/cellOskDialog.cpp +++ b/rpcs3/Emu/Cell/Modules/cellOskDialog.cpp @@ -166,9 +166,8 @@ error_code cellOskDialogLoadAsync(u32 container, vm::ptr dia { if (auto ccb = g_fxo->get().osk_confirm_callback.exchange({})) { - vm::ptr string_to_send = vm::cast(vm::alloc(CELL_OSKDIALOG_STRING_SIZE * 2, vm::main)); + std::vector string_to_send(CELL_OSKDIALOG_STRING_SIZE); atomic_t done = false; - u32 return_value; u32 i; for (i = 0; i < CELL_OSKDIALOG_STRING_SIZE - 1; i++) @@ -177,14 +176,16 @@ error_code cellOskDialogLoadAsync(u32 container, vm::ptr dia if (osk->osk_text[i] == 0) break; } - sysutil_register_cb([&, length = i](ppu_thread& cb_ppu) -> s32 + sysutil_register_cb([&, length = i, string_to_send = std::move(string_to_send)](ppu_thread& cb_ppu) -> s32 { - return_value = ccb(cb_ppu, string_to_send, static_cast(length)); + vm::var> string_var(CELL_OSKDIALOG_STRING_SIZE, string_to_send.data()); + + const u32 return_value = ccb(cb_ppu, string_var.begin(), static_cast(length)); cellOskDialog.warning("osk_confirm_callback return_value=%d", return_value); for (u32 i = 0; i < CELL_OSKDIALOG_STRING_SIZE - 1; i++) { - osk->osk_text[i] = string_to_send[i]; + osk->osk_text[i] = string_var.begin()[i]; } done = true;