Author: Pavel Labath Date: 2022-03-17T11:52:19-07:00 New Revision: f93d861349f923f6b7ca1a425d3632eec1ff2a72
URL: https://github.com/llvm/llvm-project/commit/f93d861349f923f6b7ca1a425d3632eec1ff2a72 DIFF: https://github.com/llvm/llvm-project/commit/f93d861349f923f6b7ca1a425d3632eec1ff2a72.diff LOG: [lldb] Fix ^C handling in IOHandlerProcessSTDIO D120762 accidentally moved the interrupt check into the block which was reading stdio. This meant that a ^C only took effect after a regular character has been pressed. This patch fixes that and adds a (pexpect) test. Differential revision: https://reviews.llvm.org/D121912 Added: lldb/lldb/test/API/iohandler/sigint/Makefile lldb/lldb/test/API/iohandler/sigint/TestProcessIOHandlerInterrupt.py lldb/lldb/test/API/iohandler/sigint/cat.cpp Modified: Removed: ################################################################################ diff --git a/lldb/lldb/test/API/iohandler/sigint/Makefile b/lldb/lldb/test/API/iohandler/sigint/Makefile new file mode 100644 index 0000000000000..22f1051530f87 --- /dev/null +++ b/lldb/lldb/test/API/iohandler/sigint/Makefile @@ -0,0 +1 @@ +include Makefile.rules diff --git a/lldb/lldb/test/API/iohandler/sigint/TestProcessIOHandlerInterrupt.py b/lldb/lldb/test/API/iohandler/sigint/TestProcessIOHandlerInterrupt.py new file mode 100644 index 0000000000000..f1bd76e348caf --- /dev/null +++ b/lldb/lldb/test/API/iohandler/sigint/TestProcessIOHandlerInterrupt.py @@ -0,0 +1,42 @@ +""" +Test sending SIGINT Process IOHandler +""" + +import os + +import lldb +from lldbsuite.test.decorators import * +from lldbsuite.test.lldbtest import * +from lldbsuite.test.lldbpexpect import PExpectTest + +class TestCase(PExpectTest): + + mydir = TestBase.compute_mydir(__file__) + + def test(self): + self.build(dictionary={"CXX_SOURCES":"cat.cpp"}) + self.launch(executable=self.getBuildArtifact(), timeout=5) + + self.child.sendline("process launch") + self.child.expect("Process .* launched") + + self.child.sendline("Hello cat") + self.child.expect_exact("read: Hello cat") + + self.child.sendintr() + self.child.expect("Process .* stopped") + self.expect_prompt() + + self.expect("bt", substrs=["input_copy_loop"]) + + self.child.sendline("continue") + self.child.expect("Process .* resuming") + + self.child.sendline("Goodbye cat") + self.child.expect_exact("read: Goodbye cat") + + self.child.sendeof() + self.child.expect("Process .* exited") + self.expect_prompt() + + self.quit() diff --git a/lldb/lldb/test/API/iohandler/sigint/cat.cpp b/lldb/lldb/test/API/iohandler/sigint/cat.cpp new file mode 100644 index 0000000000000..5a3d9380e3826 --- /dev/null +++ b/lldb/lldb/test/API/iohandler/sigint/cat.cpp @@ -0,0 +1,12 @@ +#include <iostream> + +void input_copy_loop() { + std::string str; + while (std::getline(std::cin, str)) + std::cout << "read: " << str << std::endl; +} + +int main() { + input_copy_loop(); + return 0; +} _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits