-
Notifications
You must be signed in to change notification settings - Fork 4.6k
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
Dont cache file length when handle has been exposed #50424
Dont cache file length when handle has been exposed #50424
Conversation
Tagging subscribers to this area: @carlossanlop Issue Details
|
src/libraries/System.Private.CoreLib/src/System/IO/Strategies/WindowsFileStreamStrategy.cs
Show resolved
Hide resolved
src/libraries/System.Private.CoreLib/src/System/IO/Strategies/WindowsFileStreamStrategy.cs
Outdated
Show resolved
Hide resolved
src/libraries/System.Private.CoreLib/src/System/IO/Strategies/WindowsFileStreamStrategy.cs
Show resolved
Hide resolved
src/libraries/System.Private.CoreLib/src/System/IO/Strategies/WindowsFileStreamStrategy.cs
Outdated
Show resolved
Hide resolved
src/libraries/System.Private.CoreLib/src/System/IO/Strategies/WindowsFileStreamStrategy.cs
Show resolved
Hide resolved
src/libraries/System.Private.CoreLib/src/System/IO/Strategies/WindowsFileStreamStrategy.cs
Show resolved
Hide resolved
src/libraries/System.Private.CoreLib/src/System/IO/Strategies/WindowsFileStreamStrategy.cs
Outdated
Show resolved
Hide resolved
src/libraries/System.Private.CoreLib/src/System/IO/Strategies/WindowsFileStreamStrategy.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, thanks.
public async Task LengthIsNotCachedAfterHandleHasBeenExposed(FileAccess fileAccess) | ||
{ | ||
using FileStream stream = (FileStream)await CreateStream(Array.Empty<byte>(), fileAccess); | ||
using FileStream createdFromHandle = new FileStream(stream.SafeFileHandle, fileAccess); |
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.
Do you also need a test that marks it as exposed part way through rather than immediately?
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.
I don't think so. In this test, we have a FileStream
that gets exposed by accessing SafeFileHandle
and another one that gets exposed by creating it from the handle. The modification of Length
is verified in both directions. IMO it's enough.
If you believe that there is a good reason to do it, please let me know why and I'll be happy to send another PR. In the meantime, I am going to merge it as I really want to start testing other repos against the new implementation.
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.
Because you added code that ignores a _length cache if _exposed is true. For both stream and createFromHandle here, you'll never get to the point where you cache _length in Length, because _exposed is true before Length is ever accessed.
No description provided.