-
Couldn't load subscription status.
- Fork 5.2k
Closed
Labels
area-System.Diagnostics.Tracingin-prThere is an active PR which will close this issue when it is mergedThere is an active PR which will close this issue when it is merged
Milestone
Description
Description
When there are multiple EventListeners in the same application, disposing one of them during application shutdown causes a crash. It affects at least .NET 6/7/8. Reproduced on Windows and Linux.
Reproduction Steps
Minimal repro:
public class MyEventListener : EventListener
{
public MyEventListener()
{
EventSourceCreated += (_, e) => EnableEventSource(e.EventSource);
}
private void EnableEventSource(EventSource eventSource)
{
EnableEvents(eventSource, EventLevel.Informational, EventKeywords.All);
}
}
internal class Program
{
static EventListener listener1;
static EventListener listener2;
static async Task Main(string[] args)
{
listener1 = new MyEventListener();
listener2 = new MyEventListener();
AppDomain.CurrentDomain.ProcessExit += (_, _) => listener1.Dispose();
}
}Expected behavior
The app exits normally.
Actual behavior
The app crashes when exiting:
Fatal error. Internal CLR error. (0x80131506)
at System.Diagnostics.Tracing.EventPipeInternal.Enable(System.String, System.Diagnostics.Tracing.EventPipeSerializationFormat, UInt32, System.Diagnostics.Tracing.EventPipeProviderConfiguration[])
at System.Diagnostics.Tracing.EventPipeEventDispatcher.CommitDispatchConfiguration()
at System.Diagnostics.Tracing.EventPipeEventDispatcher.SendCommand(System.Diagnostics.Tracing.EventListener, System.Diagnostics.Tracing.EventCommand, Boolean, System.Diagnostics.Tracing.EventLevel, System.Diagnostics.Tracing.EventKeywords)
at System.Diagnostics.Tracing.EventListener.DisableEvents(System.Diagnostics.Tracing.EventSource)
at System.Diagnostics.Tracing.EventListener.CallDisableEventsIfNecessary(System.Diagnostics.Tracing.EventDispatcher, System.Diagnostics.Tracing.EventSource)
at System.Diagnostics.Tracing.EventListener.RemoveReferencesToListenerInEventSources(System.Diagnostics.Tracing.EventListener)
at System.Diagnostics.Tracing.EventListener.Dispose()
at SimpleApp.Program+<>c.<Main>b__2_0(System.Object, System.EventArgs)
Regression?
No response
Known Workarounds
No response
Configuration
No response
Other information
No response
Metadata
Metadata
Assignees
Labels
area-System.Diagnostics.Tracingin-prThere is an active PR which will close this issue when it is mergedThere is an active PR which will close this issue when it is merged