From 2b4bc588dcdd6d3fba04b0a7c51f35a2fa2b4402 Mon Sep 17 00:00:00 2001 From: eladash Date: Mon, 1 Apr 2019 15:30:44 +0300 Subject: [PATCH] Put missing check_state() in some places Fixes a few verification failures while closing the emulator with HLE liblv2 --- rpcs3/Emu/Cell/Modules/cellSaveData.cpp | 5 ++++- rpcs3/Emu/Cell/Modules/sys_lwcond_.cpp | 5 +++++ rpcs3/Emu/Cell/Modules/sys_lwmutex_.cpp | 10 ++++++++++ 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/rpcs3/Emu/Cell/Modules/cellSaveData.cpp b/rpcs3/Emu/Cell/Modules/cellSaveData.cpp index 91b96f78e2..ad95ae439d 100644 --- a/rpcs3/Emu/Cell/Modules/cellSaveData.cpp +++ b/rpcs3/Emu/Cell/Modules/cellSaveData.cpp @@ -381,7 +381,10 @@ static NEVER_INLINE error_code savedata_op(ppu_thread& ppu, u32 operation, u32 v selected = Emu.GetCallbacks().get_save_dialog()->ShowSaveDataList(save_entries, focused, operation, listSet); // Reschedule - ppu.check_state(); + if (ppu.check_state()) + { + return 0; + } // UI returns -1 for new save games if (selected == -1) diff --git a/rpcs3/Emu/Cell/Modules/sys_lwcond_.cpp b/rpcs3/Emu/Cell/Modules/sys_lwcond_.cpp index c5a7ace924..e880284f1a 100644 --- a/rpcs3/Emu/Cell/Modules/sys_lwcond_.cpp +++ b/rpcs3/Emu/Cell/Modules/sys_lwcond_.cpp @@ -297,6 +297,11 @@ error_code sys_lwcond_wait(ppu_thread& ppu, vm::ptr lwcond, u64 ti // call the syscall const error_code res = _sys_lwcond_queue_wait(ppu, lwcond->lwcond_queue, lwmutex->sleep_queue, timeout); + if (ppu.test_stopped()) + { + return 0; + } + if (res == CELL_OK || res == CELL_ESRCH) { if (res == CELL_OK) diff --git a/rpcs3/Emu/Cell/Modules/sys_lwmutex_.cpp b/rpcs3/Emu/Cell/Modules/sys_lwmutex_.cpp index e689e7968a..633263e482 100644 --- a/rpcs3/Emu/Cell/Modules/sys_lwmutex_.cpp +++ b/rpcs3/Emu/Cell/Modules/sys_lwmutex_.cpp @@ -167,6 +167,11 @@ error_code sys_lwmutex_lock(ppu_thread& ppu, vm::ptr lwmutex, u64 // lock using the syscall const error_code res = _sys_lwmutex_lock(ppu, lwmutex->sleep_queue, timeout); + if (ppu.test_stopped()) + { + return 0; + } + lwmutex->all_info--; if (res == CELL_OK) @@ -211,6 +216,11 @@ error_code sys_lwmutex_lock(ppu_thread& ppu, vm::ptr lwmutex, u64 const error_code res_ = _sys_lwmutex_lock(ppu, lwmutex->sleep_queue, timeout); + if (ppu.test_stopped()) + { + return 0; + } + if (res_ == CELL_OK) { lwmutex->vars.owner.release(tid);