From 39743d35a3dbe5b46e5051ade5394518cef8de9e Mon Sep 17 00:00:00 2001 From: Ali Saidi Date: Tue, 1 May 2007 18:12:58 -0400 Subject: fix flushAddr so it doesn't modify an iterator that has been deleted --HG-- extra : convert_revision : 8b7e4948974517b13616ab782aa7e84471b24f10 --- src/arch/alpha/tlb.cc | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'src/arch/alpha/tlb.cc') diff --git a/src/arch/alpha/tlb.cc b/src/arch/alpha/tlb.cc index 3ab65e664..2dfff8c5f 100644 --- a/src/arch/alpha/tlb.cc +++ b/src/arch/alpha/tlb.cc @@ -213,7 +213,7 @@ TLB::flushAddr(Addr addr, uint8_t asn) if (i == lookupTable.end()) return; - while (i->first == vaddr.vpn()) { + while (i != lookupTable.end() && i->first == vaddr.vpn()) { int index = i->second; PTE *pte = &table[index]; assert(pte->valid); @@ -225,10 +225,10 @@ TLB::flushAddr(Addr addr, uint8_t asn) // invalidate this entry pte->valid = false; - lookupTable.erase(i); + lookupTable.erase(i++); + } else { + ++i; } - - ++i; } } -- cgit v1.2.3