From af52f2cb8c7060749c6184f8bb91ce3bc7f046a9 Mon Sep 17 00:00:00 2001 From: Alex Dima Date: Wed, 25 Nov 2020 20:23:04 +0100 Subject: [PATCH] `TextModel` should not dispose its `TextBuffer` --- src/vs/editor/common/model.ts | 2 +- .../common/model/pieceTreeTextBuffer/pieceTreeTextBuffer.ts | 6 ------ src/vs/editor/common/model/textModel.ts | 5 ++++- 3 files changed, 5 insertions(+), 8 deletions(-) diff --git a/src/vs/editor/common/model.ts b/src/vs/editor/common/model.ts index e41f1fdbcba..98ce23d7b0e 100644 --- a/src/vs/editor/common/model.ts +++ b/src/vs/editor/common/model.ts @@ -1327,7 +1327,7 @@ export interface IReadonlyTextBuffer { /** * @internal */ -export interface ITextBuffer extends IReadonlyTextBuffer, IDisposable { +export interface ITextBuffer extends IReadonlyTextBuffer { setEOL(newEOL: '\r\n' | '\n'): void; applyEdits(rawOperations: ValidAnnotatedEditOperation[], recordTrimAutoWhitespace: boolean, computeUndoEdits: boolean): ApplyEditsResult; } diff --git a/src/vs/editor/common/model/pieceTreeTextBuffer/pieceTreeTextBuffer.ts b/src/vs/editor/common/model/pieceTreeTextBuffer/pieceTreeTextBuffer.ts index 2401eba3b3c..2b73835b2f4 100644 --- a/src/vs/editor/common/model/pieceTreeTextBuffer/pieceTreeTextBuffer.ts +++ b/src/vs/editor/common/model/pieceTreeTextBuffer/pieceTreeTextBuffer.ts @@ -51,12 +51,6 @@ export class PieceTreeTextBuffer extends Disposable implements ITextBuffer { this._pieceTree = new PieceTreeBase(chunks, eol, eolNormalized); } - dispose(): void { - super.dispose(); - // Manually release reference to previous piece tree to avoid large leaks - this._pieceTree = new PieceTreeBase([], '\n', true); - } - // #region TextBuffer public equals(other: ITextBuffer): boolean { if (!(other instanceof PieceTreeTextBuffer)) { diff --git a/src/vs/editor/common/model/textModel.ts b/src/vs/editor/common/model/textModel.ts index 9b161cb202a..2ba7cb4ee89 100644 --- a/src/vs/editor/common/model/textModel.ts +++ b/src/vs/editor/common/model/textModel.ts @@ -328,7 +328,7 @@ export class TextModel extends Disposable implements model.ITextModel { this._undoRedoService = undoRedoService; this._attachedEditorCount = 0; - this._buffer = this._register(createTextBuffer(source, creationOptions.defaultEOL)); + this._buffer = createTextBuffer(source, creationOptions.defaultEOL); this._options = TextModel.resolveOptions(this._buffer, creationOptions); @@ -387,6 +387,9 @@ export class TextModel extends Disposable implements model.ITextModel { this._isDisposed = true; super.dispose(); this._isDisposing = false; + // Manually release reference to previous text buffer to avoid large leaks + // in case someone leaks a TextModel reference + this._buffer = createTextBuffer('', this._options.defaultEOL); } private _assertNotDisposed(): void { -- GitLab