Don't terminate extension host on a timeout

We will clean it up on our end if necessary. This allows reconnections
after any length of time.
This commit is contained in:
Asher
2019-09-13 10:48:04 -05:00
parent 48a97abe1d
commit 1bd5eca73d
3 changed files with 35 additions and 44 deletions

View File

@@ -449,7 +449,7 @@ export class MainServer extends Server {
public readonly onDidClientConnect = this._onDidClientConnect.event;
private readonly ipc = new IPCServer(this.onDidClientConnect);
private readonly maxOfflineConnections = 5;
private readonly maxExtraOfflineConnections = 0;
private readonly connections = new Map<ConnectionType, Map<string, Connection>>();
private readonly services = new ServiceCollection();
@@ -601,7 +601,7 @@ export class MainServer extends Server {
let connection: Connection;
if (message.desiredConnectionType === ConnectionType.Management) {
connection = new ManagementConnection(protocol);
connection = new ManagementConnection(protocol, token);
this._onDidClientConnect.fire({
protocol, onDidClientDisconnect: connection.onClose,
});
@@ -609,28 +609,26 @@ export class MainServer extends Server {
const buffer = protocol.readEntireBuffer();
connection = new ExtensionHostConnection(
message.args ? message.args.language : "en",
protocol, buffer,
protocol, buffer, token,
this.services.get(ILogService) as ILogService,
this.services.get(IEnvironmentService) as IEnvironmentService,
);
}
connections.set(token, connection);
this.disposeOldOfflineConnections();
connection.onClose(() => connections.delete(token));
this.disposeOldOfflineConnections(connections);
break;
case ConnectionType.Tunnel: return protocol.tunnel();
default: throw new Error("Unrecognized connection type");
}
}
private disposeOldOfflineConnections(): void {
this.connections.forEach((connections) => {
const offline = Array.from(connections.values())
.filter((connection) => typeof connection.offline !== "undefined");
for (let i = 0, max = offline.length - this.maxOfflineConnections; i < max; ++i) {
offline[i].dispose();
}
});
private disposeOldOfflineConnections(connections: Map<string, Connection>): void {
const offline = Array.from(connections.values())
.filter((connection) => typeof connection.offline !== "undefined");
for (let i = 0, max = offline.length - this.maxExtraOfflineConnections; i < max; ++i) {
offline[i].dispose();
}
}
private async initializeServices(args: ParsedArgs): Promise<void> {