gem5: fix some iterator use and erase bugs

This commit is contained in:
Ali Saidi
2012-05-10 18:04:27 -05:00
parent 5ecaf30219
commit 4f66bcdd2e
2 changed files with 13 additions and 6 deletions

View File

@@ -182,7 +182,7 @@ BasePrefetcher::notify(PacketPtr &pkt, Tick time)
pfRemovedMSHR++;
delete (*iter)->req;
delete (*iter);
pf.erase(iter);
iter = pf.erase(iter);
if (pf.empty())
cache->deassertMemSideBusRequest(BaseCache::Request_PF);
}
@@ -194,15 +194,17 @@ BasePrefetcher::notify(PacketPtr &pkt, Tick time)
// Needed for serial calculators like GHB
if (serialSquash) {
iter = pf.end();
iter--;
if (iter != pf.begin())
iter--;
while (!pf.empty() && ((*iter)->time >= time)) {
pfSquashed++;
DPRINTF(HWPrefetch, "Squashing old prefetch addr: 0x%x\n",
(*iter)->getAddr());
delete (*iter)->req;
delete (*iter);
pf.erase(iter);
iter--;
iter = pf.erase(iter);
if (iter != pf.begin())
iter--;
}
if (pf.empty())
cache->deassertMemSideBusRequest(BaseCache::Request_PF);