runtime: [regression/8.0.0-preview.7.8842] - AndroidMessageHandler - Cannot access a disposed object
Description
When running a http client in a second project inside a solution the connection to the web is broken sporadically in the latest .net8 preview. Each request will run into the same error. Restarting the debug session in the emulator can either solve the issue for the entire time the app runs or will still be borked. After several restarts i’ll work again. In .net7 this worked exactly as intended.
Steps to Reproduce
- Create a sample project
- Add a second project
- add an http client to the second c# project (non-maui)
- call the method from MAUI app with an Android device
- restart several times to provoke this error
Link to public reproduction project repository
No response
Version with bug
8.0.0-preview.7.8842
Is this a regression from previous behavior?
Yes, this used to work in .NET MAUI
Last version that worked well
7.0.92
Affected platforms
Android
Affected platform versions
Android 13
Did you find any workaround?
Restarting the app until it isn’t broken.
Relevant log output
{System.ObjectDisposedException: Cannot access a disposed object.
Object name: 'AndroidMessageHandler'.
at Xamarin.Android.Net.AndroidMessageHandler.AssertSelf() in /Users/runner/work/1/s/xamarin-android/src/Mono.Android/Xamarin.Android.Net/AndroidMessageHandler.cs:line 349
at Xamarin.Android.Net.AndroidMessageHandler.ConfigureKeyStore(KeyStore keyStore) in /Users/runner/work/1/s/xamarin-android/src/Mono.Android/Xamarin.Android.Net/AndroidMessageHandler.cs:line 1016
at Xamarin.Android.Net.AndroidMessageHandler.SetupSSL(HttpsURLConnection httpsConnection, HttpRequestMessage requestMessage) in /Users/runner/work/1/s/xamarin-android/src/Mono.Android/Xamarin.Android.Net/AndroidMessageHandler.cs:line 1172
at Xamarin.Android.Net.AndroidMessageHandler.SetupRequestInternal(HttpRequestMessage request, URLConnection conn) in /Users/runner/work/1/s/xamarin-android/src/Mono.Android/Xamarin.Android.Net/AndroidMessageHandler.cs:line 1088
at Xamarin.Android.Net.AndroidMessageHandler.DoSendAsync(HttpRequestMessage request, CancellationToken cancellationToken) in /Users/runner/work/1/s/xamarin-android/src/Mono.Android/Xamarin.Android.Net/AndroidMessageHandler.cs:line 455
at System.Net.Http.HttpClient.<SendAsync>g__Core|83_0(HttpRequestMessage request, HttpCompletionOption completionOption, CancellationTokenSource cts, Boolean disposeCts, CancellationTokenSource pendingRequestsCts, CancellationToken originalCancellationToken)
at Amazon.Runtime.HttpWebRequestMessage.GetResponseAsync(CancellationToken cancellationToken) in D:\JenkinsWorkspaces\trebuchet-stage-release\AWSDotNetPublic\sdk\src\Core\Amazon.Runtime\Pipeline\HttpHandler\_netstandard\HttpRequestMessageFactory.cs:line 515
at Amazon.Runtime.Internal.HttpHandler`1.<InvokeAsync>d__9`1[[System.Net.Http.HttpContent, System.Net.Http, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a],[Amazon.SQS.Model.SendMessageResponse, AWSSDK.SQS, Version=3.3.0.0, Culture=neutral, PublicKeyToken=885c28607f98e604]].MoveNext() in D:\JenkinsWorkspaces\trebuchet-stage-release\AWSDotNetPublic\sdk\src\Core\Amazon.Runtime\Pipeline\HttpHandler\HttpHandler.cs:line 185
at Amazon.Runtime.Internal.Unmarshaller.<InvokeAsync>d__3`1[[Amazon.SQS.Model.SendMessageResponse, AWSSDK.SQS, Version=3.3.0.0, Culture=neutral, PublicKeyToken=885c28607f98e604]].MoveNext() in D:\JenkinsWorkspaces\trebuchet-stage-release\AWSDotNetPublic\sdk\src\Core\Amazon.Runtime\Pipeline\Handlers\Unmarshaller.cs:line 85
at Amazon.SQS.Internal.ValidationResponseHandler.<InvokeAsync>d__1`1[[Amazon.SQS.Model.SendMessageResponse, AWSSDK.SQS, Version=3.3.0.0, Culture=neutral, PublicKeyToken=885c28607f98e604]].MoveNext() in D:\JenkinsWorkspaces\trebuchet-stage-release\AWSDotNetPublic\sdk\src\Services\SQS\Custom\Internal\ValidationResponseHandler.cs:line 43
at Amazon.Runtime.Internal.ErrorHandler.<InvokeAsync>d__5`1[[Amazon.SQS.Model.SendMessageResponse, AWSSDK.SQS, Version=3.3.0.0, Culture=neutral, PublicKeyToken=885c28607f98e604]].MoveNext() in D:\JenkinsWorkspaces\trebuchet-stage-release\AWSDotNetPublic\sdk\src\Core\Amazon.Runtime\Pipeline\ErrorHandler\ErrorHandler.cs:line 99
at Amazon.Runtime.Internal.ErrorHandler.<InvokeAsync>d__5`1[[Amazon.SQS.Model.SendMessageResponse, AWSSDK.SQS, Version=3.3.0.0, Culture=neutral, PublicKeyToken=885c28607f98e604]].MoveNext() in D:\JenkinsWorkspaces\trebuchet-stage-release\AWSDotNetPublic\sdk\src\Core\Amazon.Runtime\Pipeline\ErrorHandler\ErrorHandler.cs:line 107
at Amazon.Runtime.Internal.CallbackHandler.<InvokeAsync>d__9`1[[Amazon.SQS.Model.SendMessageResponse, AWSSDK.SQS, Version=3.3.0.0, Culture=neutral, PublicKeyToken=885c28607f98e604]].MoveNext() in D:\JenkinsWorkspaces\trebuchet-stage-release\AWSDotNetPublic\sdk\src\Core\Amazon.Runtime\Pipeline\Handlers\CallbackHandler.cs:line 61
at Amazon.Runtime.Internal.Signer.<InvokeAsync>d__1`1[[Amazon.SQS.Model.SendMessageResponse, AWSSDK.SQS, Version=3.3.0.0, Culture=neutral, PublicKeyToken=885c28607f98e604]].MoveNext() in D:\JenkinsWorkspaces\trebuchet-stage-release\AWSDotNetPublic\sdk\src\Core\Amazon.Runtime\Pipeline\Handlers\Signer.cs:line 56
at Amazon.Runtime.Internal.EndpointDiscoveryHandler.<InvokeAsync>d__2`1[[Amazon.SQS.Model.SendMessageResponse, AWSSDK.SQS, Version=3.3.0.0, Culture=neutral, PublicKeyToken=885c28607f98e604]].MoveNext() in D:\JenkinsWorkspaces\trebuchet-stage-release\AWSDotNetPublic\sdk\src\Core\Amazon.Runtime\Pipeline\Handlers\EndpointDiscoveryHandler.cs:line 75
at Amazon.Runtime.Internal.EndpointDiscoveryHandler.<InvokeAsync>d__2`1[[Amazon.SQS.Model.SendMessageResponse, AWSSDK.SQS, Version=3.3.0.0, Culture=neutral, PublicKeyToken=885c28607f98e604]].MoveNext() in D:\JenkinsWorkspaces\trebuchet-stage-release\AWSDotNetPublic\sdk\src\Core\Amazon.Runtime\Pipeline\Handlers\EndpointDiscoveryHandler.cs:line 85
at Amazon.Runtime.Internal.CredentialsRetriever.<InvokeAsync>d__7`1[[Amazon.SQS.Model.SendMessageResponse, AWSSDK.SQS, Version=3.3.0.0, Culture=neutral, PublicKeyToken=885c28607f98e604]].MoveNext() in D:\JenkinsWorkspaces\trebuchet-stage-release\AWSDotNetPublic\sdk\src\Core\Amazon.Runtime\Pipeline\Handlers\CredentialsRetriever.cs:line 98
at Amazon.Runtime.Internal.RetryHandler.<InvokeAsync>d__10`1[[Amazon.SQS.Model.SendMessageResponse, AWSSDK.SQS, Version=3.3.0.0, Culture=neutral, PublicKeyToken=885c28607f98e604]].MoveNext() in D:\JenkinsWorkspaces\trebuchet-stage-release\AWSDotNetPublic\sdk\src\Core\Amazon.Runtime\Pipeline\RetryHandler\RetryHandler.cs:line 131
at Amazon.Runtime.Internal.RetryHandler.<InvokeAsync>d__10`1[[Amazon.SQS.Model.SendMessageResponse, AWSSDK.SQS, Version=3.3.0.0, Culture=neutral, PublicKeyToken=885c28607f98e604]].MoveNext() in D:\JenkinsWorkspaces\trebuchet-stage-release\AWSDotNetPublic\sdk\src\Core\Amazon.Runtime\Pipeline\RetryHandler\RetryHandler.cs:line 146
at Amazon.Runtime.Internal.CallbackHandler.<InvokeAsync>d__9`1[[Amazon.SQS.Model.SendMessageResponse, AWSSDK.SQS, Version=3.3.0.0, Culture=neutral, PublicKeyToken=885c28607f98e604]].MoveNext() in D:\JenkinsWorkspaces\trebuchet-stage-release\AWSDotNetPublic\sdk\src\Core\Amazon.Runtime\Pipeline\Handlers\CallbackHandler.cs:line 61
at Amazon.Runtime.Internal.CallbackHandler.<InvokeAsync>d__9`1[[Amazon.SQS.Model.SendMessageResponse, AWSSDK.SQS, Version=3.3.0.0, Culture=neutral, PublicKeyToken=885c28607f98e604]].MoveNext() in D:\JenkinsWorkspaces\trebuchet-stage-release\AWSDotNetPublic\sdk\src\Core\Amazon.Runtime\Pipeline\Handlers\CallbackHandler.cs:line 61
at Amazon.Runtime.Internal.ErrorCallbackHandler.<InvokeAsync>d__5`1[[Amazon.SQS.Model.SendMessageResponse, AWSSDK.SQS, Version=3.3.0.0, Culture=neutral, PublicKeyToken=885c28607f98e604]].MoveNext() in D:\JenkinsWorkspaces\trebuchet-stage-release\AWSDotNetPublic\sdk\src\Core\Amazon.Runtime\Pipeline\Handlers\ErrorCallbackHandler.cs:line 58
at Amazon.Runtime.Internal.MetricsHandler.<InvokeAsync>d__1`1[[Amazon.SQS.Model.SendMessageResponse, AWSSDK.SQS, Version=3.3.0.0, Culture=neutral, PublicKeyToken=885c28607f98e604]].MoveNext() in D:\JenkinsWorkspaces\trebuchet-stage-release\AWSDotNetPublic\sdk\src\Core\Amazon.Runtime\Pipeline\Handlers\MetricsHandler.cs:line 65
at app.Shared.appClient.<SendAsync>d__54`1[[app.Shared.GetAllRes`1[[app.Shared.OrganisationalDto, app.Shared, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]], app.Shared, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]].MoveNext() in E:\sources\app\appShared\appClient.cs:line 819}
About this issue
- Original URL
- State: closed
- Created 10 months ago
- Reactions: 1
- Comments: 30 (22 by maintainers)
Commits related to this issue
- [android][ios] Fix dispose problem with NativeHttpHandlers https://github.com/dotnet/runtime/pull/90298 made sure the MetricsHandler was the top level handler for all NativeHttpHandler requests simil... — committed to steveisok/runtime by deleted user 9 months ago
- [android][ios] Fix dispose problem with NativeHttpHandlers (#93262) https://github.com/dotnet/runtime/pull/90298 made sure the MetricsHandler was the top level handler for all NativeHttpHandler reque... — committed to dotnet/runtime by steveisok 9 months ago
- [android][ios] Fix dispose problem with NativeHttpHandlers (#93262) https://github.com/dotnet/runtime/pull/90298 made sure the MetricsHandler was the top level handler for all NativeHttpHandler reque... — committed to steveisok/runtime by steveisok 9 months ago
- [android][ios] Fix dispose problem with NativeHttpHandlers (#93262) (#93291) https://github.com/dotnet/runtime/pull/90298 made sure the MetricsHandler was the top level handler for all NativeHttpHand... — committed to dotnet/runtime by steveisok 9 months ago
The fix is lined up to be in GA.
Yes, this is expected. The fix applied to GA and will be available soon.
@UkeHa Here is the repo. AndroidMessageHandler
Also,
On a side note, If you reference .net7, you won’t get any error.
This increasingly looks like “not a MAUI bug”.