From 732824c35467b7d625421d3dc048bb1bbe99377e Mon Sep 17 00:00:00 2001 From: Matt Bierner Date: Tue, 13 Jun 2017 15:45:20 -0700 Subject: [PATCH] Fixing TSServer Restart Happening Twice Fixes #27817 **Bug** When triggering a manual TSServer restart, we currently start a new instance than immediatly kill it and start another new instance of the service. This is caused by the current handler for proces crashes not knowing that it should not restart the service for manual restarts. **Fix** Make sure kill doesn't automatically try to start up another instance of the TS Server when we manually restart the server --- extensions/typescript/src/typescriptServiceClient.ts | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/extensions/typescript/src/typescriptServiceClient.ts b/extensions/typescript/src/typescriptServiceClient.ts index 212d7cb3b13..e2bcf481277 100644 --- a/extensions/typescript/src/typescriptServiceClient.ts +++ b/extensions/typescript/src/typescriptServiceClient.ts @@ -240,6 +240,8 @@ export default class TypeScriptServiceClient implements ITypescriptServiceClient private firstStart: number; private lastStart: number; private numberRestarts: number; + private isRestarting: boolean = false; + private cancellationPipeName: string | null = null; private requestQueue: RequestQueue; @@ -305,13 +307,14 @@ export default class TypeScriptServiceClient implements ITypescriptServiceClient public restartTsServer(): void { const start = () => { - this.servicePromise = this.startService(); + this.servicePromise = this.startService(true); return this.servicePromise; }; if (this.servicePromise) { this.servicePromise = this.servicePromise.then(cp => { if (cp) { + this.isRestarting = true; cp.kill(); } }).then(start); @@ -352,7 +355,7 @@ export default class TypeScriptServiceClient implements ITypescriptServiceClient return this._onReady.promise; } - public info(message: string, data?: any): void { + private info(message: string, data?: any): void { this.logger.info(message, data); } @@ -360,7 +363,7 @@ export default class TypeScriptServiceClient implements ITypescriptServiceClient this.logger.warn(message, data); } - public error(message: string, data?: any): void { + private error(message: string, data?: any): void { this.logger.error(message, data); } @@ -567,7 +570,8 @@ export default class TypeScriptServiceClient implements ITypescriptServiceClient if (this.tsServerLogFile) { this.info(`TSServer log file: ${this.tsServerLogFile}`); } - this.serviceExited(true); + this.serviceExited(!this.isRestarting); + this.isRestarting = false; }); this.reader = new Reader( -- GitLab