Description
Description
To check some fresh changes in the aspnetcore repo for Request Delegate Generator with interceptors, @captainsafia asked me to do some tests with the preview 7 nightlies.
In the course of that testing I updated a codebase that is working correctly .NET 7 and with 8.0.100-preview.6.23330.14
to version 8.0.100-preview.7.23363.2
of the SDK.
When pushing the changes to GitHub Actions CI, there's some weird failures happening only Linux. There's some code that's alternating between either failing with an AccessViolationException
and crashing the test process, or throwing InvalidOperationException
and making the HTTP server "go a bit weird".
The code for the method where the exceptions are coming from can be found here (don't judge it too harshly 😄).
Reproduction Steps
- Clone martincostello/adventofcode@51f7c63 on Linux
- Run
build.ps1
Expected behavior
The application is successfully compiled and all the tests pass.
Actual behavior
Either an AccessViolationException
is thrown and the test process crashes:
The active test run was aborted. Reason: Test host process crashed : Fatal error. System.AccessViolationException: Attempted to read or write protected memory. This is often an indication that other memory is corrupt.
at MartinCostello.AdventOfCode.Puzzles.Y2021.Day22.<Reboot>g__Reboot|8_1(System.Collections.Generic.List`1<System.ValueTuple`2<Cuboid,Boolean>>)
at MartinCostello.AdventOfCode.Puzzles.Y2021.Day22.Reboot(System.Collections.Generic.IList`1<System.String>, Boolean)
at MartinCostello.AdventOfCode.Puzzles.Y2021.Day22+<SolveCoreAsync>d__9.MoveNext()
at System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[[MartinCostello.AdventOfCode.Puzzles.Y2021.Day22+<SolveCoreAsync>d__9, AdventOfCode, Version=8.0.0.0, Culture=neutral, PublicKeyToken=9a192a7522c9e1a0]](<SolveCoreAsync>d__9 ByRef)
at System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1[[System.__Canon, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].Start[[MartinCostello.AdventOfCode.Puzzles.Y2021.Day22+<SolveCoreAsync>d__9, AdventOfCode, Version=8.0.0.0, Culture=neutral, PublicKeyToken=9a192a7522c9e1a0]](<SolveCoreAsync>d__9 ByRef)
at MartinCostello.AdventOfCode.Puzzles.Y2021.Day22.SolveCoreAsync(System.String[], System.Threading.CancellationToken)
at MartinCostello.AdventOfCode.Puzzle+<SolveAsync>d__18.MoveNext()
at System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[[MartinCostello.AdventOfCode.Puzzle+<SolveAsync>d__18, AdventOfCode, Version=8.0.0.0, Culture=neutral, PublicKeyToken=9a192a7522c9e1a0]](<SolveAsync>d__18 ByRef)
at MartinCostello.AdventOfCode.Puzzles.PuzzleTest+<SolvePuzzleAsync>d__8`1[[System.__Canon, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].MoveNext()
at System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[[MartinCostello.AdventOfCode.Puzzles.PuzzleTest+<SolvePuzzleAsync>d__8`1[[System.__Canon, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]], AdventOfCode.Tests, Version=8.0.0.0, Culture=neutral, PublicKeyToken=9a192a7522c9e1a0]](<SolvePuzzleAsync>d__8`1<System.__Canon> ByRef)
at MartinCostello.AdventOfCode.Puzzles.PuzzleTest.SolvePuzzleAsync[[System.__Canon, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]](System.String[])
at MartinCostello.AdventOfCode.Puzzles.PuzzleTest+<SolvePuzzleAsync>d__7`1[[System.__Canon, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].MoveNext()
at System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[[MartinCostello.AdventOfCode.Puzzles.PuzzleTest+<SolvePuzzleAsync>d__7`1[[System.__Canon, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]], AdventOfCode.Tests, Version=8.0.0.0, Culture=neutral, PublicKeyToken=9a192a7522c9e1a0]](<SolvePuzzleAsync>d__7`1<System.__Canon> ByRef)
at MartinCostello.AdventOfCode.Puzzles.PuzzleTest.SolvePuzzleAsync[[System.__Canon, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]]()
at MartinCostello.AdventOfCode.Puzzles.Y2021.Day22Tests+<Y2021_Day22_Solve_Returns_Correct_Solution>d__4.MoveNext()
at System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[[MartinCostello.AdventOfCode.Puzzles.Y2021.Day22Tests+<Y2021_Day22_Solve_Returns_Correct_Solution>d__4, AdventOfCode.Tests, Version=8.0.0.0, Culture=neutral, PublicKeyToken=9a192a7522c9e1a0]](<Y2021_Day22_Solve_Returns_Correct_Solution>d__4 ByRef)
at System.Runtime.CompilerServices.AsyncTaskMethodBuilder.Start[[MartinCostello.AdventOfCode.Puzzles.Y2021.Day22Tests+<Y2021_Day22_Solve_Returns_Correct_Solution>d__4, AdventOfCode.Tests, Version=8.0.0.0, Culture=neutral, PublicKeyToken=9a192a7522c9e1a0]](<Y2021_Day22_Solve_Returns_Correct_Solution>d__4 ByRef)
at MartinCostello.AdventOfCode.Puzzles.Y2021.Day22Tests.Y2021_Day22_Solve_Returns_Correct_Solution()
at System.RuntimeMethodHandle.InvokeMethod(System.Object, Void**, System.Signature, Boolean)
at System.Reflection.MethodInvoker.Invoke(System.Object, IntPtr*, System.Reflection.BindingFlags)
at System.Reflection.RuntimeMethodInfo.Invoke(System.Object, System.Reflection.BindingFlags, System.Reflection.Binder, System.Object[], System.Globalization.CultureInfo)
at Xunit.Sdk.TestInvoker`1+<>c__DisplayClass48_0+<<InvokeTestMethodAsync>b__1>d[[System.__Canon, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].MoveNext()
at System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[[Xunit.Sdk.TestInvoker`1+<>c__DisplayClass48_0+<<InvokeTestMethodAsync>b__1>d[[System.__Canon, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]], xunit.execution.dotnet, Version=2.5.0.0, Culture=neutral, PublicKeyToken=8d05b1bb7a6fdb6c]](<<InvokeTestMethodAsync>b__1>d<System.__Canon> ByRef)
at Xunit.Sdk.TestInvoker`1+<>c__DisplayClass48_0[[System.__Canon, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].<InvokeTestMethodAsync>b__1()
at Xunit.Sdk.ExecutionTimer+<AggregateAsync>d__4.MoveNext()
at System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[[Xunit.Sdk.ExecutionTimer+<AggregateAsync>d__4, xunit.execution.dotnet, Version=2.5.0.0, Culture=neutral, PublicKeyToken=8d05b1bb7a6fdb6c]](<AggregateAsync>d__4 ByRef)
at Xunit.Sdk.ExceptionAggregator+<RunAsync>d__9.MoveNext()
at System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[[Xunit.Sdk.ExceptionAggregator+<RunAsync>d__9, xunit.core, Version=2.5.0.0, Culture=neutral, PublicKeyToken=8d05b1bb7a6fdb6c]](<RunAsync>d__9 ByRef)
at Xunit.Sdk.TestInvoker`1+<InvokeTestMethodAsync>d__48[[System.__Canon, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].MoveNext()
at System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[[Xunit.Sdk.TestInvoker`1+<InvokeTestMethodAsync>d__48[[System.__Canon, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]], xunit.execution.dotnet, Version=2.5.0.0, Culture=neutral, PublicKeyToken=8d05b1bb7a6fdb6c]](<InvokeTestMethodAsync>d__48<System.__Canon> ByRef)
at Xunit.Sdk.TestInvoker`1+<<RunAsync>b__47_0>d[[System.__Canon, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].MoveNext()
at System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[[Xunit.Sdk.TestInvoker`1+<<RunAsync>b__47_0>d[[System.__Canon, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]], xunit.execution.dotnet, Version=2.5.0.0, Culture=neutral, PublicKeyToken=8d05b1bb7a6fdb6c]](<<RunAsync>b__47_0>d<System.__Canon> ByRef)
at Xunit.Sdk.TestInvoker`1[[System.__Canon, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].<RunAsync>b__47_0()
at Xunit.Sdk.ExceptionAggregator+<RunAsync>d__10`1[[System.Decimal, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].MoveNext()
at System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[[Xunit.Sdk.ExceptionAggregator+<RunAsync>d__10`1[[System.Decimal, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]], xunit.core, Version=2.5.0.0, Culture=neutral, PublicKeyToken=8d05b1bb7a6fdb6c]](<RunAsync>d__10`1<System.Decimal> ByRef)
at Xunit.Sdk.XunitTestRunner+<InvokeTestAsync>d__4.MoveNext()
at System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[[Xunit.Sdk.XunitTestRunner+<InvokeTestAsync>d__4, xunit.execution.dotnet, Version=2.5.0.0, Culture=neutral, PublicKeyToken=8d05b1bb7a6fdb6c]](<InvokeTestAsync>d__4 ByRef)
at Xunit.Sdk.ExceptionAggregator+<RunAsync>d__10`1[[System.__Canon, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].MoveNext()
Or an InvalidOperationException
is thrown from some tests and then the HTTP server stops responding:
System.InvalidOperationException: Collection was modified; enumeration operation may not execute.
at MartinCostello.AdventOfCode.Puzzles.Y2021.Day22.<Reboot>g__Reboot|8_1(List`1 cuboids) in /_/src/AdventOfCode/Puzzles/Y2021/Day22.cs:line 74
at MartinCostello.AdventOfCode.Puzzles.Y2021.Day22.Reboot(IList`1 instructions, Boolean initialize) in /_/src/AdventOfCode/Puzzles/Y2021/Day22.cs:line 46
at MartinCostello.AdventOfCode.Puzzles.Y2021.Day22.SolveCoreAsync(String[] args, CancellationToken cancellationToken) in /_/src/AdventOfCode/Puzzles/Y2021/Day22.cs:line 146
at MartinCostello.AdventOfCode.Puzzle.SolveAsync(String[] args, CancellationToken cancellationToken) in /_/src/AdventOfCode/Puzzle.cs:line 57
at MartinCostello.AdventOfCode.Site.PuzzlesApi.SolvePuzzleAsync(Int32 year, Int32 day, HttpRequest request, IFormFile resource, PuzzleFactory factory, ILogger`1 logger, CancellationToken cancellationToken) in /_/src/AdventOfCode.Site/PuzzlesApi.cs:line 117
Regression?
Yes - the same code works in .NET 7 and .NET 8 preview 6.
Known Workarounds
Set DOTNET_JitEnablePhysicalPromotion=0
.
Configuration
.NET SDK 8.0.100-preview.7.23363.2
Other information
No response
Edit: Turns out the "weird server" bits aren't new, I just hadn't spotted them before.