From 56e7d9b2e93f2869a553f75635e961b254c3f662 Mon Sep 17 00:00:00 2001 From: Miha Zupan Date: Fri, 23 Jul 2021 18:06:17 +0200 Subject: [PATCH] Honor ThrowOnEventWriteErrors for exceptions thrown by EventListeners --- .../TestsWriteEventToListener.cs | 44 +++++++++++++++++++ .../CustomEventSources/EventSourceTest.cs | 5 ++- .../System/Diagnostics/Tracing/EventSource.cs | 2 +- 3 files changed, 48 insertions(+), 3 deletions(-) diff --git a/src/libraries/System.Diagnostics.Tracing/tests/BasicEventSourceTest/TestsWriteEventToListener.cs b/src/libraries/System.Diagnostics.Tracing/tests/BasicEventSourceTest/TestsWriteEventToListener.cs index a35237468cf297..d7c7046ab693ed 100644 --- a/src/libraries/System.Diagnostics.Tracing/tests/BasicEventSourceTest/TestsWriteEventToListener.cs +++ b/src/libraries/System.Diagnostics.Tracing/tests/BasicEventSourceTest/TestsWriteEventToListener.cs @@ -448,5 +448,49 @@ public void Test_EventSourceCreatedEvents_AfterListener() TestUtilities.CheckNoEventSourcesRunning("Stop"); } + + [Theory] + [InlineData(true)] + [InlineData(false)] + public void Test_EventListenerThrows_ExceptionIsNotRethrownToCaller(bool setThrowOnEventWriteErrorsFlag) + { + TestUtilities.CheckNoEventSourcesRunning("Start"); + + using (var log = new EventSourceTest(throwOnEventWriteErrors: setThrowOnEventWriteErrorsFlag)) + { + using (var listener = new EventListenerListener()) + { + listener.EventSourceSynchronousEnable(log); + + var thrownException = new Exception("Oops"); + string outOfBandMessage = null; + + listener.EventWritten += (_, e) => + { + if (e.EventId == 0) + { + outOfBandMessage = e.Message; + } + + throw thrownException; + }; + + try + { + log.Event0(); + Assert.False(setThrowOnEventWriteErrorsFlag); + } + catch (EventSourceException ex) + { + Assert.True(setThrowOnEventWriteErrorsFlag); + Assert.Same(thrownException, ex.InnerException); + } + + Assert.Contains(thrownException.Message, outOfBandMessage); + } + } + + TestUtilities.CheckNoEventSourcesRunning("Stop"); + } } } diff --git a/src/libraries/System.Diagnostics.Tracing/tests/CustomEventSources/EventSourceTest.cs b/src/libraries/System.Diagnostics.Tracing/tests/CustomEventSources/EventSourceTest.cs index 5cbd28b2a13328..7a6734e33ca3de 100644 --- a/src/libraries/System.Diagnostics.Tracing/tests/CustomEventSources/EventSourceTest.cs +++ b/src/libraries/System.Diagnostics.Tracing/tests/CustomEventSources/EventSourceTest.cs @@ -26,8 +26,9 @@ namespace SdtEventSources [EventSource(Guid = "69e2aa3e-083b-5014-cad4-3e511a0b94cf", Name = "EventSourceTest")] public sealed class EventSourceTest : EventSource { - public EventSourceTest(bool useSelfDescribingEvents = false) - : base(true) + public EventSourceTest(bool useSelfDescribingEvents = false, bool throwOnEventWriteErrors = false) + : base((useSelfDescribingEvents ? EventSourceSettings.EtwSelfDescribingEventFormat : EventSourceSettings.EtwManifestEventFormat) + | (throwOnEventWriteErrors ? EventSourceSettings.ThrowOnEventWriteErrors : 0)) { } protected override void OnEventCommand(EventCommandEventArgs command) diff --git a/src/libraries/System.Private.CoreLib/src/System/Diagnostics/Tracing/EventSource.cs b/src/libraries/System.Private.CoreLib/src/System/Diagnostics/Tracing/EventSource.cs index 4800a2cde47365..0da576e2ec85e2 100644 --- a/src/libraries/System.Private.CoreLib/src/System/Diagnostics/Tracing/EventSource.cs +++ b/src/libraries/System.Private.CoreLib/src/System/Diagnostics/Tracing/EventSource.cs @@ -2121,7 +2121,7 @@ internal unsafe void DispatchToAllListeners(EventWrittenEventArgs eventCallbackA } } - if (lastThrownException != null) + if (lastThrownException != null && ThrowOnEventWriteErrors) { throw new EventSourceException(lastThrownException); }