Skip to content

ArgumentNullException with dynamic and threading on ARM64 #16770

@kdg3737

Description

@kdg3737

Steps to Reproduce

  1. Put the following code in a console app:
        [STAThread]
        static void Main(string[] args)
        {
            System.Threading.ThreadStart ts = () =>
            {
                double sum = 0;
                for (int i = 0; i < 10000; i++)
                {
                    dynamic expo = new System.Dynamic.ExpandoObject();
                    expo.A = sum;
                    sum += expo.A + 37;
                }
            };
            for (int i = 0; i < 50; i++)
            {
                System.Threading.Thread t = new System.Threading.Thread(ts);
                t.Start();
            }
            System.Console.WriteLine("Waiting for it...");

            return;
        }
  1. Run it in a loop on ARM64 with the following script:
#!/bin/bash

for i in `seq 1 10000`;
     MONO_DEBUG=no-compact-seq-points mono --debug YOUREXE.exe
done  

Current Behavior

Crashes randomly with an ArgumentNullException after a couple of minutes

Expected Behavior

doesn't crash

On which platforms did you notice this

[ ] macOS
[x ] Linux
[ ] Windows

Version Used:

master version 6.7

Stacktrace

System.ArgumentNullException: Value cannot be null.
Parameter name: returnLabel
at System.Dynamic.DynamicMetaObjectBinder.Bind (System.Object[] args, System.Collections.ObjectModel.ReadOnlyCollection1[T] parameters, System.Linq.Expressions.LabelTarget returnLabel) [0x001cd] in /persistent/mono/external/corefx/src/System.Linq.Expressions/src/System/Dynamic/DynamicMetaObjectBinder.cs:141 at System.Runtime.CompilerServices.CallSiteBinder.BindCore[T] (System.Runtime.CompilerServices.CallSite1[T] site, System.Object[] args) [0x0001c] in /persistent/mono/external/corefx/src/System.Linq.Expressions/src/System/Runtime/CompilerServices/CallSiteBinder.cs:129
at System.Dynamic.UpdateDelegates.UpdateAndExecute2[T0,T1,TRet] (System.Runtime.CompilerServices.CallSite site, T0 arg0, T1 arg1) [0x00126] in /persistent/mono/external/corefx/src/System.Linq.Expressions/src/System/Dynamic/UpdateDelegates.Generated.cs:263
at (wrapper delegate-invoke) System.Func4[System.Runtime.CompilerServices.CallSite,System.Object,System.Double,System.Object].invoke_TResult_T1_T2_T3(System.Runtime.CompilerServices.CallSite,object,double) at InverterScan.Program+<>c.<Main>b__46_0 () [0x00014] in C:\projects\Iridium\InverterScan\Program.cs:1462 at System.Threading.ThreadHelper.ThreadStart_Context (System.Object state) [0x00017] in /persistent/mono/mcs/class/referencesource/mscorlib/system/threading/thread.cs:74 at System.Threading.ExecutionContext.RunInternal (System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, System.Object state, System.Boolean preserveSyncCtx) [0x0008d] in /persistent/mono/mcs/class/referencesource/mscorlib/system/threading/executioncontext.cs:968 at System.Threading.ExecutionContext.Run (System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, System.Object state, System.Boolean preserveSyncCtx) [0x00000] in /persistent/mono/mcs/class/referencesource/mscorlib/system/threading/executioncontext.cs:910 at System.Threading.ExecutionContext.Run (System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, System.Object state) [0x00031] in /persistent/mono/mcs/class/referencesource/mscorlib/system/threading/executioncontext.cs:899 at System.Threading.ThreadHelper.ThreadStart () [0x0000b] in /persistent/mono/mcs/class/referencesource/mscorlib/system/threading/thread.cs:111 [ERROR] FATAL UNHANDLED EXCEPTION: System.ArgumentNullException: Value cannot be null. Parameter name: returnLabel at System.Dynamic.DynamicMetaObjectBinder.Bind (System.Object[] args, System.Collections.ObjectModel.ReadOnlyCollection1[T] parameters, System.Linq.Expressions.LabelTarget returnLabel) [0x001cd] in /persistent/mono/external/corefx/src/System.Linq.Expressions/src/System/Dynamic/DynamicMetaObjectBinder.cs:141
at System.Runtime.CompilerServices.CallSiteBinder.BindCore[T] (System.Runtime.CompilerServices.CallSite1[T] site, System.Object[] args) [0x0001c] in /persistent/mono/external/corefx/src/System.Linq.Expressions/src/System/Runtime/CompilerServices/CallSiteBinder.cs:129 at System.Dynamic.UpdateDelegates.UpdateAndExecute2[T0,T1,TRet] (System.Runtime.CompilerServices.CallSite site, T0 arg0, T1 arg1) [0x00126] in /persistent/mono/external/corefx/src/System.Linq.Expressions/src/System/Dynamic/UpdateDelegates.Generated.cs:263 at (wrapper delegate-invoke) System.Func4[System.Runtime.CompilerServices.CallSite,System.Object,System.Double,System.Object].invoke_TResult_T1_T2_T3(System.Runtime.CompilerServices.CallSite,object,double)
at InverterScan.Program+<>c.

b__46_0 () [0x00014] in C:\projects\Iridium\InverterScan\Program.cs:1462
at System.Threading.ThreadHelper.ThreadStart_Context (System.Object state) [0x00017] in /persistent/mono/mcs/class/referencesource/mscorlib/system/threading/thread.cs:74
at System.Threading.ExecutionContext.RunInternal (System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, System.Object state, System.Boolean preserveSyncCtx) [0x0008d] in /persistent/mono/mcs/class/referencesource/mscorlib/system/threading/executioncontext.cs:968
at System.Threading.ExecutionContext.Run (System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, System.Object state, System.Boolean preserveSyncCtx) [0x00000] in /persistent/mono/mcs/class/referencesource/mscorlib/system/threading/executioncontext.cs:910
at System.Threading.ExecutionContext.Run (System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, System.Object state) [0x00031] in /persistent/mono/mcs/class/referencesource/mscorlib/system/threading/executioncontext.cs:899
at System.Threading.ThreadHelper.ThreadStart () [0x0000b] in /persistent/mono/mcs/class/referencesource/mscorlib/system/threading/thread.cs:111

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions