-
Notifications
You must be signed in to change notification settings - Fork 5.3k
Description
Description
I have an application I'm testing against .NET 9 daily builds. With the latest SDK and package versions I'm seeing System.AccessViolationException : Attempted to read or write protected memory. This is often an indication that other memory is corrupt. errors in my tests when running on GitHub Actions' macOS arm64 runners.
I have 9 applications I'm doing this with, but I'm only observing this issue with one of them.
Reproduction Steps
- Clone martincostello/costellobot@18966b8
- Run
build.ps1on a macOS arm64 machine.
Expected behavior
The tests all pass.
Actual behavior
Lots of test failures with a stack trace similar to the below:
System.AccessViolationException : Attempted to read or write protected memory. This is often an indication that other memory is corrupt.
at System.Net.Http.HttpClient.<SendAsync>g__Core|83_0(HttpRequestMessage request, HttpCompletionOption completionOption, CancellationTokenSource cts, Boolean disposeCts, CancellationTokenSource pendingRequestsCts, CancellationToken originalCancellationToken)
at System.Net.Http.HttpClient.<SendAsync>g__Core|83_0(HttpRequestMessage request, HttpCompletionOption completionOption, CancellationTokenSource cts, Boolean disposeCts, CancellationTokenSource pendingRequestsCts, CancellationToken originalCancellationToken)
at MartinCostello.Costellobot.Infrastructure.IntegrationTests`1.PostWebhookAsync(String event, Object value, String webhookSecret, String delivery) in /_/tests/Costellobot.Tests/Infrastructure/IntegrationTests`1.cs:line 176
at MartinCostello.Costellobot.Handlers.DeploymentStatusHandlerTests.PostWebhookAsync(DeploymentStatusDriver driver, String action) in /_/tests/Costellobot.Tests/Handlers/DeploymentStatusHandlerTests.cs:line 667
at MartinCostello.Costellobot.Handlers.DeploymentStatusHandlerTests.Deployment_Is_Approved_For_Trusted_User_And_Dependency_When_Penultimate_Build_Skipped() in /_/tests/Costellobot.Tests/Handlers/DeploymentStatusHandlerTests.cs:line 128
--- End of stack trace from previous location ---
That corresponds to this code, but it doesn't appear to have been recently changed:
runtime/src/libraries/System.Net.Http/src/System/Net/Http/HttpClient.cs
Lines 520 to 556 in 8f3c687
| async Task<HttpResponseMessage> Core( | |
| HttpRequestMessage request, HttpCompletionOption completionOption, | |
| CancellationTokenSource cts, bool disposeCts, CancellationTokenSource pendingRequestsCts, CancellationToken originalCancellationToken) | |
| { | |
| bool telemetryStarted = StartSend(request); | |
| bool responseContentTelemetryStarted = false; | |
| HttpResponseMessage? response = null; | |
| try | |
| { | |
| // Wait for the send request to complete, getting back the response. | |
| response = await base.SendAsync(request, cts.Token).ConfigureAwait(false); | |
| ThrowForNullResponse(response); | |
| // Buffer the response content if we've been asked to. | |
| if (ShouldBufferResponse(completionOption, request)) | |
| { | |
| if (HttpTelemetry.Log.IsEnabled() && telemetryStarted) | |
| { | |
| HttpTelemetry.Log.ResponseContentStart(); | |
| responseContentTelemetryStarted = true; | |
| } | |
| await response.Content.LoadIntoBufferAsync(_maxResponseContentBufferSize, cts.Token).ConfigureAwait(false); | |
| } | |
| return response; | |
| } | |
| catch (Exception e) | |
| { | |
| HandleFailure(e, telemetryStarted, response, cts, originalCancellationToken, pendingRequestsCts); | |
| throw; | |
| } | |
| finally | |
| { | |
| FinishSend(response, cts, disposeCts, telemetryStarted, responseContentTelemetryStarted); | |
| } | |
| } |
Regression?
Yes.
Known Workarounds
None.
Configuration
.NET SDK 9.0.100-preview.4.24265.4
Other information
No response