提交 8769dbe3 编写于 作者: S Sandeep Somavarapu

#40196 Dispose output writers on shutdown

上级 9df90b3d
......@@ -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<IModel> {
......@@ -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
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册