diff options
| author | Can Celik <ogulcancelik@gmail.com> | 2026-09-13 22:08:15 +0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-09-13 22:08:15 +0300 |
| commit | 8d213f85633d7fc9c3e33825e039c782414e0fb0 (patch) | |
| tree | cd704940055a1b64be29a6f080cbb70a1f85f023 /src/platform/unix_common.rs | |
| parent | a7a1410abb76d8f926ccdf0b36c42e8ce057c555 (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.rs | 11 |
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", |
