Skip to content
Draft
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@ namespace Microsoft.Testing.Platform.Hosts;
/// </summary>
internal abstract class CommonHost(ServiceProvider serviceProvider) : IHost
{
private readonly List<object> _alreadyDisposedServices = [];

public ServiceProvider ServiceProvider => serviceProvider;

protected IPushOnlyProtocol? PushOnlyProtocol => ServiceProvider.GetService<IPushOnlyProtocol>();
Expand Down Expand Up @@ -69,7 +71,7 @@ public async Task<int> RunAsync()
}
finally
{
await DisposeServiceProviderAsync(ServiceProvider, isProcessShutdown: true).ConfigureAwait(false);
await DisposeServiceProviderAsync(ServiceProvider, alreadyDisposed: _alreadyDisposedServices, isProcessShutdown: true).ConfigureAwait(false);
await DisposeHelper.DisposeAsync(ServiceProvider.GetService<FileLoggerProvider>()).ConfigureAwait(false);
await DisposeHelper.DisposeAsync(PushOnlyProtocol).ConfigureAwait(false);

Expand Down Expand Up @@ -121,6 +123,7 @@ private async Task<int> RunTestAppAsync(CancellationToken testApplicationCancell
{
await testApplicationLifecycleCallbacks.AfterRunAsync(exitCode, testApplicationCancellationToken).ConfigureAwait(false);
await DisposeHelper.DisposeAsync(testApplicationLifecycleCallbacks).ConfigureAwait(false);
_alreadyDisposedServices.Add(testApplicationLifecycleCallbacks);
}
#pragma warning restore CS0618 // Type or member is obsolete
}
Expand Down Expand Up @@ -243,7 +246,6 @@ protected static async Task DisposeServiceProviderAsync(ServiceProvider serviceP
#pragma warning disable CS0618 // Type or member is obsolete
if (!isProcessShutdown &&
service is ITelemetryCollector or
ITestHostApplicationLifetime or
ITestHostApplicationLifetime or
IPushOnlyProtocol)
{
Expand All @@ -269,7 +271,7 @@ ITestHostApplicationLifetime or
if (!alreadyDisposed.Contains(dataConsumer))
{
await DisposeHelper.DisposeAsync(dataConsumer).ConfigureAwait(false);
alreadyDisposed.Add(service);
alreadyDisposed.Add(dataConsumer);
}
}
}
Expand Down
Loading