int sys_lwmutex_trylock(mem_ptr_t<sys_lwmutex_t> lwmutex) { sc_lwmutex.Log("sys_lwmutex_trylock(lwmutex_addr=0x%x)", lwmutex.GetAddr()); if (!lwmutex.IsGood()) return CELL_EFAULT; return lwmutex->trylock(GetCurrentPPUThread().GetId()); }
int sys_lwmutex_destroy(mem_ptr_t<sys_lwmutex_t> lwmutex) { sc_lwmutex.Warning("sys_lwmutex_destroy(lwmutex_addr=0x%x)", lwmutex.GetAddr()); if (!lwmutex.IsGood()) return CELL_EFAULT; u32 sq_id = lwmutex->sleep_queue; if (!Emu.GetIdManager().CheckID(sq_id)) return CELL_ESRCH; // try to make it unable to lock switch (int res = lwmutex->trylock(lwmutex->mutex.GetDeadValue())) { case CELL_OK: lwmutex->all_info() = 0; lwmutex->attribute = 0xDEADBEEF; lwmutex->sleep_queue = 0; Emu.GetIdManager().RemoveID(sq_id); default: return res; } }