vscode: fix memory leak on server restart

The memory leak was because on the server restrart the array of extensionContext.substiptions was not cleared
This commit is contained in:
veetaha 2020-03-26 23:44:19 +02:00
parent 68ff71e3ab
commit e1a5e9565b

View file

@ -48,21 +48,19 @@ export async function activate(context: vscode.ExtensionContext) {
ctx = await Ctx.create(config, context, serverPath); ctx = await Ctx.create(config, context, serverPath);
// Commands which invokes manually via command palette, shortcut, etc. // Commands which invokes manually via command palette, shortcut, etc.
ctx.registerCommand('reload', (ctx) => {
return async () => { // Reloading is inspired by @DanTup maneuver: https://github.com/microsoft/vscode/issues/45774#issuecomment-373423895
vscode.window.showInformationMessage('Reloading rust-analyzer...'); ctx.registerCommand('reload', _ => async () => {
// @DanTup maneuver void vscode.window.showInformationMessage('Reloading rust-analyzer...');
// https://github.com/microsoft/vscode/issues/45774#issuecomment-373423895 await deactivate();
await deactivate(); while (context.subscriptions.length > 0) {
for (const sub of ctx.subscriptions) { try {
try { context.subscriptions.pop()!.dispose();
sub.dispose(); } catch (err) {
} catch (e) { log.error("Dispose error:", err);
log.error(e);
}
} }
await activate(context); }
}; await activate(context).catch(log.error);
}); });
ctx.registerCommand('analyzerStatus', commands.analyzerStatus); ctx.registerCommand('analyzerStatus', commands.analyzerStatus);
@ -96,7 +94,7 @@ export async function activate(context: vscode.ExtensionContext) {
} }
export async function deactivate() { export async function deactivate() {
await ctx?.client?.stop(); await ctx?.client.stop();
ctx = undefined; ctx = undefined;
} }