diff --git a/src/vs/base/common/event.ts b/src/vs/base/common/event.ts index 88b4105fe07ba58a4ef6d1a9e4836a2925de7c28..699793d593f8314a055c4c59e0f6eb57da0ac8c8 100644 --- a/src/vs/base/common/event.ts +++ b/src/vs/base/common/event.ts @@ -488,7 +488,7 @@ export class Emitter { private readonly _leakageMon?: LeakageMonitor; private _disposed: boolean = false; private _event?: Event; - private _deliveryQueue: [Listener, T][]; + private _deliveryQueue?: LinkedList<[Listener, T]>; protected _listeners?: LinkedList>; constructor(options?: EmitterOptions) { @@ -570,14 +570,14 @@ export class Emitter { // the driver of this if (!this._deliveryQueue) { - this._deliveryQueue = []; + this._deliveryQueue = new LinkedList(); } for (let iter = this._listeners.iterator(), e = iter.next(); !e.done; e = iter.next()) { this._deliveryQueue.push([e.value, event]); } - while (this._deliveryQueue.length > 0) { + while (this._deliveryQueue.size > 0) { const [listener, event] = this._deliveryQueue.shift()!; try { if (typeof listener === 'function') { @@ -594,10 +594,10 @@ export class Emitter { dispose() { if (this._listeners) { - this._listeners = undefined; + this._listeners.clear(); } if (this._deliveryQueue) { - this._deliveryQueue.length = 0; + this._deliveryQueue.clear(); } if (this._leakageMon) { this._leakageMon.dispose();