diff --git a/lldb/test/API/macosx/queues/TestQueues.py b/lldb/test/API/macosx/queues/TestQueues.py --- a/lldb/test/API/macosx/queues/TestQueues.py +++ b/lldb/test/API/macosx/queues/TestQueues.py @@ -122,6 +122,21 @@ t.GetQueue().GetQueueID(), queue.GetQueueID())) + def check_queue_breakpoints(self, queue1, queue2, queue_breakpoint): + queue1_thread = queue1.GetThreadAtIndex(0) + queue2_thread = queue2.GetThreadAtIndex(0) + + self.assertEqual(queue_breakpoint.GetQueueName(), queue1.GetName(), + "The breakpoint was set for queue %s, but the breakpoint's queue name is %s" % (queue_breakpoint.GetQueueName(), queue1.GetName())) + self.assertTrue(queue_breakpoint.GetHitCount() == 1, + "The breakpoint for queue %s has not been hit" % (queue_breakpoint.GetQueueName())) + self.assertEqual(queue1_thread.GetStopReason(), lldb.eStopReasonBreakpoint, + "Queue %s is not stopped at breakpoint %d" % + (queue1.GetName(), queue_breakpoint.GetID())) + self.assertNotEqual(queue2_thread.GetStopReason(), lldb.eStopReasonBreakpoint, + "Queue %s is stopped at breakpoint %d, but this breakpoint should only be hit for queue %s" % + (queue2.GetName(), queue_breakpoint.GetID(), queue_breakpoint.GetQueueName())) + def queues(self): """Test queues inspection SB APIs without libBacktraceRecording.""" exe = self.getBuildArtifact("a.out") @@ -183,6 +198,13 @@ self.check_queues_threads_match_queue(queue_performer_2) self.check_queues_threads_match_queue(queue_performer_3) + # Run the executable until the stopper function and get the breakpoint + # that's created from that. Then set the queue name of the breakpoint + # to be the name of the main thread + target, process, main_thread, queue_breakpoint = lldbutil.run_to_name_breakpoint(self, "stopper", only_one_thread=False) + queue_breakpoint.SetQueueName(main_thread.GetQueue().GetName()) + self.check_queue_breakpoints(main_thread.GetQueue(), queue_submittor_1, queue_breakpoint) + # We have threads running with all the different dispatch QoS service # levels - find those threads and check that we can get the correct # QoS name for each of them. @@ -291,6 +313,7 @@ if len(threads) != 1: self.fail("Failed to stop at breakpoint 1.") + main_thread = threads[0] self.inferior_process = process libbtr_module_filespec = lldb.SBFileSpec("libBacktraceRecording.dylib") @@ -358,6 +381,13 @@ self.check_queues_threads_match_queue(queue_performer_2) self.check_queues_threads_match_queue(queue_performer_3) + # Run the executable until the stopper function and get the breakpoint + # that's created from that. Then set the queue name of the breakpoint + # to be the name of the main thread + target, process, main_thread, queue_breakpoint = lldbutil.run_to_name_breakpoint(self, "stopper", only_one_thread=False) + queue_breakpoint.SetQueueName(main_thread.GetQueue().GetName()) + self.check_queue_breakpoints(main_thread.GetQueue(), queue_submittor_1, queue_breakpoint) + self.assertTrue(queue_performer_2.GetPendingItemAtIndex( 0).IsValid(), "queue 2's pending item #0 is valid") self.assertTrue(queue_performer_2.GetPendingItemAtIndex(0).GetAddress().GetSymbol(