aboutsummaryrefslogtreecommitdiff
path: root/src/platform/unix_common.rs
diff options
context:
space:
mode:
authorCan Celik <ogulcancelik@gmail.com>2026-09-13 22:08:15 +0300
committerGitHub <noreply@github.com>2026-09-13 22:08:15 +0300
commit8d213f85633d7fc9c3e33825e039c782414e0fb0 (patch)
treecd704940055a1b64be29a6f080cbb70a1f85f023 /src/platform/unix_common.rs
parenta7a1410abb76d8f926ccdf0b36c42e8ce057c555 (diff)
fix: clean up failed terminal observer setup (#4071)
refs #3612
Diffstat (limited to 'src/platform/unix_common.rs')
-rw-r--r--src/platform/unix_common.rs11
1 files changed, 8 insertions, 3 deletions
diff --git a/src/platform/unix_common.rs b/src/platform/unix_common.rs
index ccb068f8..a633f283 100644
--- a/src/platform/unix_common.rs
+++ b/src/platform/unix_common.rs
@@ -8,6 +8,11 @@ pub(crate) fn classify_child_exit(status: &portable_pty::ExitStatus) -> super::C
}
}
+pub(crate) fn shutdown_client_stream(stream: &crate::ipc::LocalStream) -> std::io::Result<()> {
+ let crate::ipc::LocalStream::UdSocket(stream) = stream;
+ stream.inner().shutdown(std::net::Shutdown::Both)
+}
+
pub(crate) struct ClientStreamReader<'a>(pub(crate) &'a mut crate::ipc::LocalStream);
impl std::io::Read for ClientStreamReader<'_> {
@@ -45,14 +50,14 @@ pub(crate) fn write_client_stream(
use std::os::fd::AsRawFd as _;
use std::time::Instant;
- let crate::ipc::LocalStream::UdSocket(stream) = stream;
- let mut socket = stream.inner();
+ let crate::ipc::LocalStream::UdSocket(socket) = stream;
+ let mut socket = socket.inner();
let Some(timeout) = socket.write_timeout()? else {
return socket.write_all(data);
};
let timed_out = || {
// Dropping the writer clone alone would leave the reader blocked.
- let _ = stream.inner().shutdown(std::net::Shutdown::Both);
+ let _ = shutdown_client_stream(stream);
io::Error::new(
io::ErrorKind::TimedOut,
"terminal observer stopped receiving output",