Skip to content

Commit dc70a8b

Browse files
authored
Merge pull request microsoft#208936 from microsoft/tyriar/208892
Properly dispose of ITerminalService.createOnInstanceEvent calls
2 parents 614fcff + 78426fb commit dc70a8b

File tree

3 files changed

+15
-15
lines changed

3 files changed

+15
-15
lines changed

src/vs/workbench/api/browser/mainThreadTerminalShellIntegration.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,13 @@ export class MainThreadTerminalShellIntegration extends Disposable implements Ma
2525
this._proxy = extHostContext.getProxy(ExtHostContext.ExtHostTerminalShellIntegration);
2626

2727
// onDidChangeTerminalShellIntegration
28-
const onDidAddCommandDetection = this._terminalService.createOnInstanceEvent(instance => {
28+
const onDidAddCommandDetection = this._store.add(this._terminalService.createOnInstanceEvent(instance => {
2929
return Event.map(
3030
Event.filter(instance.capabilities.onDidAddCapabilityType, e => {
3131
return e === TerminalCapability.CommandDetection;
32-
}, this._store), () => instance
32+
}), () => instance
3333
);
34-
});
34+
})).event;
3535
this._store.add(onDidAddCommandDetection(e => this._proxy.$shellIntegrationChange(e.instanceId)));
3636

3737
// onDidStartTerminalShellExecution

src/vs/workbench/contrib/terminal/browser/terminal.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
import { IDimension } from 'vs/base/browser/dom';
77
import { Orientation } from 'vs/base/browser/ui/splitview/splitview';
88
import { Color } from 'vs/base/common/color';
9-
import { Event, IDynamicListEventMultiplexer } from 'vs/base/common/event';
9+
import { Event, IDynamicListEventMultiplexer, type DynamicListEventMultiplexer } from 'vs/base/common/event';
1010
import { DisposableStore, IDisposable } from 'vs/base/common/lifecycle';
1111
import { OperatingSystem } from 'vs/base/common/platform';
1212
import { URI } from 'vs/base/common/uri';
@@ -342,7 +342,7 @@ export interface ITerminalService extends ITerminalInstanceHost {
342342
* instances and removing old instances as needed.
343343
* @param getEvent Maps the instance to the event.
344344
*/
345-
createOnInstanceEvent<T>(getEvent: (instance: ITerminalInstance) => Event<T>): Event<T>;
345+
createOnInstanceEvent<T>(getEvent: (instance: ITerminalInstance) => Event<T>): DynamicListEventMultiplexer<ITerminalInstance, T>;
346346

347347
/**
348348
* Creates a capability event listener that listens to capabilities on all instances,

src/vs/workbench/contrib/terminal/browser/terminalService.ts

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -155,14 +155,14 @@ export class TerminalService extends Disposable implements ITerminalService {
155155

156156
// Lazily initialized events that fire when the specified event fires on _any_ terminal
157157
// TODO: Batch events
158-
@memoize get onAnyInstanceData() { return this.createOnInstanceEvent(instance => Event.map(instance.onData, data => ({ instance, data }))); }
159-
@memoize get onAnyInstanceDataInput() { return this.createOnInstanceEvent(e => e.onDidInputData); }
160-
@memoize get onAnyInstanceIconChange() { return this.createOnInstanceEvent(e => e.onIconChanged); }
161-
@memoize get onAnyInstanceMaximumDimensionsChange() { return this.createOnInstanceEvent(e => Event.map(e.onMaximumDimensionsChanged, () => e, e.store)); }
162-
@memoize get onAnyInstancePrimaryStatusChange() { return this.createOnInstanceEvent(e => Event.map(e.statusList.onDidChangePrimaryStatus, () => e, e.store)); }
163-
@memoize get onAnyInstanceProcessIdReady() { return this.createOnInstanceEvent(e => e.onProcessIdReady); }
164-
@memoize get onAnyInstanceSelectionChange() { return this.createOnInstanceEvent(e => e.onDidChangeSelection); }
165-
@memoize get onAnyInstanceTitleChange() { return this.createOnInstanceEvent(e => e.onTitleChanged); }
158+
@memoize get onAnyInstanceData() { return this._register(this.createOnInstanceEvent(instance => Event.map(instance.onData, data => ({ instance, data })))).event; }
159+
@memoize get onAnyInstanceDataInput() { return this._register(this.createOnInstanceEvent(e => e.onDidInputData)).event; }
160+
@memoize get onAnyInstanceIconChange() { return this._register(this.createOnInstanceEvent(e => e.onIconChanged)).event; }
161+
@memoize get onAnyInstanceMaximumDimensionsChange() { return this._register(this.createOnInstanceEvent(e => Event.map(e.onMaximumDimensionsChanged, () => e, e.store))).event; }
162+
@memoize get onAnyInstancePrimaryStatusChange() { return this._register(this.createOnInstanceEvent(e => Event.map(e.statusList.onDidChangePrimaryStatus, () => e, e.store))).event; }
163+
@memoize get onAnyInstanceProcessIdReady() { return this._register(this.createOnInstanceEvent(e => e.onProcessIdReady)).event; }
164+
@memoize get onAnyInstanceSelectionChange() { return this._register(this.createOnInstanceEvent(e => e.onDidChangeSelection)).event; }
165+
@memoize get onAnyInstanceTitleChange() { return this._register(this.createOnInstanceEvent(e => e.onTitleChanged)).event; }
166166

167167
constructor(
168168
@IContextKeyService private _contextKeyService: IContextKeyService,
@@ -1188,8 +1188,8 @@ export class TerminalService extends Disposable implements ITerminalService {
11881188
this._editingTerminal = instance;
11891189
}
11901190

1191-
createOnInstanceEvent<T>(getEvent: (instance: ITerminalInstance) => Event<T>): Event<T> {
1192-
return this._register(new DynamicListEventMultiplexer(this.instances, this.onDidCreateInstance, this.onDidDisposeInstance, getEvent)).event;
1191+
createOnInstanceEvent<T>(getEvent: (instance: ITerminalInstance) => Event<T>): DynamicListEventMultiplexer<ITerminalInstance, T> {
1192+
return new DynamicListEventMultiplexer(this.instances, this.onDidCreateInstance, this.onDidDisposeInstance, getEvent);
11931193
}
11941194

11951195
createOnInstanceCapabilityEvent<T extends TerminalCapability, K>(capabilityId: T, getEvent: (capability: ITerminalCapabilityImplMap[T]) => Event<K>): IDynamicListEventMultiplexer<{ instance: ITerminalInstance; data: K }> {

0 commit comments

Comments
 (0)