diff options
author | Steve Reinhardt <stever@gmail.com> | 2008-03-24 01:08:02 -0400 |
---|---|---|
committer | Steve Reinhardt <stever@gmail.com> | 2008-03-24 01:08:02 -0400 |
commit | 623dd7ed3a66e71e241dc8365c079cb5b42fa918 (patch) | |
tree | 3455befd6d7a4639237cad2dbe3111cf2d51bf9e /src | |
parent | 93ab43288a75061746701c9d22a355793f330a9c (diff) | |
download | gem5-623dd7ed3a66e71e241dc8365c079cb5b42fa918.tar.xz |
Delete the Request for a no-response Packet
when the Packet is deleted, since the requester
can't possibly do it.
--HG--
extra : convert_revision : 8571b144ecb3c70efc06d09faa8b3161fb58352d
Diffstat (limited to 'src')
-rw-r--r-- | src/mem/packet.hh | 10 | ||||
-rw-r--r-- | src/mem/tport.cc | 1 |
2 files changed, 9 insertions, 2 deletions
diff --git a/src/mem/packet.hh b/src/mem/packet.hh index 7aad9de98..a278a3945 100644 --- a/src/mem/packet.hh +++ b/src/mem/packet.hh @@ -455,7 +455,15 @@ class Packet : public FastAlloc, public Printable /** Destructor. */ ~Packet() - { if (staticData || dynamicData) deleteData(); } + { + // If this is a request packet for which there's no response, + // delete the request object here, since the requester will + // never get the chance. + if (req && isRequest() && !needsResponse()) + delete req; + if (staticData || dynamicData) + deleteData(); + } /** Reinitialize packet address and size from the associated * Request object, and reset other fields that may have been diff --git a/src/mem/tport.cc b/src/mem/tport.cc index 9fa27046b..ad5e95909 100644 --- a/src/mem/tport.cc +++ b/src/mem/tport.cc @@ -83,7 +83,6 @@ SimpleTimingPort::recvTiming(PacketPtr pkt) assert(pkt->isResponse()); schedSendTiming(pkt, curTick + latency); } else { - delete pkt->req; delete pkt; } |