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

Reply via email to