From cc58bb0e73595551d1af71fd139b1783265c04cf Mon Sep 17 00:00:00 2001 From: vsadov <8218165+VSadov@users.noreply.github.com> Date: Fri, 17 Oct 2025 17:43:23 -0700 Subject: [PATCH 1/3] Enable async feature/tests --- src/coreclr/inc/clrconfigvalues.h | 2 +- src/tests/async/Directory.Build.targets | 5 ----- 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/src/coreclr/inc/clrconfigvalues.h b/src/coreclr/inc/clrconfigvalues.h index 3a1b3dc5fbe19c..754b462be0e7d2 100644 --- a/src/coreclr/inc/clrconfigvalues.h +++ b/src/coreclr/inc/clrconfigvalues.h @@ -714,7 +714,7 @@ RETAIL_CONFIG_DWORD_INFO(EXTERNAL_EnableRiscV64Zbb, W("EnableRiscV64 #endif // Runtime-async -RETAIL_CONFIG_DWORD_INFO(UNSUPPORTED_RuntimeAsync, W("RuntimeAsync"), 0, "Enables runtime async method support") +RETAIL_CONFIG_DWORD_INFO(UNSUPPORTED_RuntimeAsync, W("RuntimeAsync"), 1, "Enables runtime async method support") /// /// Uncategorized diff --git a/src/tests/async/Directory.Build.targets b/src/tests/async/Directory.Build.targets index 5a4d413a9e1f62..61a1b2822ed114 100644 --- a/src/tests/async/Directory.Build.targets +++ b/src/tests/async/Directory.Build.targets @@ -4,10 +4,5 @@ true - - - true - - From fe10fa838bf4dca1fc635852bbf750f44c77e006 Mon Sep 17 00:00:00 2001 From: vsadov <8218165+VSadov@users.noreply.github.com> Date: Fri, 7 Nov 2025 14:39:28 -0800 Subject: [PATCH 2/3] Do not hold to the last used Continuation in the runtime async tasks. --- .../CompilerServices/AsyncHelpers.CoreCLR.cs | 22 +++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/src/coreclr/System.Private.CoreLib/src/System/Runtime/CompilerServices/AsyncHelpers.CoreCLR.cs b/src/coreclr/System.Private.CoreLib/src/System/Runtime/CompilerServices/AsyncHelpers.CoreCLR.cs index 19ea178f6bf1f9..d7eead54192d55 100644 --- a/src/coreclr/System.Private.CoreLib/src/System/Runtime/CompilerServices/AsyncHelpers.CoreCLR.cs +++ b/src/coreclr/System.Private.CoreLib/src/System/Runtime/CompilerServices/AsyncHelpers.CoreCLR.cs @@ -238,7 +238,7 @@ private static void TransparentAwait(object o) private interface IRuntimeAsyncTaskOps { static abstract Action GetContinuationAction(T task); - static abstract Continuation GetContinuationState(T task); + static abstract Continuation MoveContinuationState(T task); static abstract void SetContinuationState(T task, Continuation value); static abstract bool SetCompleted(T task); static abstract void PostToSyncContext(T task, SynchronizationContext syncCtx); @@ -297,9 +297,16 @@ void ITaskCompletionAction.Invoke(Task completingTask) private struct Ops : IRuntimeAsyncTaskOps> { public static Action GetContinuationAction(RuntimeAsyncTask task) => (Action)task.m_action!; - public static Continuation GetContinuationState(RuntimeAsyncTask task) => (Continuation)task.m_stateObject!; + public static Continuation MoveContinuationState(RuntimeAsyncTask task) + { + Continuation continuation = (Continuation)task.m_stateObject!; + task.m_stateObject = null; + return continuation; + } + public static void SetContinuationState(RuntimeAsyncTask task, Continuation value) { + Debug.Assert(task.m_stateObject == null); task.m_stateObject = value; } @@ -373,9 +380,16 @@ void ITaskCompletionAction.Invoke(Task completingTask) private struct Ops : IRuntimeAsyncTaskOps { public static Action GetContinuationAction(RuntimeAsyncTask task) => (Action)task.m_action!; - public static Continuation GetContinuationState(RuntimeAsyncTask task) => (Continuation)task.m_stateObject!; + public static Continuation MoveContinuationState(RuntimeAsyncTask task) + { + Continuation continuation = (Continuation)task.m_stateObject!; + task.m_stateObject = null; + return continuation; + } + public static void SetContinuationState(RuntimeAsyncTask task, Continuation value) { + Debug.Assert(task.m_stateObject == null); task.m_stateObject = value; } @@ -429,7 +443,7 @@ public static unsafe void DispatchContinuations(T task) where T : Task, DispatcherInfo dispatcherInfo; dispatcherInfo.Next = t_dispatcherInfo; - dispatcherInfo.NextContinuation = TOps.GetContinuationState(task); + dispatcherInfo.NextContinuation = TOps.MoveContinuationState(task); t_dispatcherInfo = &dispatcherInfo; while (true) From f2bfa918100571a3d9ef420499bb5b7e6205820f Mon Sep 17 00:00:00 2001 From: vsadov <8218165+VSadov@users.noreply.github.com> Date: Sat, 8 Nov 2025 11:49:05 -0800 Subject: [PATCH 3/3] Revert "Enable async feature/tests" This reverts commit cc58bb0e73595551d1af71fd139b1783265c04cf. --- src/coreclr/inc/clrconfigvalues.h | 2 +- src/tests/async/Directory.Build.targets | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/coreclr/inc/clrconfigvalues.h b/src/coreclr/inc/clrconfigvalues.h index 754b462be0e7d2..3a1b3dc5fbe19c 100644 --- a/src/coreclr/inc/clrconfigvalues.h +++ b/src/coreclr/inc/clrconfigvalues.h @@ -714,7 +714,7 @@ RETAIL_CONFIG_DWORD_INFO(EXTERNAL_EnableRiscV64Zbb, W("EnableRiscV64 #endif // Runtime-async -RETAIL_CONFIG_DWORD_INFO(UNSUPPORTED_RuntimeAsync, W("RuntimeAsync"), 1, "Enables runtime async method support") +RETAIL_CONFIG_DWORD_INFO(UNSUPPORTED_RuntimeAsync, W("RuntimeAsync"), 0, "Enables runtime async method support") /// /// Uncategorized diff --git a/src/tests/async/Directory.Build.targets b/src/tests/async/Directory.Build.targets index 61a1b2822ed114..5a4d413a9e1f62 100644 --- a/src/tests/async/Directory.Build.targets +++ b/src/tests/async/Directory.Build.targets @@ -4,5 +4,10 @@ true + + + true + +