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 application is successfully compiled and all the tests pass.
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()
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
Yes - the same code works in .NET 7 and .NET 8 preview 6.
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.14to version8.0.100-preview.7.23363.2of 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
AccessViolationExceptionand crashing the test process, or throwingInvalidOperationExceptionand 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
build.ps1Expected behavior
The application is successfully compiled and all the tests pass.
Actual behavior
Either an
AccessViolationExceptionis thrown and the test process crashes:Or an
InvalidOperationExceptionis thrown from some testsand then the HTTP server stops responding:Regression?
Yes - the same code works in .NET 7 and .NET 8 preview 6.
Known Workarounds
Set
DOTNET_JitEnablePhysicalPromotion=0.#88842 (comment)
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.