diff --git a/src/vs/base/common/worker/simpleWorker.ts b/src/vs/base/common/worker/simpleWorker.ts index 0d700e296b133aaf70a9337e5d509739f77b7789..b786c8fe5f2c891fdf29487ce0f8c1dee5d5020b 100644 --- a/src/vs/base/common/worker/simpleWorker.ts +++ b/src/vs/base/common/worker/simpleWorker.ts @@ -160,6 +160,7 @@ export class SimpleWorkerClient extends Disposable { private _onModuleLoaded:TPromise; private _protocol: SimpleWorkerProtocol; private _proxy: T; + private _lastRequestTimestamp = -1; constructor(workerFactory:IWorkerFactory, moduleId:string, ctor:any) { super(); @@ -223,9 +224,14 @@ export class SimpleWorkerClient extends Disposable { return this._proxy; } + public getLastRequestTimestamp(): number { + return this._lastRequestTimestamp; + } + private _request(method:string, args:any[]): TPromise { return new TPromise((c, e, p) => { this._onModuleLoaded.then(() => { + this._lastRequestTimestamp = Date.now(); this._protocol.sendMessage(method, args).then(c, e); }, e); }, () => { diff --git a/src/vs/languages/typescript/common/typescriptMode.ts b/src/vs/languages/typescript/common/typescriptMode.ts index 6f64532380028f5c3aa1bd3c3381f73ceb0ec229..e8dc12bb00601720934691984fc7a9ba52f82b96 100644 --- a/src/vs/languages/typescript/common/typescriptMode.ts +++ b/src/vs/languages/typescript/common/typescriptMode.ts @@ -67,6 +67,16 @@ export class TypeScriptMode extend const factory = new DefaultWorkerFactory(); let client: SimpleWorkerClient; + let handle: number; + + this._disposables.push({ + dispose() { + clearTimeout(handle); + if (client) { + client.dispose(); + } + } + }); const worker = () => { @@ -75,6 +85,18 @@ export class TypeScriptMode extend factory, 'vs/languages/typescript/common/worker/typescriptWorker', AbstractWorker); + + handle = setInterval(() => { + if (Date.now() - client.getLastRequestTimestamp() > 1000 * 60 * 5) { + dispose(); + } + }, 1000 * 60); + + function dispose() { + clearTimeout(handle); + client.dispose(); + client = undefined; + } } let result = client.get();