提交 6b3e5b5c 编写于 作者: J Johannes Rieken

stop worker after 5min idle

上级 28cb37fe
......@@ -160,6 +160,7 @@ export class SimpleWorkerClient<T> extends Disposable {
private _onModuleLoaded:TPromise<void>;
private _protocol: SimpleWorkerProtocol;
private _proxy: T;
private _lastRequestTimestamp = -1;
constructor(workerFactory:IWorkerFactory, moduleId:string, ctor:any) {
super();
......@@ -223,9 +224,14 @@ export class SimpleWorkerClient<T> extends Disposable {
return this._proxy;
}
public getLastRequestTimestamp(): number {
return this._lastRequestTimestamp;
}
private _request(method:string, args:any[]): TPromise<any> {
return new TPromise<any>((c, e, p) => {
this._onModuleLoaded.then(() => {
this._lastRequestTimestamp = Date.now();
this._protocol.sendMessage(method, args).then(c, e);
}, e);
}, () => {
......
......@@ -67,6 +67,16 @@ export class TypeScriptMode<W extends typescriptWorker.TypeScriptWorker2> extend
const factory = new DefaultWorkerFactory();
let client: SimpleWorkerClient<AbstractWorker>;
let handle: number;
this._disposables.push({
dispose() {
clearTimeout(handle);
if (client) {
client.dispose();
}
}
});
const worker = () => {
......@@ -75,6 +85,18 @@ export class TypeScriptMode<W extends typescriptWorker.TypeScriptWorker2> 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();
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册