diff --git a/src/Cafe/OS/libs/coreinit/coreinit_Thread.cpp b/src/Cafe/OS/libs/coreinit/coreinit_Thread.cpp index 52dc0318..f4455b0e 100644 --- a/src/Cafe/OS/libs/coreinit/coreinit_Thread.cpp +++ b/src/Cafe/OS/libs/coreinit/coreinit_Thread.cpp @@ -154,8 +154,13 @@ namespace coreinit } if (alreadyActive == false) { - activeThread[activeThreadCount] = threadMPTR; - activeThreadCount++; + if (activeThreadCount < 256) + { + activeThread[activeThreadCount] = threadMPTR; + activeThreadCount++; + } + else + cemuLog_log(LogType::Force, "coreinit: active thread list is full, cannot register thread"); } __OSCreateHostThread(thread); diff --git a/src/Common/betype.h b/src/Common/betype.h index 501ee980..3b46207f 100644 --- a/src/Common/betype.h +++ b/src/Common/betype.h @@ -157,7 +157,7 @@ public: return *this; } - betype& operator|(const betype& v) const requires (requires (T& x, const T& y) { x | y; }) + betype operator|(const betype& v) const requires (requires (T& x, const T& y) { x | y; }) { betype tmp(*this); tmp.m_value = tmp.m_value | v.m_value; diff --git a/src/util/MemMapper/MemMapperUnix.cpp b/src/util/MemMapper/MemMapperUnix.cpp index 8e800e53..b676754b 100644 --- a/src/util/MemMapper/MemMapperUnix.cpp +++ b/src/util/MemMapper/MemMapperUnix.cpp @@ -32,7 +32,8 @@ namespace MemMapper void* ReserveMemory(void* baseAddr, size_t size, PAGE_PERMISSION permissionFlags) { - return mmap(baseAddr, size, PROT_NONE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); + void* r = mmap(baseAddr, size, PROT_NONE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); + return r == MAP_FAILED ? nullptr : r; } void FreeReservation(void* baseAddr, size_t size) @@ -55,7 +56,11 @@ namespace MemMapper r = nullptr; } else + { r = mmap(baseAddr, size, GetProt(permissionFlags), MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); + if (r == MAP_FAILED) + r = nullptr; + } return r; }