From e3c6ba4bd7486cc42ffb8831f4257b98ce2582a6 Mon Sep 17 00:00:00 2001 From: Thorsten Ball Date: Tue, 15 Oct 2024 19:20:06 +0200 Subject: [PATCH] ssh remote: Revert #19193 and treat killed proxy as non-zero (#19234) This does two things. Important one: it reverts #19193, which lead to our whole process handling breaking. When the `proxy` process was killed, it apparently didn't close the stdout/stderr anymore, which meant we would not detect when it died. (Watching its `status()` in the io loop also didn't work!) We should figure out how to keep our process handling working before we make this change in #19193, which sounds reasonable. Second, less important thing: I think we should treat the process being killed from a signal as non-zero, as an error. Release Notes: - N/A --- crates/remote/src/ssh_session.rs | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/crates/remote/src/ssh_session.rs b/crates/remote/src/ssh_session.rs index 2db494ecbe..fbe6e3e0fa 100644 --- a/crates/remote/src/ssh_session.rs +++ b/crates/remote/src/ssh_session.rs @@ -846,7 +846,10 @@ impl SshRemoteClient { child_stdin.close().await?; outgoing_rx.close(); let status = ssh_proxy_process.status().await?; - return Ok(status.code()); + // If we don't have a code, we assume process + // has been killed and treat it as non-zero exit + // code + return Ok(status.code().or_else(|| Some(1))); } Ok(len) => { if len < stdout_buffer.len() { @@ -1175,14 +1178,7 @@ impl SshRemoteConnection { .stderr(Stdio::piped()) .env("SSH_ASKPASS_REQUIRE", "force") .env("SSH_ASKPASS", &askpass_script_path) - .args([ - "-N", - "-o", - "ControlPersist=no", - "-o", - "ControlMaster=yes", - "-o", - ]) + .args(["-N", "-o", "ControlMaster=yes", "-o"]) .arg(format!("ControlPath={}", socket_path.display())) .arg(&url) .spawn()?;