From 0a4820f4f8680bb41a1654ba8dca25bc99f31100 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Wed, 11 Mar 2015 12:43:36 +0300 Subject: [PATCH] Some diagnostic message --- rpcs3/Emu/SysCalls/Modules/sysPrxForUser.cpp | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/rpcs3/Emu/SysCalls/Modules/sysPrxForUser.cpp b/rpcs3/Emu/SysCalls/Modules/sysPrxForUser.cpp index 71cacad9b1..cc53f86f55 100644 --- a/rpcs3/Emu/SysCalls/Modules/sysPrxForUser.cpp +++ b/rpcs3/Emu/SysCalls/Modules/sysPrxForUser.cpp @@ -212,6 +212,11 @@ s32 sys_lwmutex_lock(PPUThread& CPU, vm::ptr lwmutex, u64 timeout // atomically increment waiter value using 64 bit op lwmutex->all_info++; + if (!lwmutex->waiter.read_relaxed().data()) + { + sysPrxForUser.Fatal("sys_lwmutex_lock(lwmutex=*0x%x): unexpected waiter", lwmutex); + } + if (lwmutex->owner.compare_and_swap_test(lwmutex::free, tid)) { // locking succeeded @@ -228,7 +233,12 @@ s32 sys_lwmutex_lock(PPUThread& CPU, vm::ptr lwmutex, u64 timeout if (res == CELL_OK) { // locking succeeded - lwmutex->owner.exchange(tid); + auto old = lwmutex->owner.exchange(tid); + + if (old.data() != se32(lwmutex_reserved)) + { + sysPrxForUser.Fatal("sys_lwmutex_lock(lwmutex=*0x%x): unexpected owner (0x%x)", lwmutex, old); + } return CELL_OK; } @@ -294,7 +304,12 @@ s32 sys_lwmutex_trylock(PPUThread& CPU, vm::ptr lwmutex) if (res == CELL_OK) { // locking succeeded - lwmutex->owner.exchange(tid); + auto old = lwmutex->owner.exchange(tid); + + if (old.data() != se32(lwmutex_reserved)) + { + sysPrxForUser.Fatal("sys_lwmutex_trylock(lwmutex=*0x%x): unexpected owner (0x%x)", lwmutex, old); + } } return res;