diff options
| author | David Sherret <dsherret@users.noreply.github.com> | 2022-09-04 22:33:06 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-09-04 22:33:06 -0400 |
| commit | 08a6af398fd92517193e20117f9971c272b1bb5f (patch) | |
| tree | 825f8499992bb7a6c227485165b06811d5e46359 /runtime/ops/tty.rs | |
| parent | b0a671df8e2796a30fea4fab06018abee738c8ac (diff) | |
fix(cli): allow using file resource synchronously while being used async (#15747)
Diffstat (limited to 'runtime/ops/tty.rs')
| -rw-r--r-- | runtime/ops/tty.rs | 20 |
1 files changed, 11 insertions, 9 deletions
diff --git a/runtime/ops/tty.rs b/runtime/ops/tty.rs index 2018f954d..2e6d1ea7c 100644 --- a/runtime/ops/tty.rs +++ b/runtime/ops/tty.rs @@ -123,16 +123,18 @@ fn op_set_raw(state: &mut OpState, args: SetRawArgs) -> Result<(), AnyError> { rid, move |std_file, meta_data| { let raw_fd = std_file.as_raw_fd(); - let maybe_tty_mode = &mut meta_data.tty.mode; if is_raw { - if maybe_tty_mode.is_none() { - // Save original mode. - let original_mode = termios::tcgetattr(raw_fd)?; - maybe_tty_mode.replace(original_mode); - } - - let mut raw = maybe_tty_mode.clone().unwrap(); + let mut raw = { + let mut meta_data = meta_data.lock(); + let maybe_tty_mode = &mut meta_data.tty.mode; + if maybe_tty_mode.is_none() { + // Save original mode. + let original_mode = termios::tcgetattr(raw_fd)?; + maybe_tty_mode.replace(original_mode); + } + maybe_tty_mode.clone().unwrap() + }; raw.input_flags &= !(termios::InputFlags::BRKINT | termios::InputFlags::ICRNL @@ -155,7 +157,7 @@ fn op_set_raw(state: &mut OpState, args: SetRawArgs) -> Result<(), AnyError> { termios::tcsetattr(raw_fd, termios::SetArg::TCSADRAIN, &raw)?; } else { // Try restore saved mode. - if let Some(mode) = maybe_tty_mode.take() { + if let Some(mode) = meta_data.lock().tty.mode.take() { termios::tcsetattr(raw_fd, termios::SetArg::TCSADRAIN, &mode)?; } } |
