diff --git a/src/OpenTelemetry/Internal/SelfDiagnosticsConfigRefresher.cs b/src/OpenTelemetry/Internal/SelfDiagnosticsConfigRefresher.cs index 6eada2568..4a548a95c 100644 --- a/src/OpenTelemetry/Internal/SelfDiagnosticsConfigRefresher.cs +++ b/src/OpenTelemetry/Internal/SelfDiagnosticsConfigRefresher.cs @@ -274,10 +274,18 @@ namespace OpenTelemetry.Internal this.cancellationTokenSource.Dispose(); } + // Dispose EventListner before files, because EventListner writes to files. + if (this.eventListener != null) + { + this.eventListener.Dispose(); + } + // Ensure worker thread properly finishes. // Or it might have created another MemoryMappedFile in that thread // after the CloseLogFile() below is called. this.CloseLogFile(); + + // Dispose ThreadLocal variables after the file handles are disposed. this.viewStream.Dispose(); this.memoryMappedFileCache.Dispose(); } diff --git a/src/OpenTelemetry/Internal/SelfDiagnosticsEventListener.cs b/src/OpenTelemetry/Internal/SelfDiagnosticsEventListener.cs index e542b17ed..923e781a8 100644 --- a/src/OpenTelemetry/Internal/SelfDiagnosticsEventListener.cs +++ b/src/OpenTelemetry/Internal/SelfDiagnosticsEventListener.cs @@ -67,6 +67,7 @@ namespace OpenTelemetry.Internal public override void Dispose() { this.Dispose(true); + base.Dispose(); GC.SuppressFinalize(this); } @@ -85,6 +86,11 @@ namespace OpenTelemetry.Internal /// The position of the buffer after the last byte of the resulting sequence. internal static int EncodeInBuffer(string str, bool isParameter, byte[] buffer, int position) { + if (string.IsNullOrEmpty(str)) + { + return position; + } + int charCount = str.Length; int ellipses = isParameter ? "{...}\n".Length : "...\n".Length; @@ -338,9 +344,6 @@ namespace OpenTelemetry.Internal } this.disposedValue = true; - - // Should call base.Dispose(disposing) here, but EventListener doesn't have Dispose(bool). - base.Dispose(); } } } diff --git a/test/OpenTelemetry.Tests/Internal/SelfDiagnosticsConfigParserTest.cs b/test/OpenTelemetry.Tests/Internal/SelfDiagnosticsConfigParserTest.cs index 0380d7afb..8bac38531 100644 --- a/test/OpenTelemetry.Tests/Internal/SelfDiagnosticsConfigParserTest.cs +++ b/test/OpenTelemetry.Tests/Internal/SelfDiagnosticsConfigParserTest.cs @@ -21,7 +21,6 @@ namespace OpenTelemetry.Internal.Tests public class SelfDiagnosticsConfigParserTest { [Fact] - [Trait("Platform", "Any")] public void SelfDiagnosticsConfigParser_TryParseFilePath_Success() { string configJson = "{ \t \n " @@ -33,7 +32,6 @@ namespace OpenTelemetry.Internal.Tests } [Fact] - [Trait("Platform", "Any")] public void SelfDiagnosticsConfigParser_TryParseFilePath_MissingField() { string configJson = @"{ @@ -44,7 +42,6 @@ namespace OpenTelemetry.Internal.Tests } [Fact] - [Trait("Platform", "Any")] public void SelfDiagnosticsConfigParser_TryParseFileSize() { string configJson = @"{ @@ -56,7 +53,6 @@ namespace OpenTelemetry.Internal.Tests } [Fact] - [Trait("Platform", "Any")] public void SelfDiagnosticsConfigParser_TryParseFileSize_CaseInsensitive() { string configJson = @"{ @@ -69,7 +65,6 @@ namespace OpenTelemetry.Internal.Tests } [Fact] - [Trait("Platform", "Any")] public void SelfDiagnosticsConfigParser_TryParseFileSize_MissingField() { string configJson = @"{ @@ -80,7 +75,6 @@ namespace OpenTelemetry.Internal.Tests } [Fact] - [Trait("Platform", "Any")] public void SelfDiagnosticsConfigParser_TryParseLogLevel() { string configJson = @"{ diff --git a/test/OpenTelemetry.Tests/Internal/SelfDiagnosticsConfigRefresherTest.cs b/test/OpenTelemetry.Tests/Internal/SelfDiagnosticsConfigRefresherTest.cs index 3bb76500f..380756ad7 100644 --- a/test/OpenTelemetry.Tests/Internal/SelfDiagnosticsConfigRefresherTest.cs +++ b/test/OpenTelemetry.Tests/Internal/SelfDiagnosticsConfigRefresherTest.cs @@ -36,7 +36,6 @@ namespace OpenTelemetry.Internal.Tests } [Fact] - [Trait("Platform", "Any")] public void SelfDiagnosticsConfigRefresher_OmitAsConfigured() { try @@ -63,7 +62,6 @@ namespace OpenTelemetry.Internal.Tests } [Fact] - [Trait("Platform", "Any")] public void SelfDiagnosticsConfigRefresher_CaptureAsConfigured() { try diff --git a/test/OpenTelemetry.Tests/Internal/SelfDiagnosticsEventListenerTest.cs b/test/OpenTelemetry.Tests/Internal/SelfDiagnosticsEventListenerTest.cs index 3d1b2b98f..0c0d96cfa 100644 --- a/test/OpenTelemetry.Tests/Internal/SelfDiagnosticsEventListenerTest.cs +++ b/test/OpenTelemetry.Tests/Internal/SelfDiagnosticsEventListenerTest.cs @@ -31,7 +31,6 @@ namespace OpenTelemetry.Internal.Tests private const string EllipsesWithBrackets = "{...}\n"; [Fact] - [Trait("Platform", "Any")] public void SelfDiagnosticsEventListener_constructor_Invalid_Input() { // no configRefresher object @@ -42,7 +41,6 @@ namespace OpenTelemetry.Internal.Tests } [Fact] - [Trait("Platform", "Any")] public void SelfDiagnosticsEventListener_EventSourceSetup_LowerSeverity() { var configRefresherMock = new Mock(); @@ -54,7 +52,6 @@ namespace OpenTelemetry.Internal.Tests } [Fact] - [Trait("Platform", "Any")] public void SelfDiagnosticsEventListener_EventSourceSetup_HigherSeverity() { var configRefresherMock = new Mock(); @@ -68,7 +65,6 @@ namespace OpenTelemetry.Internal.Tests } [Fact] - [Trait("Platform", "Any")] public void SelfDiagnosticsEventListener_WriteEvent() { // Arrange @@ -94,7 +90,6 @@ namespace OpenTelemetry.Internal.Tests } [Fact] - [Trait("Platform", "Any")] public void SelfDiagnosticsEventListener_DateTimeGetBytes() { var configRefresherMock = new Mock(); @@ -133,7 +128,6 @@ namespace OpenTelemetry.Internal.Tests } [Fact] - [Trait("Platform", "Any")] public void SelfDiagnosticsEventListener_EmitEvent_OmitAsConfigured() { // Arrange @@ -159,7 +153,6 @@ namespace OpenTelemetry.Internal.Tests } [Fact] - [Trait("Platform", "Any")] public void SelfDiagnosticsEventListener_EmitEvent_CaptureAsConfigured() { // Arrange @@ -183,7 +176,15 @@ namespace OpenTelemetry.Internal.Tests } [Fact] - [Trait("Platform", "Any")] + public void SelfDiagnosticsEventListener_EncodeInBuffer_Null() + { + byte[] buffer = new byte[20]; + int startPos = 0; + int endPos = SelfDiagnosticsEventListener.EncodeInBuffer(null, false, buffer, startPos); + Assert.Equal(startPos, endPos); + } + + [Fact] public void SelfDiagnosticsEventListener_EncodeInBuffer_Empty() { byte[] buffer = new byte[20]; @@ -194,7 +195,6 @@ namespace OpenTelemetry.Internal.Tests } [Fact] - [Trait("Platform", "Any")] public void SelfDiagnosticsEventListener_EncodeInBuffer_EnoughSpace() { byte[] buffer = new byte[20]; @@ -208,7 +208,6 @@ namespace OpenTelemetry.Internal.Tests } [Fact] - [Trait("Platform", "Any")] public void SelfDiagnosticsEventListener_EncodeInBuffer_NotEnoughSpaceForFullString() { byte[] buffer = new byte[20]; @@ -222,7 +221,6 @@ namespace OpenTelemetry.Internal.Tests } [Fact] - [Trait("Platform", "Any")] public void SelfDiagnosticsEventListener_EncodeInBuffer_NotEvenSpaceForTruncatedString() { byte[] buffer = new byte[20]; @@ -233,7 +231,6 @@ namespace OpenTelemetry.Internal.Tests } [Fact] - [Trait("Platform", "Any")] public void SelfDiagnosticsEventListener_EncodeInBuffer_NotEvenSpaceForTruncationEllipses() { byte[] buffer = new byte[20]; @@ -243,7 +240,6 @@ namespace OpenTelemetry.Internal.Tests } [Fact] - [Trait("Platform", "Any")] public void SelfDiagnosticsEventListener_EncodeInBuffer_IsParameter_EnoughSpace() { byte[] buffer = new byte[20]; @@ -254,7 +250,6 @@ namespace OpenTelemetry.Internal.Tests } [Fact] - [Trait("Platform", "Any")] public void SelfDiagnosticsEventListener_EncodeInBuffer_IsParameter_NotEnoughSpaceForFullString() { byte[] buffer = new byte[20]; @@ -265,7 +260,6 @@ namespace OpenTelemetry.Internal.Tests } [Fact] - [Trait("Platform", "Any")] public void SelfDiagnosticsEventListener_EncodeInBuffer_IsParameter_NotEvenSpaceForTruncatedString() { byte[] buffer = new byte[20]; @@ -276,7 +270,6 @@ namespace OpenTelemetry.Internal.Tests } [Fact] - [Trait("Platform", "Any")] public void SelfDiagnosticsEventListener_EncodeInBuffer_IsParameter_NotEvenSpaceForTruncationEllipses() { byte[] buffer = new byte[20];