ruby: RubyPort delete snoop requests
In RubyPort::ruby_eviction_callback, prior changes fixed a memory leak caused by instantiating separate packets for each port that the eviction was forwarded to. That change, however, left the instantiated request to also leak. Allocate it on the stack to avoid the leak.
This commit is contained in:
parent
7b70fa02ae
commit
b80024ee7d
1 changed files with 5 additions and 4 deletions
|
@ -505,13 +505,14 @@ void
|
||||||
RubyPort::ruby_eviction_callback(Addr address)
|
RubyPort::ruby_eviction_callback(Addr address)
|
||||||
{
|
{
|
||||||
DPRINTF(RubyPort, "Sending invalidations.\n");
|
DPRINTF(RubyPort, "Sending invalidations.\n");
|
||||||
// This request is deleted in the stack-allocated packet destructor
|
// Allocate the invalidate request and packet on the stack, as it is
|
||||||
// when this function exits
|
// assumed they will not be modified or deleted by receivers.
|
||||||
// TODO: should this really be using funcMasterId?
|
// TODO: should this really be using funcMasterId?
|
||||||
RequestPtr req = new Request(address, 0, 0, Request::funcMasterId);
|
Request request(address, RubySystem::getBlockSizeBytes(), 0,
|
||||||
|
Request::funcMasterId);
|
||||||
// Use a single packet to signal all snooping ports of the invalidation.
|
// Use a single packet to signal all snooping ports of the invalidation.
|
||||||
// This assumes that snooping ports do NOT modify the packet/request
|
// This assumes that snooping ports do NOT modify the packet/request
|
||||||
Packet pkt(req, MemCmd::InvalidateReq);
|
Packet pkt(&request, MemCmd::InvalidateReq);
|
||||||
for (CpuPortIter p = slave_ports.begin(); p != slave_ports.end(); ++p) {
|
for (CpuPortIter p = slave_ports.begin(); p != slave_ports.end(); ++p) {
|
||||||
// check if the connected master port is snooping
|
// check if the connected master port is snooping
|
||||||
if ((*p)->isSnooping()) {
|
if ((*p)->isSnooping()) {
|
||||||
|
|
Loading…
Reference in a new issue