diff --git a/src/vs/workbench/parts/output/electron-browser/outputServices.ts b/src/vs/workbench/parts/output/electron-browser/outputServices.ts index 1fc89cd43ae38..2b0a6e6502043 100644 --- a/src/vs/workbench/parts/output/electron-browser/outputServices.ts +++ b/src/vs/workbench/parts/output/electron-browser/outputServices.ts @@ -32,6 +32,7 @@ import { IWorkbenchEditorService } from 'vs/workbench/services/editor/common/edi import { IEnvironmentService } from 'vs/platform/environment/common/environment'; import { RotatingLogger } from 'spdlog'; import { toLocalISOString } from 'vs/base/common/date'; +import { ILifecycleService } from 'vs/platform/lifecycle/common/lifecycle'; const OUTPUT_ACTIVE_CHANNEL_KEY = 'output.activechannel'; @@ -235,6 +236,7 @@ class AppendableFileOutputChannel extends AbstractOutputChannel implements Outpu this.outputWriter = new RotatingLogger(this.id, this.file.fsPath, 1024 * 1024 * 30, 5); this.outputWriter.clearFormatters(); + this._register(toDisposable(() => this.outputWriter.drop())); } append(message: string): void { @@ -270,7 +272,7 @@ class AppendableFileOutputChannel extends AbstractOutputChannel implements Outpu } } -export class OutputService implements IOutputService, ITextModelContentProvider { +export class OutputService extends Disposable implements IOutputService, ITextModelContentProvider { public _serviceBrand: any; @@ -289,8 +291,10 @@ export class OutputService implements IOutputService, ITextModelContentProvider @IWorkspaceContextService contextService: IWorkspaceContextService, @ITextModelService textModelResolverService: ITextModelService, @IWorkbenchEditorService private editorService: IWorkbenchEditorService, - @IEnvironmentService private environmentService: IEnvironmentService + @IEnvironmentService private environmentService: IEnvironmentService, + @ILifecycleService lifecycleService: ILifecycleService ) { + super(); const channels = this.getChannels(); this.activeChannelId = this.storageService.get(OUTPUT_ACTIVE_CHANNEL_KEY, StorageScope.WORKSPACE, channels && channels.length > 0 ? channels[0].id : null); @@ -302,6 +306,8 @@ export class OutputService implements IOutputService, ITextModelContentProvider this.onDidPanelOpen(this.panelService.getActivePanel()); panelService.onDidPanelOpen(this.onDidPanelOpen, this); panelService.onDidPanelClose(this.onDidPanelClose, this); + + lifecycleService.onShutdown(() => this.dispose()); } provideTextContent(resource: URI): TPromise { @@ -409,4 +415,9 @@ export class OutputService implements IOutputService, ITextModelContentProvider const label = channelData ? channelData.label : channelId; return this.instantiationService.createInstance(ResourceEditorInput, nls.localize('output', "{0} - Output", label), nls.localize('channel', "Output channel for '{0}'", label), resource); } + + dispose(): void { + this.channels.forEach(channel => channel.dispose()); + super.dispose(); + } } \ No newline at end of file