changeset e2c43045a81b in /z/repo/gem5
details: http://repo.gem5.org/gem5?cmd=changeset;node=e2c43045a81b
description:
        sim: Automatically unregister probe listeners

        The ProbeListener base class automatically registers itself with a
        probe manager. Currently, the class does not unregister a itself when
        it is destroyed, which makes removing probes listeners somewhat
        cumbersome. This patch adds an automatic call to
        manager->removeListener in the ProbeListener destructor, which solves
        the problem.

diffstat:

 src/sim/probe/probe.cc |  8 +++++++-
 src/sim/probe/probe.hh |  6 +++++-
 2 files changed, 12 insertions(+), 2 deletions(-)

diffs (38 lines):

diff -r c12ec2a0de52 -r e2c43045a81b src/sim/probe/probe.cc
--- a/src/sim/probe/probe.cc    Tue Sep 09 04:36:34 2014 -0400
+++ b/src/sim/probe/probe.cc    Tue Sep 09 04:36:43 2014 -0400
@@ -62,11 +62,17 @@
     listeners.clear();
 }
 
-ProbeListener::ProbeListener(ProbeManager *manager, const std::string &name)
+ProbeListener::ProbeListener(ProbeManager *_manager, const std::string &_name)
+    : manager(_manager), name(_name)
 {
     manager->addListener(name, *this);
 }
 
+ProbeListener::~ProbeListener()
+{
+    manager->removeListener(name, *this);
+}
+
 ProbeListenerObject*
 ProbeListenerObjectParams::create()
 {
diff -r c12ec2a0de52 -r e2c43045a81b src/sim/probe/probe.hh
--- a/src/sim/probe/probe.hh    Tue Sep 09 04:36:34 2014 -0400
+++ b/src/sim/probe/probe.hh    Tue Sep 09 04:36:43 2014 -0400
@@ -104,7 +104,11 @@
 {
   public:
     ProbeListener(ProbeManager *manager, const std::string &name);
-    virtual ~ProbeListener() {}
+    virtual ~ProbeListener();
+
+  protected:
+    ProbeManager *const manager;
+    const std::string name;
 };
 
 /**
_______________________________________________
gem5-dev mailing list
gem5-dev@gem5.org
http://m5sim.org/mailman/listinfo/gem5-dev

Reply via email to