-
Notifications
You must be signed in to change notification settings - Fork 5k
Make HttpWebRequest.GetRequestStream return same instance (fixes #41403) #116757
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
base: main
Are you sure you want to change the base?
Conversation
@Lukeuke please read the following Contributor License Agreement(CLA). If you agree with the CLA, please reply with the following information.
Contributor License AgreementContribution License AgreementThis Contribution License Agreement ( “Agreement” ) is agreed to by the party signing below ( “You” ), 1. Definitions. “Code” means the computer software code, whether in human-readable or machine-executable form, “Project” means any of the projects owned or managed by .NET Foundation and offered under a license “Submit” is the act of uploading, submitting, transmitting, or distributing code or other content to any “Submission” means the Code and any other copyrightable material Submitted by You, including any 2. Your Submission. You must agree to the terms of this Agreement before making a Submission to any 3. Originality of Work. You represent that each of Your Submissions is entirely Your 4. Your Employer. References to “employer” in this Agreement include Your employer or anyone else 5. Licenses. a. Copyright License. You grant .NET Foundation, and those who receive the Submission directly b. Patent License. You grant .NET Foundation, and those who receive the Submission directly or c. Other Rights Reserved. Each party reserves all rights not expressly granted in this Agreement. 6. Representations and Warranties. You represent that You are legally entitled to grant the above 7. Notice to .NET Foundation. You agree to notify .NET Foundation in writing of any facts or 8. Information about Submissions. You agree that contributions to Projects and information about 9. Governing Law/Jurisdiction. This Agreement is governed by the laws of the State of Washington, and 10. Entire Agreement/Assignment. This Agreement is the entire agreement between the parties, and .NET Foundation dedicates this Contribution License Agreement to the public domain according to the Creative Commons CC0 1. |
src/libraries/System.Net.Requests/src/System/Net/HttpWebRequest.cs
Outdated
Show resolved
Hide resolved
…beginning of InternalGetRequestStream
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
First of all, thanks for the contribution! This seems mostly ok, however we need to add async path test + fix up the async path, to have the same behavior with sync path.
CI Failures look unrelated, I re-triggered it.
I've run the same test but async and it seems to be ok. Doesn't that mean the async path will have same behavior? |
This is what I get when I convert the test to async, for the context: |
I've double checked. I had stashed changes that are fixing that error. My bad. |
…equestStream_ReturnsSameInstanceWithoutLoopback_Async test
src/libraries/System.Net.Requests/src/System/Net/HttpWebRequest.cs
Outdated
Show resolved
Hide resolved
src/libraries/System.Net.Requests/src/System/Net/HttpWebRequest.cs
Outdated
Show resolved
Hide resolved
@@ -1146,6 +1152,8 @@ public override IAsyncResult BeginGetRequestStream(AsyncCallback? callback, obje | |||
throw new InvalidOperationException(SR.net_repcall); | |||
} | |||
|
|||
Interlocked.Exchange(ref _endGetRequestStreamCalled, false); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@liveans, why is the code tracking whether begin/end were called?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
why is the code tracking whether begin/end were called?
I'm not sure about the historical reason, but code was in that way since I've started to work on it. So, I didn't try to break the existing functionality.
My guess is that: It was due to APM functionality, and there are tests for it in the test suite as well.
But since people should be using Task-based functions instead, I think we should be safe to delete them.
Summary
Fixes a compatibility issue where
HttpWebRequest.GetRequestStream()
returned a new stream instance on each call, unlike .NET Framework which returns the same instance.Changes
_requestStream
insideInternalGetRequestStream
GetRequestStream_ReturnsSameInstanceWithoutLoopback
.Fixes: #41403