From f54020eb8155371725ab75b0fc5c419287eca084 Mon Sep 17 00:00:00 2001 From: Giacomo Travaglini Date: Mon, 4 Jun 2018 09:40:19 +0100 Subject: misc: Using smart pointers for memory Requests This patch is changing the underlying type for RequestPtr from Request* to shared_ptr. 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 Reviewed-by: Andreas Sandberg Reviewed-on: https://gem5-review.googlesource.com/10996 Reviewed-by: Nikos Nikoleris Maintainer: Nikos Nikoleris --- src/mem/cache/base.cc | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) (limited to 'src/mem/cache/base.cc') diff --git a/src/mem/cache/base.cc b/src/mem/cache/base.cc index f753cc315..a5ad07d6c 100644 --- a/src/mem/cache/base.cc +++ b/src/mem/cache/base.cc @@ -810,7 +810,6 @@ BaseCache::getNextQueueEntry() return allocateMissBuffer(pkt, curTick(), false); } else { // free the request and packet - delete pkt->req; delete pkt; } } @@ -1278,8 +1277,9 @@ BaseCache::writebackBlk(CacheBlk *blk) writebacks[Request::wbMasterId]++; - RequestPtr req = new Request(regenerateBlkAddr(blk), blkSize, 0, - Request::wbMasterId); + RequestPtr req = std::make_shared( + regenerateBlkAddr(blk), blkSize, 0, Request::wbMasterId); + if (blk->isSecure()) req->setFlags(Request::SECURE); @@ -1313,8 +1313,9 @@ BaseCache::writebackBlk(CacheBlk *blk) PacketPtr BaseCache::writecleanBlk(CacheBlk *blk, Request::Flags dest, PacketId id) { - RequestPtr req = new Request(regenerateBlkAddr(blk), blkSize, 0, - Request::wbMasterId); + RequestPtr req = std::make_shared( + regenerateBlkAddr(blk), blkSize, 0, Request::wbMasterId); + if (blk->isSecure()) { req->setFlags(Request::SECURE); } @@ -1373,14 +1374,15 @@ BaseCache::writebackVisitor(CacheBlk &blk) if (blk.isDirty()) { assert(blk.isValid()); - Request request(regenerateBlkAddr(&blk), - blkSize, 0, Request::funcMasterId); - request.taskId(blk.task_id); + RequestPtr request = std::make_shared( + regenerateBlkAddr(&blk), blkSize, 0, Request::funcMasterId); + + request->taskId(blk.task_id); if (blk.isSecure()) { - request.setFlags(Request::SECURE); + request->setFlags(Request::SECURE); } - Packet packet(&request, MemCmd::WriteReq); + Packet packet(request, MemCmd::WriteReq); packet.dataStatic(blk.data); memSidePort.sendFunctional(&packet); -- cgit v1.2.3