summaryrefslogtreecommitdiff
path: root/src/mem/probes/base.hh
diff options
context:
space:
mode:
authorAndreas Hansson <andreas.hansson@arm.com>2015-09-25 13:25:34 -0400
committerAndreas Hansson <andreas.hansson@arm.com>2015-09-25 13:25:34 -0400
commit9a0129dcbf3cc223c88b8c0bc46ac9b375c11abf (patch)
tree184f8bcb5f9ef6a1bc530608c00f7469a556e65f /src/mem/probes/base.hh
parent806e1fbf0f63d386d4ae80ff0d4ab77e6c37f9d6 (diff)
downloadgem5-9a0129dcbf3cc223c88b8c0bc46ac9b375c11abf.tar.xz
mem: Add PacketInfo to be used for packet probe points
This patch fixes a use-after-delete issue in the packet probe points by adding a PacketInfo struct to retain the key fields before passing the packet onwards. We want to probe the packet after it is successfully sent, but by that time the fields may be modified, and the packet may even be deleted. Amazingly enough the issue has gone undetected for months, and only recently popped up in our regressions.
Diffstat (limited to 'src/mem/probes/base.hh')
-rw-r--r--src/mem/probes/base.hh11
1 files changed, 5 insertions, 6 deletions
diff --git a/src/mem/probes/base.hh b/src/mem/probes/base.hh
index 7a0a7ea05..ccb5ca749 100644
--- a/src/mem/probes/base.hh
+++ b/src/mem/probes/base.hh
@@ -43,8 +43,7 @@
#include <memory>
#include <vector>
-#include "mem/packet.hh"
-#include "sim/probe/probe.hh"
+#include "sim/probe/mem.hh"
#include "sim/sim_object.hh"
struct BaseMemProbeParams;
@@ -72,10 +71,10 @@ class BaseMemProbe : public SimObject
/**
* Callback to analyse intercepted Packets.
*/
- virtual void handleRequest(const PacketPtr &pkt) = 0;
+ virtual void handleRequest(const ProbePoints::PacketInfo &pkt_info) = 0;
private:
- class PacketListener : public ProbeListenerArgBase<PacketPtr>
+ class PacketListener : public ProbeListenerArgBase<ProbePoints::PacketInfo>
{
public:
PacketListener(BaseMemProbe &_parent,
@@ -83,8 +82,8 @@ class BaseMemProbe : public SimObject
: ProbeListenerArgBase(pm, name),
parent(_parent) {}
- void notify(const PacketPtr &pkt) M5_ATTR_OVERRIDE {
- parent.handleRequest(pkt);
+ void notify(const ProbePoints::PacketInfo &pkt_info) M5_ATTR_OVERRIDE {
+ parent.handleRequest(pkt_info);
}
protected: