--reconnection-grace-time does not survive closing the browser tab
- Linguagem predominante
- TypeScript
- Estrelas
- 79.3k
- Forks
- 6.8k
- Merge médio
- 2d 6h
- PRs com merge (30d)
- 41
Descrição
## Problem
`--reconnection-grace-time` (added in #7678) is documented as *"Override the reconnection grace time in seconds. Clients who disconnect for longer than this duration will need to reload the window."*
In practice the setting cannot deliver that, for two independent reasons.
**1. Closing the tab bypasses the grace time entirely.**
`BrowserLifecycleService` listens on `pagehide`/`beforeunload` and runs the workbench shutdown, which disposes the remote connection *gracefully*. On the server, `ManagementConnection` treats a graceful dispose as a finished client:
```
Event.once(this.protocol.onDidDispose)(() => {
this._log(`The client has disconnected gracefully, so the connection will be disposed.`);
this._cleanResources();
});
```
`_cleanResources()` runs immediately — the grace time is never consulted. So closing the tab kills the session regardless of the configured value.
**2. A second connection cuts the grace time to 5 minutes.**
`RemoteExtensionHostAgentServer` shortens every disconnected connection on each new connection:
```
for (const key in this._managementConnections) {
this._managementConnections[key].shortenReconnectionGraceTimeIfNecessary();
}
```
which schedules `ProtocolConstants.ReconnectionShortGraceTime` (5 min). Opening a second tab is enough to cut a deliberately long grace time back down.
## Impact
The use case the flag exists for — leave a long-running task (a build, a CLI, an agent session) running and come back to it later — does not work. The session is gone as soon as the browser is closed.
## Expected
When an operator raises `--reconnection-grace-time` above the default, a disconnected session should survive for the configured duration, including across a closed browser. Installations that never set the flag should keep Code's stock behaviour.
## Environment
Reproduced on code-server 4.128.0 and confirmed present in `main` (4.133.0 / Code 1.133.0).
Guia de contribuição
Direção de pesquisa
Rastreie primeiro o tratamento de pagehide/beforeunload de BrowserLifecycleService e a limpeza de graceful dispose de ManagementConnection. Em seguida, inspecione o caminho de encurtamento da conexão de RemoteExtensionHostAgentServer; estará concluído quando um grace period configurado sobreviver ao fechamento da aba e a uma segunda conexão, enquanto as instalações que usam os padrões mantiverem o comportamento padrão.
Escrita pelo modelo de indexação a partir do texto da issue.
Avaliação
- Stack de tecnologia
- typescript
- Domínio
- backend, web-dev
- Tipo de issue
- Bug
- Dificuldade
- 4/5
- Tempo estimado
- 3-5 dias
- Status de atividade
- Ativa
- Clareza
- Razoavelmente clara
- Facilidade para iniciantes
- 55/100