arch-riscv: fix memory leak problem in page table walker
Valgrind detects memory leak problems in RISC-V's page table walker(`Walker::WalkerState::stepWalk()`). In some situation, the response packet is not freed. This patch partially fix these memory leak problems. Change-Id: I86d4c69c3c502bd92856a3d8863bfa1722a94512 Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/56609 Reviewed-by: Jason Lowe-Power <power.jg@gmail.com> Maintainer: Jason Lowe-Power <power.jg@gmail.com> Reviewed-by: Ayaz Akram <yazakram@ucdavis.edu> Tested-by: kokoro <noreply+kokoro@google.com>
This commit is contained in:
@@ -426,6 +426,10 @@ Walker::WalkerState::stepWalk(PacketPtr &write)
|
||||
//If we didn't return, we're setting up another read.
|
||||
RequestPtr request = std::make_shared<Request>(
|
||||
nextRead, oldRead->getSize(), flags, walker->requestorId);
|
||||
|
||||
delete oldRead;
|
||||
oldRead = nullptr;
|
||||
|
||||
read = new Packet(request, MemCmd::ReadReq);
|
||||
read->allocate();
|
||||
|
||||
@@ -501,6 +505,8 @@ Walker::WalkerState::recvPacket(PacketPtr pkt)
|
||||
}
|
||||
sendPackets();
|
||||
} else {
|
||||
delete pkt;
|
||||
|
||||
sendPackets();
|
||||
}
|
||||
if (inflight == 0 && read == NULL && writes.size() == 0) {
|
||||
|
||||
Reference in New Issue
Block a user