diff --git a/src/Sarif.WorkItems/SarifWorkItemFiler.cs b/src/Sarif.WorkItems/SarifWorkItemFiler.cs index 24ee7866d..7ece5828c 100644 --- a/src/Sarif.WorkItems/SarifWorkItemFiler.cs +++ b/src/Sarif.WorkItems/SarifWorkItemFiler.cs @@ -21,6 +21,9 @@ namespace Microsoft.CodeAnalysis.Sarif.WorkItems { public class SarifWorkItemFiler : IDisposable { + private readonly object m_syncRoot = new object(); + private FilingClient m_filingClient = null; + /// /// Initializes a new instance of the class. /// @@ -45,15 +48,34 @@ public SarifWorkItemFiler(Uri filingUri = null, SarifWorkItemContext filingConte throw new InvalidOperationException(WorkItemsResources.InconsistentHostUrisProvided); } - this.FilingClient = FilingClientFactory.Create(this.FilingContext.HostUri); - this.Logger = ServiceProviderFactory.ServiceProvider.GetService(); Assembly.GetExecutingAssembly().LogIdentity(); this.FiledWorkItems = new List(); } - public FilingClient FilingClient { get; set; } + public FilingClient FilingClient + { + get + { + if (m_filingClient == null) + { + lock (m_syncRoot) + { + if (m_filingClient == null) + { + this.FilingClient = FilingClientFactory.Create(this.FilingContext.HostUri); + } + } + } + + return m_filingClient; + } + set + { + m_filingClient = value; + } + } public SarifWorkItemContext FilingContext { get; } @@ -108,6 +130,9 @@ public virtual SarifLog FileWorkItems(SarifLog sarifLog) } #endif + Logger.LogInformation("Connecting to filing client: {accountOrOrganization}", this.FilingClient.AccountOrOrganization); + this.FilingClient.Connect(this.FilingContext.PersonalAccessToken).Wait(); + for (int splitFileIndex = 0; splitFileIndex < logsToProcessCount; splitFileIndex++) { SarifLog splitLog = logsToProcess[splitFileIndex]; @@ -153,9 +178,6 @@ public virtual IReadOnlyList SplitLogFile(SarifLog sarifLog) sarifLog = sarifLog ?? throw new ArgumentNullException(nameof(sarifLog)); - Logger.LogInformation("Connecting to filing client: {accountOrOrganization}", this.FilingClient.AccountOrOrganization); - this.FilingClient.Connect(this.FilingContext.PersonalAccessToken).Wait(); - OptionallyEmittedData optionallyEmittedData = this.FilingContext.DataToRemove; if (optionallyEmittedData != OptionallyEmittedData.None) {