Files
clang-p2996/lldb/test/API/commands/gui/spawn-threads/TestGuiSpawnThreads.py
Pavel Kosov 83695d45d6 [lldb][gui] Update TreeItem children's m_parent on move
Before this patch, any time TreeItem is copied in Resize method, its
parent is not updated, which can cause crashes when, for example, thread
window with multiple hierarchy levels is updated. Makes TreeItem
move-only, removes TreeItem's m_delegate extra self-assignment by making
it a pointer, adds code to fix up children's parent on move constructor
and operator=
Patch prepared by NH5pml30

~~~

Huawei RRI, OS Lab

Reviewed By: clayborg

Differential Revision: https://reviews.llvm.org/D157960
2023-08-16 11:10:00 +03:00

48 lines
1.4 KiB
Python

"""
Test that 'gui' does not crash when adding new threads, which
populate TreeItem's children and may be reallocated elsewhere.
"""
import lldb
from lldbsuite.test.decorators import *
from lldbsuite.test.lldbtest import *
from lldbsuite.test.lldbpexpect import PExpectTest
import sys
class TestGuiSpawnThreadsTest(PExpectTest):
# PExpect uses many timeouts internally and doesn't play well
# under ASAN on a loaded machine..
@skipIfAsan
@skipIfCursesSupportMissing
def test_gui(self):
self.build()
self.launch(executable=self.getBuildArtifact('a.out'), dimensions=(100, 500))
self.expect(
'breakpoint set -f main.cpp -p "break here"', substrs=['Breakpoint 1', 'address =']
)
self.expect(
'breakpoint set -f main.cpp -p "before join"', substrs=['Breakpoint 2', 'address =']
)
self.expect("run", substrs=["stop reason ="])
escape_key = chr(27).encode()
# Start the GUI
self.child.sendline("gui")
self.child.expect_exact("Threads")
self.child.expect_exact(f"thread #1: tid =")
for i in range(5):
# Stopped at the breakpoint, continue over the thread creation
self.child.send("c")
# Check the newly created thread
self.child.expect_exact(f"thread #{i + 2}: tid =")
# Exit GUI.
self.child.send(escape_key)
self.expect_prompt()
self.quit()