diff --git a/src/Agent/NewRelic/Agent/Core/AgentHealth/AgentHealthReporter.cs b/src/Agent/NewRelic/Agent/Core/AgentHealth/AgentHealthReporter.cs index d007282a0..15dc94c24 100644 --- a/src/Agent/NewRelic/Agent/Core/AgentHealth/AgentHealthReporter.cs +++ b/src/Agent/NewRelic/Agent/Core/AgentHealth/AgentHealthReporter.cs @@ -57,8 +57,8 @@ public AgentHealthReporter(IMetricBuilder metricBuilder, IScheduler scheduler) public override void Dispose() { - base.Dispose(); _scheduler.StopExecuting(LogPeriodicReport); + base.Dispose(); } private void LogPeriodicReport() @@ -78,7 +78,7 @@ private void LogPeriodicReport() } } var message = events.Count > 0 ? string.Join(", ", events) : "No events"; - Log.Info($"In the last {_timeBetweenExecutions.TotalMinutes} minutes: {message}"); + Log.Info($"AgentHealthReporter: In the last {_timeBetweenExecutions.TotalMinutes} minutes: {message}"); } public void ReportSupportabilityCountMetric(string metricName, long count = 1) diff --git a/src/Agent/NewRelic/Agent/Core/AgentManager.cs b/src/Agent/NewRelic/Agent/Core/AgentManager.cs index 94e513fde..e355ec5a3 100644 --- a/src/Agent/NewRelic/Agent/Core/AgentManager.cs +++ b/src/Agent/NewRelic/Agent/Core/AgentManager.cs @@ -395,7 +395,7 @@ private void Shutdown(bool cleanShutdown) try { - Log.Debug("Starting the shutdown process for the .NET Agent."); + Log.Info("Starting the shutdown process for the .NET Agent."); AgentInitializer.OnExit -= ProcessExit; @@ -408,15 +408,17 @@ private void Shutdown(bool cleanShutdown) Log.Debug("Shutting down public agent services..."); StopServices(); - Log.Info("The New Relic .NET Agent v{0} has shutdown (pid {1}) on app domain '{2}'", AgentInstallConfiguration.AgentVersion, AgentInstallConfiguration.ProcessId, AgentInstallConfiguration.AppDomainAppVirtualPath ?? AgentInstallConfiguration.AppDomainName); } catch (Exception e) { - Log.Debug(e, "Shutdown error"); + Log.Info(e, "Unexpected exception during agent shutdown"); } finally { + Log.Debug("Shutting down internal agent services..."); Dispose(); + + Log.Info("The New Relic .NET Agent v{Version} has shutdown (pid {pid}) on app domain '{appDomain}'", AgentInstallConfiguration.AgentVersion, AgentInstallConfiguration.ProcessId, AgentInstallConfiguration.AppDomainAppVirtualPath ?? AgentInstallConfiguration.AppDomainName); Serilog.Log.CloseAndFlush(); } } diff --git a/src/Agent/NewRelic/Agent/Core/Aggregators/AbstractAggregator.cs b/src/Agent/NewRelic/Agent/Core/Aggregators/AbstractAggregator.cs index e3fdb71ff..a750fb2be 100644 --- a/src/Agent/NewRelic/Agent/Core/Aggregators/AbstractAggregator.cs +++ b/src/Agent/NewRelic/Agent/Core/Aggregators/AbstractAggregator.cs @@ -82,8 +82,8 @@ private void OnPreCleanShutdown(PreCleanShutdownEvent obj) public override void Dispose() { - base.Dispose(); _scheduler.StopExecuting(Harvest); + base.Dispose(); } } diff --git a/src/Agent/NewRelic/Agent/Core/Aggregators/CustomEventAggregator.cs b/src/Agent/NewRelic/Agent/Core/Aggregators/CustomEventAggregator.cs index 3a11e9051..b974b6a01 100644 --- a/src/Agent/NewRelic/Agent/Core/Aggregators/CustomEventAggregator.cs +++ b/src/Agent/NewRelic/Agent/Core/Aggregators/CustomEventAggregator.cs @@ -43,8 +43,9 @@ public CustomEventAggregator(IDataTransportService dataTransportService, ISchedu public override void Dispose() { - base.Dispose(); _readerWriterLockSlim.Dispose(); + + base.Dispose(); } protected override TimeSpan HarvestCycle => _configuration.CustomEventsHarvestCycle; diff --git a/src/Agent/NewRelic/Agent/Core/Aggregators/ErrorEventAggregator.cs b/src/Agent/NewRelic/Agent/Core/Aggregators/ErrorEventAggregator.cs index a3e82f809..3a5d6de46 100644 --- a/src/Agent/NewRelic/Agent/Core/Aggregators/ErrorEventAggregator.cs +++ b/src/Agent/NewRelic/Agent/Core/Aggregators/ErrorEventAggregator.cs @@ -51,8 +51,8 @@ public ErrorEventAggregator(IDataTransportService dataTransportService, ISchedul public override void Dispose() { - base.Dispose(); _readerWriterLock.Dispose(); + base.Dispose(); } public override void Collect(ErrorEventWireModel errorEventWireModel) diff --git a/src/Agent/NewRelic/Agent/Core/Aggregators/ErrorTraceAggregator.cs b/src/Agent/NewRelic/Agent/Core/Aggregators/ErrorTraceAggregator.cs index 612a984bc..ef7c49ae9 100644 --- a/src/Agent/NewRelic/Agent/Core/Aggregators/ErrorTraceAggregator.cs +++ b/src/Agent/NewRelic/Agent/Core/Aggregators/ErrorTraceAggregator.cs @@ -39,8 +39,8 @@ public ErrorTraceAggregator(IDataTransportService dataTransportService, ISchedul public override void Dispose() { - base.Dispose(); _readerWriterLock.Dispose(); + base.Dispose(); } protected override TimeSpan HarvestCycle => _configuration.ErrorTracesHarvestCycle; diff --git a/src/Agent/NewRelic/Agent/Core/Aggregators/LogEventAggregator.cs b/src/Agent/NewRelic/Agent/Core/Aggregators/LogEventAggregator.cs index 825e8fc4c..fbfd39144 100644 --- a/src/Agent/NewRelic/Agent/Core/Aggregators/LogEventAggregator.cs +++ b/src/Agent/NewRelic/Agent/Core/Aggregators/LogEventAggregator.cs @@ -45,11 +45,6 @@ public LogEventAggregator(IDataTransportService dataTransportService, IScheduler protected override TimeSpan HarvestCycle => _configuration.LogEventsHarvestCycle; protected override bool IsEnabled => _configuration.LogEventCollectorEnabled; - public override void Dispose() - { - base.Dispose(); - } - public override void Collect(LogEventWireModel loggingEventWireModel) { _agentHealthReporter.ReportLoggingEventCollected(); diff --git a/src/Agent/NewRelic/Agent/Core/Aggregators/SpanEventAggregator.cs b/src/Agent/NewRelic/Agent/Core/Aggregators/SpanEventAggregator.cs index 1001b4053..45813b29b 100644 --- a/src/Agent/NewRelic/Agent/Core/Aggregators/SpanEventAggregator.cs +++ b/src/Agent/NewRelic/Agent/Core/Aggregators/SpanEventAggregator.cs @@ -67,8 +67,8 @@ public SpanEventAggregator(IDataTransportService dataTransportService, ISchedule public override void Dispose() { - base.Dispose(); _readerWriterLockSlim.Dispose(); + base.Dispose(); } public override void Collect(ISpanEventWireModel wireModel) diff --git a/src/Agent/NewRelic/Agent/Core/Aggregators/TransactionEventAggregator.cs b/src/Agent/NewRelic/Agent/Core/Aggregators/TransactionEventAggregator.cs index 2f8aa1c8f..b6af92a47 100644 --- a/src/Agent/NewRelic/Agent/Core/Aggregators/TransactionEventAggregator.cs +++ b/src/Agent/NewRelic/Agent/Core/Aggregators/TransactionEventAggregator.cs @@ -49,8 +49,8 @@ public TransactionEventAggregator(IDataTransportService dataTransportService, IS public override void Dispose() { - base.Dispose(); _readerWriterLock.Dispose(); + base.Dispose(); } public override void Collect(TransactionEventWireModel transactionEventWireModel) diff --git a/src/Agent/NewRelic/Agent/Core/DataTransport/Client/NRWebRequestClient.cs b/src/Agent/NewRelic/Agent/Core/DataTransport/Client/NRWebRequestClient.cs index d839d25dc..decca3580 100644 --- a/src/Agent/NewRelic/Agent/Core/DataTransport/Client/NRWebRequestClient.cs +++ b/src/Agent/NewRelic/Agent/Core/DataTransport/Client/NRWebRequestClient.cs @@ -82,11 +82,6 @@ public override IHttpResponse Send(IHttpRequest request) } } - public override void Dispose() - { - base.Dispose(); - } - // for unit testing only public void SetHttpWebRequestFunc(Func getHttpWebRequestFunc ) { diff --git a/src/Agent/NewRelic/Agent/Core/DependencyInjection/AgentContainer.cs b/src/Agent/NewRelic/Agent/Core/DependencyInjection/AgentContainer.cs index 0923797b6..9db6d19a7 100644 --- a/src/Agent/NewRelic/Agent/Core/DependencyInjection/AgentContainer.cs +++ b/src/Agent/NewRelic/Agent/Core/DependencyInjection/AgentContainer.cs @@ -16,7 +16,7 @@ public class AgentContainer : IContainer // use the scope instead of the container to resolve instances. This allows us to replace registrations in a new scope for unit testing private ILifetimeScope _scope; - private bool _disposedValue; + private bool _disposed; private readonly Dictionary _registrationsToReplace = new Dictionary(); public AgentContainer() @@ -102,7 +102,7 @@ public IEnumerable ResolveAll() protected virtual void Dispose(bool disposing) { - if (!_disposedValue) + if (!_disposed) { if (disposing) { @@ -113,7 +113,7 @@ protected virtual void Dispose(bool disposing) _container = null; } - _disposedValue = true; + _disposed = true; } } diff --git a/src/Agent/NewRelic/Agent/Core/Samplers/AbstractSampler.cs b/src/Agent/NewRelic/Agent/Core/Samplers/AbstractSampler.cs index eb2edc305..80f9172c0 100644 --- a/src/Agent/NewRelic/Agent/Core/Samplers/AbstractSampler.cs +++ b/src/Agent/NewRelic/Agent/Core/Samplers/AbstractSampler.cs @@ -32,8 +32,8 @@ protected AbstractSampler(IScheduler scheduler, TimeSpan frequency) public override void Dispose() { - base.Dispose(); Stop(); + base.Dispose(); } protected override void OnConfigurationUpdated(ConfigurationUpdateSource configurationUpdateSource) diff --git a/src/Agent/NewRelic/Agent/Core/Samplers/GCSamplerNetCore.cs b/src/Agent/NewRelic/Agent/Core/Samplers/GCSamplerNetCore.cs index d473180c2..238dfe049 100644 --- a/src/Agent/NewRelic/Agent/Core/Samplers/GCSamplerNetCore.cs +++ b/src/Agent/NewRelic/Agent/Core/Samplers/GCSamplerNetCore.cs @@ -127,10 +127,11 @@ protected override void Stop() public override void Dispose() { - base.Dispose(); _listener?.StopListening(); _listener?.Dispose(); _listener = null; + + base.Dispose(); } } diff --git a/src/Agent/NewRelic/Agent/Core/Samplers/ThreadStatsSampler.cs b/src/Agent/NewRelic/Agent/Core/Samplers/ThreadStatsSampler.cs index 37e320646..72b3aee3a 100644 --- a/src/Agent/NewRelic/Agent/Core/Samplers/ThreadStatsSampler.cs +++ b/src/Agent/NewRelic/Agent/Core/Samplers/ThreadStatsSampler.cs @@ -77,12 +77,13 @@ protected override void Stop() public override void Dispose() { - base.Dispose(); _listener?.StopListening(); #if NETFRAMEWORK // calling .Dispose() in .NET 7 explodes. No idea why. _listener?.Dispose(); #endif _listener = null; + + base.Dispose(); } } diff --git a/src/Agent/NewRelic/Agent/Core/SharedInterfaces/PerformanceCounterProxy.cs b/src/Agent/NewRelic/Agent/Core/SharedInterfaces/PerformanceCounterProxy.cs index 1772f933c..a15e73888 100644 --- a/src/Agent/NewRelic/Agent/Core/SharedInterfaces/PerformanceCounterProxy.cs +++ b/src/Agent/NewRelic/Agent/Core/SharedInterfaces/PerformanceCounterProxy.cs @@ -17,8 +17,7 @@ public interface IPerformanceCounterProxy : IDisposable public class PerformanceCounterProxy : IPerformanceCounterProxy { - private readonly PerformanceCounter _counter; - private bool _counterIsDisposed = false; + private PerformanceCounter _counter; public PerformanceCounterProxy(string categoryName, string counterName, string instanceName) { @@ -32,10 +31,10 @@ public float NextValue() public void Dispose() { - if (_counter != null && !_counterIsDisposed) + if (_counter != null) { _counter.Dispose(); - _counterIsDisposed = true; + _counter = null; } } } diff --git a/src/Agent/NewRelic/Agent/Core/Time/Scheduler.cs b/src/Agent/NewRelic/Agent/Core/Time/Scheduler.cs index 89230fc35..ce03e3304 100644 --- a/src/Agent/NewRelic/Agent/Core/Time/Scheduler.cs +++ b/src/Agent/NewRelic/Agent/Core/Time/Scheduler.cs @@ -202,10 +202,7 @@ public void Dispose() foreach (var timer in _recurringTimers.Values) { - if (timer != null) - { - timer.Dispose(); - } + timer?.Dispose(); } _recurringTimers.Clear(); } @@ -219,8 +216,7 @@ private class TimerStatus : IDisposable public void Dispose() { var timer = Timer; - if (timer != null) - timer.Dispose(); + timer?.Dispose(); } } }