Ruby: remove reference to g_system_ptr from class Message
[gem5.git] / src / mem / simple_mem.cc
index c54e8e5ea734865e41bdd7714ea7c2ccd8623374..7dd0fd1011d55d98863d67749534498faee18e9d 100644 (file)
@@ -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;
     }
 
@@ -148,7 +154,7 @@ SimpleMemory::recvTimingReq(PacketPtr pkt)
         assert(pkt->isResponse());
         port.schedTimingResp(pkt, curTick() + latency);
     } else {
-        delete pkt;
+        pendingDelete.push_back(pkt);
     }
 
     return true;
@@ -176,14 +182,14 @@ SimpleMemory::getSlavePort(const std::string &if_name, PortID idx)
 }
 
 unsigned int
-SimpleMemory::drain(Event *de)
+SimpleMemory::drain(DrainManager *dm)
 {
-    int count = port.drain(de);
+    int count = port.drain(dm);
 
     if (count)
-        changeState(Draining);
+        setDrainState(Drainable::Draining);
     else
-        changeState(Drained);
+        setDrainState(Drainable::Drained);
     return count;
 }