misc: Using smart pointers for memory Requests
This patch is changing the underlying type for RequestPtr from Request* to shared_ptr<Request>. Having memory requests being managed by smart pointers will simplify the code; it will also prevent memory leakage and dangling pointers. Change-Id: I7749af38a11ac8eb4d53d8df1252951e0890fde3 Signed-off-by: Giacomo Travaglini <giacomo.travaglini@arm.com> Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> Reviewed-on: https://gem5-review.googlesource.com/10996 Reviewed-by: Nikos Nikoleris <nikos.nikoleris@arm.com> Maintainer: Nikos Nikoleris <nikos.nikoleris@arm.com>
This commit is contained in:
@@ -95,8 +95,7 @@ DmaPort::handleResp(PacketPtr pkt, Tick delay)
|
||||
delete state;
|
||||
}
|
||||
|
||||
// delete the request that we created and also the packet
|
||||
delete pkt->req;
|
||||
// delete the packet
|
||||
delete pkt;
|
||||
|
||||
// we might be drained at this point, if so signal the drain event
|
||||
@@ -165,7 +164,10 @@ DmaPort::dmaAction(Packet::Command cmd, Addr addr, int size, Event *event,
|
||||
event ? event->scheduled() : -1);
|
||||
for (ChunkGenerator gen(addr, size, sys->cacheLineSize());
|
||||
!gen.done(); gen.next()) {
|
||||
req = new Request(gen.addr(), gen.size(), flag, masterId);
|
||||
|
||||
req = std::make_shared<Request>(
|
||||
gen.addr(), gen.size(), flag, masterId);
|
||||
|
||||
req->taskId(ContextSwitchTaskId::DMA);
|
||||
PacketPtr pkt = new Packet(req, cmd);
|
||||
|
||||
|
||||
@@ -92,7 +92,6 @@ Tick
|
||||
X86ISA::I82094AA::recvResponse(PacketPtr pkt)
|
||||
{
|
||||
// Packet instantiated calling sendMessage() in signalInterrupt()
|
||||
delete pkt->req;
|
||||
delete pkt;
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user