[Lldb-commits] [lldb] r192987 - Make sure the CallFunction Thread plans don't try to do DoTakedown if their thread

Jim Ingham jingham at apple.com
Fri Oct 18 10:11:02 PDT 2013


Author: jingham
Date: Fri Oct 18 12:11:02 2013
New Revision: 192987

URL: http://llvm.org/viewvc/llvm-project?rev=192987&view=rev
Log:
Make sure the CallFunction Thread plans don't try to do DoTakedown if their thread
has gone  away by the time they get around to doing it.

<rdar://problem/15245544>

Modified:
    lldb/trunk/include/lldb/Target/ThreadPlanCallFunction.h
    lldb/trunk/source/Target/Thread.cpp

Modified: lldb/trunk/include/lldb/Target/ThreadPlanCallFunction.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Target/ThreadPlanCallFunction.h?rev=192987&r1=192986&r2=192987&view=diff
==============================================================================
--- lldb/trunk/include/lldb/Target/ThreadPlanCallFunction.h (original)
+++ lldb/trunk/include/lldb/Target/ThreadPlanCallFunction.h Fri Oct 18 12:11:02 2013
@@ -136,7 +136,13 @@ public:
 
     virtual bool
     RestoreThreadState();
-
+    
+    virtual void
+    ThreadDestroyed ()
+    {
+        m_takedown_done = true;
+    }
+    
 protected:    
     void ReportRegisterState (const char *message);
 

Modified: lldb/trunk/source/Target/Thread.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Target/Thread.cpp?rev=192987&r1=192986&r2=192987&view=diff
==============================================================================
--- lldb/trunk/source/Target/Thread.cpp (original)
+++ lldb/trunk/source/Target/Thread.cpp Fri Oct 18 12:11:02 2013
@@ -282,12 +282,18 @@ Thread::~Thread()
 void 
 Thread::DestroyThread ()
 {
-    // Tell any plans on the plan stack that the thread is being destroyed since
-    // any active plans that have a thread go away in the middle of might need
-    // to do cleanup.
+    // Tell any plans on the plan stacks that the thread is being destroyed since
+    // any plans that have a thread go away in the middle of might need
+    // to do cleanup, or in some cases NOT do cleanup...
     for (auto plan : m_plan_stack)
         plan->ThreadDestroyed();
 
+    for (auto plan : m_discarded_plan_stack)
+        plan->ThreadDestroyed();
+
+    for (auto plan : m_completed_plan_stack)
+        plan->ThreadDestroyed();
+
     m_destroy_called = true;
     m_plan_stack.clear();
     m_discarded_plan_stack.clear();





More information about the lldb-commits mailing list