diff options
| author | Can Celik <ogulcancelik@gmail.com> | 2026-09-13 13:47:53 +0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-09-13 13:47:53 +0300 |
| commit | fc44f61a10ac04688b2fedfa670f38a463ca25ac (patch) | |
| tree | 29ca9c5411a444c051a7f9ea3db456d113a080d6 /src/server/headless/render.rs | |
| parent | bafbc0949dd996cf7fd0848c8965e254348cc11e (diff) | |
fix: disconnect stalled terminal observers (#4039)
Diffstat (limited to 'src/server/headless/render.rs')
| -rw-r--r-- | src/server/headless/render.rs | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/src/server/headless/render.rs b/src/server/headless/render.rs index fc55417f..882a1615 100644 --- a/src/server/headless/render.rs +++ b/src/server/headless/render.rs @@ -462,6 +462,16 @@ impl HeadlessServer { let mut broken_clients: Vec<u64> = Vec::new(); for (client_id, (cols, rows), cell_size, _is_foreground, mode) in render_targets { + #[cfg(unix)] + if matches!(mode, ClientConnectionMode::TerminalObserve { .. }) + && self + .clients + .get(&client_id) + .is_some_and(|client| client.deferred_render() != DeferredRender::None) + { + // The writer-drained event schedules recovery, even if pane output stops. + continue; + } let area = Rect::new(0, 0, cols, rows); let shell_target = self.shell_target_for_client(client_id); let shell_tab_id = self.shell_tab_id_for_client(client_id); |
