-
Notifications
You must be signed in to change notification settings - Fork 4.8k
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
Refactor MsQuic's native IP address types. #53461
Conversation
Tagging subscribers to this area: @dotnet/ncl Issue Details
This PR changes these properties to return read-only spans, avoiding the allocation of an byte array. A similar trick is already performed on the spans returned by the
|
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.
LGTM, based on current usage. This becomes very unsafe if that span is passed out to a different scope than the struct was defined, so usage of this property needs to be scrutinized heavily moving forward.
I got another idea. We could add a |
My preference actually would be for the _addr fields to instead by a fixed buffer pointer (e.g. |
OK @stephentoub, I applied your suggestions; they turned out to allow optimizing the |
...es/System.Net.Quic/src/System/Net/Quic/Implementations/MsQuic/Interop/MsQuicNativeMethods.cs
Outdated
Show resolved
Hide resolved
.../System.Net.Quic/src/System/Net/Quic/Implementations/MsQuic/Internal/MsQuicAddressHelpers.cs
Outdated
Show resolved
Hide resolved
And handle them more efficiently when moving between them and .NET's IPAddresses.
cc: @dotnet/ncl |
.../System.Net.Quic/src/System/Net/Quic/Implementations/MsQuic/Internal/MsQuicAddressHelpers.cs
Outdated
Show resolved
Hide resolved
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.
LGTM
…asm_debugger_and_use_debugger_agent * upstream/main: (597 commits) Fix42292 (dotnet#52463) [mono] Remove some obsolete emscripten flags. (dotnet#53486) Fixed path to projects (dotnet#53435) support ServerCertificateContext in quic (dotnet#53175) Socket: delete unix local endpoint filename on Close (dotnet#52103) [mono] Fix sgen_gc_info.memory_load_bytes (dotnet#53364) Refactor MsQuic's native IP address types. (dotnet#53461) Re-enabled optimizations for gtFoldExprConst (dotnet#53347) Add diagnostic support into sample app and AppBuilders on Mono. (dotnet#53361) Fix issues with virtuals and mdarrays (dotnet#53400) Split Variant marshalling tests (dotnet#53035) Update clrjit.natvis to cover GT_SIMD and GT_HWINTRINSIC (dotnet#53470) remove WSL checks in tests (dotnet#53475) Always spawn message loop thread for SystemEvents (dotnet#53467) add AcceptAsync cancellation overloads (dotnet#53340) Remove unnecessary reference to iOS workload pack in the Mono workload (dotnet#53425) Add CookieContainer.GetAllCookies (dotnet#53441) Remove DynamicallyAccessedMembers on JsonSerializer (dotnet#53235) [wasm] Re-enable Wasm.Build.Tests (dotnet#53433) [libraries] Move library tests Feature Switches defaults to Functional tests (dotnet#53253) ...
Assuming that GetAddressBytes() does not have side effects, this call should not be needed. Clean up from #53461
MsQuicAddressHelpers.INetToIPEndPoint
passes byte arrays to theIPAddress
' constructor which were allocated by theAddress
properties of theMsQuicNativeMethods+SOCKADDR_IN
(6
) structs. There are no other uses of these properties.This PR changes these properties to return read-only spans, avoiding the allocation of an byte array.
A similar trick is already performed on the spans returned by the
System.GCMemory
type.