Skip to content

--reconnection-grace-time does not survive closing the browser tab #7955

Description

@hugodeco

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).

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingneeds-investigationThis issue needs to be further investigated

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions