diff options
author | Divy Srivastava <dj.srivastava23@gmail.com> | 2024-05-29 09:53:04 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-05-29 22:23:04 +0530 |
commit | a947c6fbf7c71544687c79716eadbffe4bdedc82 (patch) | |
tree | 50807b95951b2aaf6b2126f66cd02e8990fd7bcd /tests/integration/run_tests.rs | |
parent | 4f9b23b3664578c2bf48415db246fb21e49abddb (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/integration/run_tests.rs')
-rw-r--r-- | tests/integration/run_tests.rs | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/tests/integration/run_tests.rs b/tests/integration/run_tests.rs index 91370a87c..f7aaa9daf 100644 --- a/tests/integration/run_tests.rs +++ b/tests/integration/run_tests.rs @@ -3142,6 +3142,20 @@ itest!(byte_order_mark { }); #[test] +#[cfg(windows)] +fn process_stdin_read_unblock() { + TestContext::default() + .new_command() + .args_vec(["run", "run/process_stdin_unblock.mjs"]) + .with_pty(|mut console| { + console.write_raw("b"); + console.human_delay(); + console.write_line_raw("s"); + console.expect_all(&["1", "1"]); + }); +} + +#[test] fn issue9750() { TestContext::default() .new_command() |