Trace terminal loop failures
ci / test (push) Canceled after 0s
ci / fuzz-smoke (push) Canceled after 0s
ci / macos-client (macos-aarch64, macos-14) (push) Canceled after 0s
ci / macos-client (macos-x86_64, macos-13) (push) Canceled after 0s
ci / windows-client (push) Canceled after 0s
ci / package-release (linux-x86_64, ubuntu-latest, , , ) (push) Canceled after 0s
ci / package-release (macos-aarch64, macos-14, , , ) (push) Canceled after 0s
ci / package-release (macos-x86_64, macos-13, , , ) (push) Canceled after 0s
ci / package-release (windows-aarch64, windows-latest, aarch64, windows, aarch64-pc-windows-msvc) (push) Canceled after 0s
ci / package-release (windows-x86_64, windows-latest, , , ) (push) Canceled after 0s
ci / remote-bench (push) Canceled after 0s
ci / publish-gitea-release (push) Canceled after 0s

This commit is contained in:
DuProcess
2026-07-17 19:55:16 -04:00
parent 7a9ad38657
commit 86a1942aa0
+78 -63
View File
@@ -486,22 +486,24 @@ async fn main() -> Result<()> {
detach_once(&socket, &cred, 2).await?; detach_once(&socket, &cred, 2).await?;
return Ok(()); return Ok(());
} }
return run_terminal( return trace_terminal_result(
socket, run_terminal(
cred, socket,
Some(target_udp_addr), cred,
Some(frame), Some(target_udp_addr),
predict, Some(frame),
predict_mode, predict,
escape_key, predict_mode,
startup_command, escape_key,
config.reconnect_timeout_secs, startup_command,
Vec::new(), config.reconnect_timeout_secs,
Vec::new(), Vec::new(),
false, Vec::new(),
None, false,
) None,
.await; )
.await,
);
} }
Err(err) => { Err(err) => {
log_debug( log_debug(
@@ -525,22 +527,24 @@ async fn main() -> Result<()> {
detach_once(&socket, &cred, 2).await?; detach_once(&socket, &cred, 2).await?;
return Ok(()); return Ok(());
} }
return run_terminal( return trace_terminal_result(
socket, run_terminal(
cred, socket,
Some(target_udp_addr), cred,
Some(frame), Some(target_udp_addr),
predict, Some(frame),
predict_mode, predict,
escape_key, predict_mode,
startup_command, escape_key,
config.reconnect_timeout_secs, startup_command,
Vec::new(), config.reconnect_timeout_secs,
Vec::new(), Vec::new(),
false, Vec::new(),
None, false,
) None,
.await; )
.await,
);
} }
Err(err) => { Err(err) => {
log_debug( log_debug(
@@ -601,22 +605,24 @@ async fn main() -> Result<()> {
detach_once(&socket, &cred, 2).await?; detach_once(&socket, &cred, 2).await?;
return Ok(()); return Ok(());
} }
return run_terminal( return trace_terminal_result(
socket, run_terminal(
cred, socket,
Some(addr), cred,
Some(frame), Some(addr),
predict, Some(frame),
predict_mode, predict,
escape_key, predict_mode,
startup_command, escape_key,
config.reconnect_timeout_secs, startup_command,
local_forwards, config.reconnect_timeout_secs,
dynamic_forwards, local_forwards,
args.forward_only, dynamic_forwards,
agent_sock, args.forward_only,
) agent_sock,
.await; )
.await,
);
} }
Err(err) if !forwarding_requested && auth_allows(&auth_preference, "ssh") => { Err(err) if !forwarding_requested && auth_allows(&auth_preference, "ssh") => {
log_debug( log_debug(
@@ -680,22 +686,24 @@ async fn main() -> Result<()> {
detach_once(&socket, &cred, 2).await?; detach_once(&socket, &cred, 2).await?;
return Ok(()); return Ok(());
} }
run_terminal( trace_terminal_result(
socket, run_terminal(
cred, socket,
Some(target_udp_addr), cred,
Some(first), Some(target_udp_addr),
predict, Some(first),
predict_mode, predict,
escape_key, predict_mode,
startup_command, escape_key,
config.reconnect_timeout_secs, startup_command,
Vec::new(), config.reconnect_timeout_secs,
Vec::new(), Vec::new(),
false, Vec::new(),
None, false,
None,
)
.await,
) )
.await
} }
fn run_trust_command(config: &dosh::config::ClientConfig, args: &Args) -> Result<()> { fn run_trust_command(config: &dosh::config::ClientConfig, args: &Args) -> Result<()> {
@@ -6495,6 +6503,13 @@ fn terminal_input_channel() -> (mpsc::Sender<Vec<u8>>, mpsc::Receiver<Vec<u8>>)
mpsc::channel(STDIN_QUEUE_CAPACITY) mpsc::channel(STDIN_QUEUE_CAPACITY)
} }
fn trace_terminal_result(result: Result<()>) -> Result<()> {
if let Err(err) = &result {
dosh::trace::event("client.terminal_error", &[("error", format!("{err:#}"))]);
}
result
}
#[allow(clippy::too_many_arguments)] #[allow(clippy::too_many_arguments)]
async fn run_terminal( async fn run_terminal(
socket: UdpSocket, socket: UdpSocket,