fix(tab): catch and report errors about tty I/O (#1051)
Quick and dirty bandaid fix to some server crashes which occur to me lately. The underlying issue seems to be a race condition somewhere when the shell in the pane exits and the tty file descriptor becomes invalid, but zellij wants to write/read it? Bug trigger: - open some panes - exit the shells in the panes by spamming Ctrl-D works best when the system only runs on a single CPU, run the following to disable all cores but one: echo 0 | sudo tee /sys/devices/system/cpu/cpu*/online Co-authored-by: raphTec <git@raphtec.net>
This commit is contained in:
parent
05e6579508
commit
bda37c3dd3
1 changed files with 8 additions and 5 deletions
|
|
@ -849,12 +849,15 @@ impl Tab {
|
||||||
.get(&pane_id)
|
.get(&pane_id)
|
||||||
.unwrap_or_else(|| self.tiled_panes.get_pane(pane_id).unwrap());
|
.unwrap_or_else(|| self.tiled_panes.get_pane(pane_id).unwrap());
|
||||||
let adjusted_input = active_terminal.adjust_input_to_terminal(input_bytes);
|
let adjusted_input = active_terminal.adjust_input_to_terminal(input_bytes);
|
||||||
self.os_api
|
if let Err(e) = self
|
||||||
|
.os_api
|
||||||
.write_to_tty_stdin(active_terminal_id, &adjusted_input)
|
.write_to_tty_stdin(active_terminal_id, &adjusted_input)
|
||||||
.expect("failed to write to terminal");
|
{
|
||||||
self.os_api
|
log::error!("failed to write to terminal: {}", e);
|
||||||
.tcdrain(active_terminal_id)
|
}
|
||||||
.expect("failed to drain terminal");
|
if let Err(e) = self.os_api.tcdrain(active_terminal_id) {
|
||||||
|
log::error!("failed to drain terminal: {}", e);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
PaneId::Plugin(pid) => {
|
PaneId::Plugin(pid) => {
|
||||||
for key in parse_keys(&input_bytes) {
|
for key in parse_keys(&input_bytes) {
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue