Skip to content

Commit

Permalink
#40196 Dispose output writers on shutdown
Browse files Browse the repository at this point in the history
  • Loading branch information
sandy081 committed Dec 18, 2017
1 parent 9df90b3 commit 8769dbe
Showing 1 changed file with 13 additions and 2 deletions.
15 changes: 13 additions & 2 deletions src/vs/workbench/parts/output/electron-browser/outputServices.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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';

Expand Down Expand Up @@ -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 {
Expand Down Expand Up @@ -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;

Expand All @@ -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);

Expand All @@ -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<IModel> {
Expand Down Expand Up @@ -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();
}
}

0 comments on commit 8769dbe

Please sign in to comment.