diff --git a/Core/MIPS/JitCommon/JitBlockCache.cpp b/Core/MIPS/JitCommon/JitBlockCache.cpp index a08f430ed4..1f0e2e0e29 100644 --- a/Core/MIPS/JitCommon/JitBlockCache.cpp +++ b/Core/MIPS/JitCommon/JitBlockCache.cpp @@ -76,7 +76,7 @@ static uint64_t HashJitBlock(const JitBlock &b) { } JitBlockCache::JitBlockCache(MIPSState *mipsState, CodeBlockCommon *codeBlock) : - codeBlock_(codeBlock), blocks_(nullptr), num_blocks_(0) { + codeBlock_(codeBlock) { } JitBlockCache::~JitBlockCache() { @@ -90,7 +90,8 @@ bool JitBlock::ContainsAddress(u32 em_address) { } bool JitBlockCache::IsFull() const { - return num_blocks_ >= MAX_NUM_BLOCKS - 1; + // -10 to safely leave space for some proxy blocks, which we don't check before we allocate (not ideal, but should work). + return num_blocks_ >= MAX_NUM_BLOCKS - 10; } void JitBlockCache::Init() { diff --git a/Core/MIPS/JitCommon/JitBlockCache.h b/Core/MIPS/JitCommon/JitBlockCache.h index 6fde09d915..71b7df9660 100644 --- a/Core/MIPS/JitCommon/JitBlockCache.h +++ b/Core/MIPS/JitCommon/JitBlockCache.h @@ -184,10 +184,10 @@ private: MIPSOpcode GetEmuHackOpForBlock(int block_num) const; CodeBlockCommon *codeBlock_; - JitBlock *blocks_; + JitBlock *blocks_ = nullptr; std::unordered_multimap proxyBlockMap_; - int num_blocks_; + int num_blocks_ = 0; std::unordered_multimap links_to_; std::map, u32> block_map_; // (end_addr, start_addr) -> number