Ruby: Fix RubyPort evict packet memory leak
authorJoel Hestness <jthestness@gmail.com>
Tue, 9 Apr 2013 21:25:30 +0000 (16:25 -0500)
committerJoel Hestness <jthestness@gmail.com>
Tue, 9 Apr 2013 21:25:30 +0000 (16:25 -0500)
commit1583056de8d5d9698cfeb87fb72a80e532e275c3
tree0c20a636a5a3b030cbf89ee14919bc126e1411af
parent46d4b71aa244da24453d86184f3cf2ba8b5bdbac
Ruby: Fix RubyPort evict packet memory leak

When using the o3 or inorder CPUs with many Ruby protocols, the caches may
need to forward invalidations to the CPUs. The RubyPort was instantiating a
packet to be sent to the CPUs to signal the eviction, but the packets were
not being freed by the CPUs. Consistent with the classic memory model, stack
allocate the packet and heap allocate the request so on
ruby_eviction_callback() completion, the packet deconstructor is called, and
deletes the request (*Note: stack allocating the request causes double
deletion, since it will be deleted in the packet destructor). This results in
the least memory allocations without memory errors.
src/mem/ruby/system/RubyPort.cc