Uh oh!
There was an error while loading. Please reload this page.
Expect 100 Continue Hang - #38774
Conversation
5a90ae0 to
9bcbf28Comparewfurt
commented
Jul 7, 2020
test failure seems related |
wfurt
commented
Jul 7, 2020
Why this is different than case without 100Continue? If server does not respond at all, we would also block until timeout fires, right? |
ManickaP
commented
Jul 7, 2020
The hang happens only if we fail to send request content after For customers, the covering the content exception with timeout is making this issue supper hard to troubleshoot. |
9bcbf28 to
05d4cadCompareThere was a problem hiding this comment.
We're adding a decent amount of complication to be able to pass around both sendRequestContent and timerExpired. Could we instead just always call Dispose in this case if SendRequestContentAsync throws? As you said, we're talking about the combination of a faulty request content + Expect: 100-continue. If we get an exception in that case, regardless of the timer, seems like it'd be fine to just get rid of the connection in that case.
05d4cad to
d674782CompareUh oh!
There was an error while loading. Please reload this page.
ghost
commented
Jul 9, 2020
Tagging subscribers to this area: @dotnet/ncl |
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
alnikola
left a comment
There was a problem hiding this comment.
LGTM except for some small issues commented on below.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
cbfb705 to
5826443CompareManickaP
commented
Jul 19, 2020
Failing tests are unrelated. |
| { | ||
| public partial class ThrowingContent : HttpContent | ||
| { | ||
| protected override void SerializeToStream(Stream stream, TransportContext context, CancellationToken cancellationToken) |
There was a problem hiding this comment.
Is this needed?
Shouldn't the default SerializeToStream(stream, context, cancellationToken) end up calling SerializeToStream(stream, context)?
There was a problem hiding this comment.
TL;DR yes
This is the only sync implementation we provide for ThrowingContent. The one in shared code is async and there's now automatic/default sync-over-async in any of our HttpContent classes.
ManickaP
commented
Jul 28, 2020
triggering CI |
Inside sendRequestContentTask recognizes that it's invoked from a timer thread and if request content fails, unblocks SendAsyncCore and eventually propagates the exception from the content to the outside. Fixes the issue for H2 as well. Fixesdotnet#36717
Inside
sendRequestContentTaskrecognizes that it's invoked from a timer thread and if request content fails, unblocksSendAsyncCoreand eventually propagates the exception from the content to the outside.Fixes#36717