From 570ff6060739bf09f0e5805b8a3877dfb58bf509 Mon Sep 17 00:00:00 2001 From: Tom McDonald Date: Tue, 21 Apr 2026 13:53:29 -0400 Subject: [PATCH] Fix AsyncInstrumentation to honor s_asyncDebuggingEnabled set via ICorDebug When the debugger sets Task.s_asyncDebuggingEnabled directly via ICorDebug (SetManagedTaskEtwEventsEnabled), the AsyncInstrumentation flags system added by PR #126091 was not aware of this. The new flags only got set via ETW OnEventCommand, so non-ETW RuntimeAsync configs had s_asyncDebuggerActiveFlags stuck at Disabled, preventing NotifyDebuggerOfRuntimeAsyncState from being called. Fix: In InitializeFlags(), check Task.s_asyncDebuggingEnabled as a fallback when s_asyncDebuggerActiveFlags is still Disabled. This ensures the debugger's request is honored regardless of whether ETW events have been enabled. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../Runtime/CompilerServices/AsyncInstrumentation.cs | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/libraries/System.Private.CoreLib/src/System/Runtime/CompilerServices/AsyncInstrumentation.cs b/src/libraries/System.Private.CoreLib/src/System/Runtime/CompilerServices/AsyncInstrumentation.cs index e04495632eb28b..cab50621bd0ce1 100644 --- a/src/libraries/System.Private.CoreLib/src/System/Runtime/CompilerServices/AsyncInstrumentation.cs +++ b/src/libraries/System.Private.CoreLib/src/System/Runtime/CompilerServices/AsyncInstrumentation.cs @@ -107,6 +107,15 @@ private static Flags InitializeFlags() { if (IsUninitialized(s_activeFlags)) { + // The debugger may have set Task.s_asyncDebuggingEnabled directly via ICorDebug + // before any ETW session is established. In that case, s_asyncDebuggerActiveFlags + // will still be Disabled because OnEventCommand was never called. Honor the + // debugger's request by enabling default flags when s_asyncDebuggingEnabled is set. + if (s_asyncDebuggerActiveFlags == Flags.Disabled && Task.s_asyncDebuggingEnabled) + { + s_asyncDebuggerActiveFlags = DefaultFlags | Flags.AsyncDebugger; + } + s_activeFlags = s_asyncProfilerActiveFlags | s_asyncDebuggerActiveFlags; }