[nemiver] Don't delete varobjs if not attached to target



commit ae9f04ee122d80f013663148cfcf499640c1af81
Author: Dodji Seketeli <dodji redhat com>
Date:   Sat May 30 22:12:04 2009 +0200

    Don't delete varobjs if not attached to target
    
    	* src/dbgengine/nmv-gdb-engine.cc:
    	(GDBEngine::is_attached_to_target): If the debugger is not running,
    	then its not attached to the target.
    	* src/dbgengine/nmv-varobj-walker.cc:
    	(VarobjWalker::delete_varobj_if_necessary): New method.
    	(VarobjWalker::~VarobjWalker): Don't delete the variable object if
    	the debugger is not attached to the target.
---
 src/dbgengine/nmv-gdb-engine.cc    |    2 +-
 src/dbgengine/nmv-varobj-walker.cc |   23 +++++++++++++++++++++--
 2 files changed, 22 insertions(+), 3 deletions(-)

diff --git a/src/dbgengine/nmv-gdb-engine.cc b/src/dbgengine/nmv-gdb-engine.cc
index b3068e8..5471f36 100644
--- a/src/dbgengine/nmv-gdb-engine.cc
+++ b/src/dbgengine/nmv-gdb-engine.cc
@@ -2477,7 +2477,7 @@ GDBEngine::is_attached_to_target () const
     LOG_FUNCTION_SCOPE_NORMAL_DD;
     THROW_IF_FAIL (m_priv);
     LOG_DD ("is_attached: " << (int)m_priv->is_attached);
-    return m_priv->is_attached;
+    return m_priv->is_gdb_running () && m_priv->is_attached;
 }
 
 void
diff --git a/src/dbgengine/nmv-varobj-walker.cc b/src/dbgengine/nmv-varobj-walker.cc
index a60b1cd..fef2953 100644
--- a/src/dbgengine/nmv-varobj-walker.cc
+++ b/src/dbgengine/nmv-varobj-walker.cc
@@ -71,8 +71,7 @@ public:
 
     ~VarobjWalker ()
     {
-        if (m_variable && m_debugger)
-            m_debugger->delete_variable (m_variable);
+        delete_varobj_if_necessary ();
     }
 
     sigc::signal<void,
@@ -94,6 +93,8 @@ public:
 
     IDebuggerSafePtr get_debugger () const;
 
+    void delete_varobj_if_necessary ();
+
     void do_walk_variable_real (const IDebugger::VariableSafePtr);
 
     void on_variable_unfolded_signal (const IDebugger::VariableSafePtr a_var);
@@ -124,6 +125,8 @@ VarobjWalker::connect (IDebuggerSafePtr a_debugger,
     THROW_IF_FAIL (a_debugger);
     THROW_IF_FAIL (!a_var_name.empty ());
 
+    delete_varobj_if_necessary ();
+
     m_debugger = a_debugger;
     m_var_name = a_var_name;
     m_debugger->create_variable
@@ -143,6 +146,8 @@ VarobjWalker::connect (IDebuggerSafePtr a_debugger,
     // The variable must be backed by variable objects.
     THROW_IF_FAIL (!a_var->internal_name ().empty ());
 
+    delete_varobj_if_necessary ();
+
     m_debugger = a_debugger;
     m_variable = a_var;
 }
@@ -182,6 +187,20 @@ VarobjWalker::get_debugger () const
 }
 
 void
+VarobjWalker::delete_varobj_if_necessary ()
+{
+    LOG_FUNCTION_SCOPE_NORMAL_DD;
+
+    if (!m_var_name.empty ()
+        && m_variable
+        && m_debugger
+        && m_debugger->is_attached_to_target ()) {
+        m_debugger->delete_variable (m_variable);
+    }
+
+}
+
+void
 VarobjWalker::do_walk_variable_real (const IDebugger::VariableSafePtr a_var)
 {
     LOG_FUNCTION_SCOPE_NORMAL_DD;



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]