Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[6.0/8.0] Assertion failed in WinHttpRequestCallback while Sending Request #104891

Open
liveans opened this issue Jul 15, 2024 · 0 comments
Open

Comments

@liveans
Copy link
Member

liveans commented Jul 15, 2024

Description

There is unnecessary Debug assertion in OnRequestSendingRequest: state.HandleRequest is not null.
In HTTP/2, this callback can be called multiple times and request can be already gone.

Same issue for main: #93099
and this is fixed for main(9.0) in: #93984

Log:

Process terminated. Assertion failed.
OnRequestSendingRequest: state.RequestHandle is null
   at System.Net.Http.WinHttpRequestCallback.OnRequestSendingRequest(WinHttpRequestState state) in /_/src/libraries/System.Net.Http.WinHttpHandler/src/System/Net/Http/WinHttpRequestCallback.cs:line 234
   at System.Net.Http.WinHttpRequestCallback.RequestCallback(WinHttpRequestState state, UInt32 internetStatus, IntPtr statusInformation, UInt32 statusInformationLength) in /_/src/libraries/System.Net.Http.WinHttpHandler/src/System/Net/Http/WinHttpRequestCallback.cs:line 91
   at System.Net.Http.WinHttpRequestCallback.WinHttpCallback(IntPtr handle, IntPtr context, UInt32 internetStatus, IntPtr statusInformation, UInt32 statusInformationLength) in /_/src/libraries/System.Net.Http.WinHttpHandler/src/System/Net/Http/WinHttpRequestCallback.cs:line 46
   at Interop.WinHttp.<WinHttpWriteData>g____PInvoke|201_0(IntPtr __requestHandle_native, IntPtr __buffer_native, UInt32 __bufferSize_native, IntPtr __parameterIgnoredAndShouldBeNullForAsync_native)
   at Interop.WinHttp.<WinHttpWriteData>g____PInvoke|201_0(IntPtr __requestHandle_native, IntPtr __buffer_native, UInt32 __bufferSize_native, IntPtr __parameterIgnoredAndShouldBeNullForAsync_native)
   at Interop.WinHttp.WinHttpWriteData(SafeWinHttpHandle requestHandle, IntPtr buffer, UInt32 bufferSize, IntPtr parameterIgnoredAndShouldBeNullForAsync) in /_/src/libraries/System.Net.Http.WinHttpHandler/src/Microsoft.Interop.LibraryImportGenerator/Microsoft.Interop.LibraryImportGenerator/LibraryImports.g.cs:line 856
   at System.Net.Http.WinHttpRequestStream.InternalWriteDataAsync(Byte[] buffer, Int32 offset, Int32 count, CancellationToken token) in /_/src/libraries/System.Net.Http.WinHttpHandler/src/System/Net/Http/WinHttpRequestStream.cs:line 233
   at System.Net.Http.WinHttpRequestStream.InternalWriteAsync(Byte[] buffer, Int32 offset, Int32 count, CancellationToken token) in /_/src/libraries/System.Net.Http.WinHttpHandler/src/System/Net/Http/WinHttpRequestStream.cs:line 202
   at System.Net.Http.WinHttpRequestStream.WriteAsync(Byte[] buffer, Int32 offset, Int32 count, CancellationToken token) in /_/src/libraries/System.Net.Http.WinHttpHandler/src/System/Net/Http/WinHttpRequestStream.cs:line 135
   at System.IO.Stream.WriteAsync(ReadOnlyMemory`1 buffer, CancellationToken cancellationToken) in /_/src/libraries/System.Private.CoreLib/src/System/IO/Stream.cs:line 744
   at System.Net.Http.WinHttpHandlerFunctional.Tests.BidirectionStreamingTest.<>c__DisplayClass12_1.<<AfterReadResponseServerError_ClientWrite>b__1>d.MoveNext() in /_/src/libraries/System.Net.Http.WinHttpHandler/tests/FunctionalTests/BidirectionStreamingTest.cs:line 152
   at System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[TStateMachine](TStateMachine& stateMachine) in /_/src/libraries/System.Private.CoreLib/src/System/Runtime/CompilerServices/AsyncMethodBuilderCore.cs:line 38
   at System.Net.Http.WinHttpHandlerFunctional.Tests.BidirectionStreamingTest.<>c__DisplayClass12_1.<AfterReadResponseServerError_ClientWrite>b__1()
   at Xunit.Assert.RecordExceptionAsync(Func`1 testCode) in /_/src/xunit.assert/Asserts/Record.cs:line 104
   at System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[TStateMachine](TStateMachine& stateMachine) in /_/src/libraries/System.Private.CoreLib/src/System/Runtime/CompilerServices/AsyncMethodBuilderCore.cs:line 38
   at Xunit.Assert.ThrowsAsync[T](Func`1 testCode) in /_/src/xunit.assert/Asserts/ExceptionAsserts.cs:line 73
   at System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[TStateMachine](TStateMachine& stateMachine) in /_/src/libraries/System.Private.CoreLib/src/System/Runtime/CompilerServices/AsyncMethodBuilderCore.cs:line 23
   at Xunit.Assert.ThrowsAsync[T](Func`1 testCode)
   at System.Net.Http.WinHttpHandlerFunctional.Tests.BidirectionStreamingTest.AfterReadResponseServerError_ClientWrite() in /_/src/libraries/System.Net.Http.WinHttpHandler/tests/FunctionalTests/BidirectionStreamingTest.cs:line 148
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state) in /_/src/libraries/System.Private.CoreLib/src/System/Threading/ExecutionContext.cs:line 179
   at System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1.AsyncStateMachineBox`1.MoveNext(Thread threadPoolThread) in /_/src/libraries/System.Private.CoreLib/src/System/Runtime/CompilerServices/AsyncTaskMethodBuilderT.cs:line 352
   at Xunit.Sdk.MaxConcurrencySyncContext.RunOnSyncContext(SendOrPostCallback callback, Object state) in /_/src/xunit.execution/Sdk/MaxConcurrencySyncContext.cs:line 106
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state) in /_/src/libraries/System.Private.CoreLib/src/System/Threading/ExecutionContext.cs:line 179
   at Xunit.Sdk.MaxConcurrencySyncContext.WorkerThreadProc() in /_/src/xunit.execution/Sdk/MaxConcurrencySyncContext.cs:line 96
   at Xunit.Sdk.XunitWorkerThread.<>c.<QueueUserWorkItem>b__5_0(Object _) in /_/src/common/XunitWorkerThread.cs:line 37
   at System.Threading.Tasks.Task.InnerInvoke() in /_/src/libraries/System.Private.CoreLib/src/System/Threading/Tasks/Task.cs:line 2405
   at System.Threading.Tasks.Task.<>c.<.cctor>b__281_0(Object obj) in /_/src/libraries/System.Private.CoreLib/src/System/Threading/Tasks/Task.cs:line 2387
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state) in /_/src/libraries/System.Private.CoreLib/src/System/Threading/ExecutionContext.cs:line 179
   at System.Threading.Tasks.Task.ExecuteWithThreadLocal(Task& currentTaskSlot, Thread threadPoolThread) in /_/src/libraries/System.Private.CoreLib/src/System/Threading/Tasks/Task.cs:line 2345
   at System.Threading.Tasks.Task.ExecuteEntryUnsafe(Thread threadPoolThread) in /_/src/libraries/System.Private.CoreLib/src/System/Threading/Tasks/Task.cs:line 2283
   at System.Threading.Tasks.ThreadPoolTaskScheduler.<>c.<.cctor>b__10_0(Object s) in /_/src/libraries/System.Private.CoreLib/src/System/Threading/Tasks/ThreadPoolTaskScheduler.cs:line 35
   at System.Threading.Thread.StartCallback() in /_/src/coreclr/System.Private.CoreLib/src/System/Threading/Thread.CoreCLR.cs:line 105

Reproduction Steps

1-) Enable tests in runtime\src\libraries\System.Net.Http.WinHttpHandler\tests\FunctionalTests\BidirectionStreamingTest.cs for Windows Server 2022 in release/6.0-staging or release/8.0-staging branch
2-) Compile libraries for Debug configuration
3-) Run BidirectionStreamingTests

Expected behavior

Assertion should not be there, because requestHandle can be null, in some cases.

Actual behavior

Assertion is there and failing for certain cases.

Regression?

No, it was there all the time.

Known Workarounds

No response

Configuration

This is happening when you compile libraries with Debug configuration in release 8.0 6.0 branches.

Other information

No response

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant