提交 e9253558 编写于 作者: J Joao Moreno

fix dirtydiff listener leak

fixes #64238
上级 3f90774b
......@@ -940,6 +940,7 @@ export class DirtyDiffModel {
private diffDelayer: ThrottledDelayer<IChange[]>;
private _originalURIPromise: TPromise<URI>;
private repositoryDisposables = new Set<IDisposable[]>();
private originalModelDisposables: IDisposable[] = [];
private disposables: IDisposable[] = [];
private _onDidChange = new Emitter<ISplice<IChange>[]>();
......@@ -1024,31 +1025,37 @@ export class DirtyDiffModel {
return this._originalURIPromise;
}
this._originalURIPromise = this.getOriginalResource()
.then(originalUri => {
if (!this._editorModel) { // disposed
return null;
}
this._originalURIPromise = this.getOriginalResource().then(originalUri => {
if (!this._editorModel) { // disposed
return null;
}
if (!originalUri) {
this._originalModel = null;
return null;
}
if (this._originalModel && this._originalModel.uri.toString() === originalUri.toString()) {
return originalUri;
}
if (!originalUri) {
this._originalModel = null;
return this.textModelResolverService.createModelReference(originalUri).then(ref => {
if (!this._editorModel) { // disposed
return null;
}
return this.textModelResolverService.createModelReference(originalUri)
.then(ref => {
if (!this._editorModel) { // disposed
return null;
}
this._originalModel = ref.object.textEditorModel;
this._originalModel = ref.object.textEditorModel;
const originalModelDisposables: IDisposable[] = [];
originalModelDisposables.push(ref);
originalModelDisposables.push(ref.object.textEditorModel.onDidChangeContent(() => this.triggerDiff()));
this.disposables.push(ref);
this.disposables.push(ref.object.textEditorModel.onDidChangeContent(() => this.triggerDiff()));
dispose(this.originalModelDisposables);
this.originalModelDisposables = originalModelDisposables;
return originalUri;
});
return originalUri;
});
});
return always(this._originalURIPromise, () => {
this._originalURIPromise = null;
......@@ -1101,6 +1108,7 @@ export class DirtyDiffModel {
}
dispose(): void {
this.originalModelDisposables = dispose(this.originalModelDisposables);
this.disposables = dispose(this.disposables);
this._editorModel = null;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册