aboutsummaryrefslogtreecommitdiff
path: root/src/server
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/server
parenta7a1410abb76d8f926ccdf0b36c42e8ce057c555 (diff)
fix: clean up failed terminal observer setup (#4071)
refs #3612
Diffstat (limited to 'src/server')
-rw-r--r--src/server/client_transport.rs11
1 files changed, 9 insertions, 2 deletions
diff --git a/src/server/client_transport.rs b/src/server/client_transport.rs
index da682c06..210a840b 100644
--- a/src/server/client_transport.rs
+++ b/src/server/client_transport.rs
@@ -1042,10 +1042,17 @@ fn client_read_loop_with_endpoint_controls(
ClientMessage::ObserveTerminal { target } => {
#[cfg(unix)]
{
- stream.set_send_timeout(Some(OBSERVER_WRITE_TIMEOUT))?;
// macOS Unix sockets can block even with per-send MSG_DONTWAIT.
// ClientStreamReader preserves blocking reads on the shared socket.
- stream.set_nonblocking(true)?;
+ let configured = stream
+ .set_send_timeout(Some(OBSERVER_WRITE_TIMEOUT))
+ .and_then(|()| stream.set_nonblocking(true));
+ if let Err(err) = configured {
+ let _ = crate::platform::shutdown_client_stream(&stream);
+ let _ = server_event_tx
+ .blocking_send(ServerEvent::ClientDisconnected { client_id });
+ return Err(err);
+ }
}
ServerEvent::ClientObserveTerminal { client_id, target }
}