Fixed a thinko in the handling of the case where more than one thread had stopped...
authorJim Ingham <jingham@apple.com>
Thu, 13 Dec 2012 22:24:15 +0000 (22:24 +0000)
committerJim Ingham <jingham@apple.com>
Thu, 13 Dec 2012 22:24:15 +0000 (22:24 +0000)
Should be that if any of the threads wants to stop, we should stop.  The opposite was what was actually happening

<rdar://problem/12869725>

llvm-svn: 170153

lldb/source/Target/Process.cpp

index 5394923..38622f0 100644 (file)
@@ -3792,7 +3792,11 @@ Process::ProcessEventData::DoOnRemoval (Event *event_ptr)
         for (idx = 0; idx < num_threads; ++idx)
             thread_index_array[idx] = curr_thread_list.GetThreadAtIndex(idx)->GetIndexID();
         
-        bool still_should_stop = true;
+        // Use this to track whether we should continue from here.  We will only continue the target running if
+        // no thread says we should stop.  Of course if some thread's PerformAction actually sets the target running,
+        // then it doesn't matter what the other threads say...
+        
+        bool still_should_stop = false;
         
         for (idx = 0; idx < num_threads; ++idx)
         {
@@ -3833,10 +3837,10 @@ Process::ProcessEventData::DoOnRemoval (Event *event_ptr)
                     SetRestarted (true);
                     break;
                 }
-                else if (!stop_info_sp->ShouldStop(event_ptr))
-                {
-                    still_should_stop = false;
-                }
+                
+                bool this_thread_wants_to_stop = stop_info_sp->ShouldStop(event_ptr);
+                if (still_should_stop == false)
+                    still_should_stop = this_thread_wants_to_stop;
             }
         }