mem: fix use after free issue in memories until 4-phase work complete.
This commit is contained in:
@@ -474,6 +474,13 @@ SimpleDRAM::printQs() const {
|
||||
bool
|
||||
SimpleDRAM::recvTimingReq(PacketPtr pkt)
|
||||
{
|
||||
/// @todo temporary hack to deal with memory corruption issues until
|
||||
/// 4-phase transactions are complete
|
||||
for (int x = 0; x < pendingDelete.size(); x++)
|
||||
delete pendingDelete[x];
|
||||
pendingDelete.clear();
|
||||
|
||||
|
||||
// This is where we enter from the outside world
|
||||
DPRINTF(DRAM, "Inside recvTimingReq: request %s addr %lld size %d\n",
|
||||
pkt->cmdString(),pkt->getAddr(), pkt->getSize());
|
||||
@@ -495,7 +502,7 @@ SimpleDRAM::recvTimingReq(PacketPtr pkt)
|
||||
// simply drop inhibited packets for now
|
||||
if (pkt->memInhibitAsserted()) {
|
||||
DPRINTF(DRAM,"Inhibited packet -- Dropping it now\n");
|
||||
delete pkt;
|
||||
pendingDelete.push_back(pkt);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@@ -453,6 +453,12 @@ class SimpleDRAM : public AbstractMemory
|
||||
Stats::Formula writeRowHitRate;
|
||||
Stats::Formula avgGap;
|
||||
|
||||
/** @todo this is a temporary workaround until the 4-phase code is
|
||||
* committed. upstream caches needs this packet until true is returned, so
|
||||
* hold onto it for deletion until a subsequent call
|
||||
*/
|
||||
std::vector<PacketPtr> pendingDelete;
|
||||
|
||||
public:
|
||||
|
||||
void regStats();
|
||||
|
||||
@@ -94,10 +94,16 @@ SimpleMemory::doFunctionalAccess(PacketPtr pkt)
|
||||
bool
|
||||
SimpleMemory::recvTimingReq(PacketPtr pkt)
|
||||
{
|
||||
/// @todo temporary hack to deal with memory corruption issues until
|
||||
/// 4-phase transactions are complete
|
||||
for (int x = 0; x < pendingDelete.size(); x++)
|
||||
delete pendingDelete[x];
|
||||
pendingDelete.clear();
|
||||
|
||||
if (pkt->memInhibitAsserted()) {
|
||||
// snooper will supply based on copy of packet
|
||||
// still target's responsibility to delete packet
|
||||
delete pkt;
|
||||
pendingDelete.push_back(pkt);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@@ -118,6 +118,12 @@ class SimpleMemory : public AbstractMemory
|
||||
|
||||
EventWrapper<SimpleMemory, &SimpleMemory::release> releaseEvent;
|
||||
|
||||
/** @todo this is a temporary workaround until the 4-phase code is
|
||||
* committed. upstream caches needs this packet until true is returned, so
|
||||
* hold onto it for deletion until a subsequent call
|
||||
*/
|
||||
std::vector<PacketPtr> pendingDelete;
|
||||
|
||||
public:
|
||||
|
||||
SimpleMemory(const SimpleMemoryParams *p);
|
||||
|
||||
Reference in New Issue
Block a user