diff --git a/rpcs3/Emu/SysCalls/Modules/cellSpurs.cpp b/rpcs3/Emu/SysCalls/Modules/cellSpurs.cpp index c43826648a..c8505e036b 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSpurs.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSpurs.cpp @@ -219,7 +219,7 @@ s64 spursInit( // some unknown subroutine spurs->m.sub3.unk1 = spurs.addr() + 0xc9; spurs->m.sub3.unk2 = 3; // unknown const - spurs->m.sub3.port = (u64)spurs->m.port; + spurs->m.sub3.port = spurs->m.port; if (flags & SAF_SYSTEM_WORKLOAD_ENABLED) // initialize system workload { diff --git a/rpcs3/Emu/SysCalls/SyncPrimitivesManager.h b/rpcs3/Emu/SysCalls/SyncPrimitivesManager.h index 07293bbd96..97110e2a50 100644 --- a/rpcs3/Emu/SysCalls/SyncPrimitivesManager.h +++ b/rpcs3/Emu/SysCalls/SyncPrimitivesManager.h @@ -78,6 +78,7 @@ public: case TYPE_MUTEX: m_mutex_name[id] = name; break; case TYPE_COND: m_cond_name[id] = name; break; + default: LOG_ERROR(GENERAL, "Unknown IDType = %d", type); } } @@ -93,13 +94,17 @@ public: } } - std::string& GetSyncPrimName(const IDType type, const u32 id) + const std::string& GetSyncPrimName(const IDType type, const u32 id) { + static const std::string empty = ""; + switch (type) { case TYPE_LWCOND: return m_lw_cond_name[id]; case TYPE_MUTEX: return m_mutex_name[id]; case TYPE_COND: return m_cond_name[id]; + + default: LOG_ERROR(GENERAL, "Unknown IDType = %d", type); return empty; } } diff --git a/rpcs3/Emu/SysCalls/lv2/sys_cond.cpp b/rpcs3/Emu/SysCalls/lv2/sys_cond.cpp index 7f21a920e7..a51b9f977a 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_cond.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_cond.cpp @@ -14,6 +14,8 @@ s32 sys_cond_create(vm::ptr> cond_id, u32 mutex_id, vm::ptrpshared.ToBE() != se32(0x200)) { sys_cond.Error("Invalid pshared attribute(0x%x)", (u32)attr->pshared); @@ -45,6 +47,8 @@ s32 sys_cond_destroy(u32 cond_id) { sys_cond.Warning("sys_cond_destroy(cond_id=%d)", cond_id); + LV2_LOCK(0); + Cond* cond; if (!Emu.GetIdManager().GetIDData(cond_id, cond)) { diff --git a/rpcs3/Emu/SysCalls/lv2/sys_lwcond.cpp b/rpcs3/Emu/SysCalls/lv2/sys_lwcond.cpp index 1f71d0fb30..9c709ba37f 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_lwcond.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_lwcond.cpp @@ -11,6 +11,8 @@ SysCallBase sys_lwcond("sys_lwcond"); s32 lwcond_create(sys_lwcond_t& lwcond, sys_lwmutex_t& lwmutex, u64 name_u64) { + LV2_LOCK(0); + u32 id = sys_lwcond.GetNewId(new Lwcond(name_u64), TYPE_LWCOND); u32 addr = Memory.RealToVirtualAddr(&lwmutex); lwcond.lwmutex.set(be_t::make(addr)); @@ -38,6 +40,8 @@ s32 sys_lwcond_destroy(vm::ptr lwcond) { sys_lwcond.Warning("sys_lwcond_destroy(lwcond_addr=0x%x)", lwcond.addr()); + LV2_LOCK(0); + u32 id = lwcond->lwcond_queue; Lwcond* lw; diff --git a/rpcs3/Emu/SysCalls/lv2/sys_lwmutex.cpp b/rpcs3/Emu/SysCalls/lv2/sys_lwmutex.cpp index d4fb074429..9e3c9f9483 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_lwmutex.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_lwmutex.cpp @@ -56,6 +56,8 @@ s32 sys_lwmutex_destroy(vm::ptr lwmutex) { sys_lwmutex.Warning("sys_lwmutex_destroy(lwmutex_addr=0x%x)", lwmutex.addr()); + LV2_LOCK(0); + u32 sq_id = lwmutex->sleep_queue; if (!Emu.GetIdManager().CheckID(sq_id)) return CELL_ESRCH; diff --git a/rpcs3/Emu/SysCalls/lv2/sys_mutex.cpp b/rpcs3/Emu/SysCalls/lv2/sys_mutex.cpp index 63d4263552..75a23f43cc 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_mutex.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_mutex.cpp @@ -30,6 +30,8 @@ s32 sys_mutex_create(vm::ptr> mutex_id, vm::ptr a { sys_mutex.Log("sys_mutex_create(mutex_id_addr=0x%x, attr_addr=0x%x)", mutex_id.addr(), attr.addr()); + LV2_LOCK(0); + switch (attr->protocol.ToBE()) { case se32(SYS_SYNC_FIFO): break; @@ -73,6 +75,8 @@ s32 sys_mutex_destroy(u32 mutex_id) { sys_mutex.Warning("sys_mutex_destroy(mutex_id=%d)", mutex_id); + LV2_LOCK(0); + Mutex* mutex; if (!Emu.GetIdManager().GetIDData(mutex_id, mutex)) { diff --git a/rpcs3/Emu/SysCalls/lv2/sys_semaphore.cpp b/rpcs3/Emu/SysCalls/lv2/sys_semaphore.cpp index 6b2c7d594a..7d26df4c05 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_semaphore.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_semaphore.cpp @@ -55,6 +55,8 @@ s32 sys_semaphore_destroy(u32 sem_id) { sys_semaphore.Warning("sys_semaphore_destroy(sem_id=%d)", sem_id); + LV2_LOCK(0); + Semaphore* sem; if (!Emu.GetIdManager().GetIDData(sem_id, sem)) {