summaryrefslogtreecommitdiff
path: root/tests/testdata/run/process_stdin_unblock.mjs
diff options
context:
space:
mode:
authorDivy Srivastava <dj.srivastava23@gmail.com>2024-05-29 09:53:04 -0700
committerGitHub <noreply@github.com>2024-05-29 22:23:04 +0530
commita947c6fbf7c71544687c79716eadbffe4bdedc82 (patch)
tree50807b95951b2aaf6b2126f66cd02e8990fd7bcd /tests/testdata/run/process_stdin_unblock.mjs
parent4f9b23b3664578c2bf48415db246fb21e49abddb (diff)
fix(ext/node): windows cancel stdin read in line mode (#23969)
This patch fixes stdin read hanging on user input when switching tty mode on Windows Fixes #21111 On Windows, when switching from line to raw mode: - Cancel ongoing console read by writing a return keypress to its input buffer. This blocks the main thread until any ongoing read has been cancelled to prevent interference with the screen state. - On the read thread, restore the cursor position to where it was before writing the enter, undoing its effect on the screen state. - Restart reading and notify the main thread.
Diffstat (limited to 'tests/testdata/run/process_stdin_unblock.mjs')
-rw-r--r--tests/testdata/run/process_stdin_unblock.mjs21
1 files changed, 21 insertions, 0 deletions
diff --git a/tests/testdata/run/process_stdin_unblock.mjs b/tests/testdata/run/process_stdin_unblock.mjs
new file mode 100644
index 000000000..bbeea2afb
--- /dev/null
+++ b/tests/testdata/run/process_stdin_unblock.mjs
@@ -0,0 +1,21 @@
+import process from "node:process";
+
+function prompt() {
+ process.stdin.setRawMode(true);
+
+ const { promise, resolve } = Promise.withResolvers();
+
+ const onData = (buf) => {
+ process.stdin.setRawMode(false);
+ process.stdin.removeListener("data", onData);
+ console.log(buf.length);
+ resolve();
+ };
+
+ process.stdin.on("data", onData);
+ return promise;
+}
+
+await prompt();
+await prompt();
+Deno.exit(0);