Uh oh!
There was an error while loading. Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork 34.2k
src: cleanup uv_fs_t regardless of success or not#38996
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
Uh oh!
There was an error while loading. Please reload this page.
Conversation
legendecas commented Jun 10, 2021 • edited
Loading Uh oh!
There was an error while loading. Please reload this page.
edited
Uh oh!
There was an error while loading. Please reload this page.
nodejs-github-bot commented Jun 10, 2021 • edited by legendecas
Loading Uh oh!
There was an error while loading. Please reload this page.
edited by legendecas
Uh oh!
There was an error while loading. Please reload this page.
CI: https://ci.nodejs.org/job/node-test-pull-request/38562/
|
nodejs-github-bot commented Jun 11, 2021 • edited by legendecas
Loading Uh oh!
There was an error while loading. Please reload this page.
edited by legendecas
Uh oh!
There was an error while loading. Please reload this page.
CI: https://ci.nodejs.org/job/node-test-pull-request/38569/
|
nodejs-github-bot commented Jun 11, 2021
| uv_fs_t req; | ||
| auto defer_req_cleanup = OnScopeLeave([&req](){ | ||
| uv_fs_req_cleanup(&req); | ||
| }); |
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.
An alternative approach (that may be a bit nicer here) is to use a smart-pointer type of mechanism like we use elsewhere... something like...
structUvFsReq{uv_fs_t req; ~UvFsReq(){uv_fs_req_cleanup(&req)} }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.
Sounds great, I'll do an update.
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.
After several tries, I found that wrapping with a naive data struct did not work well in the case. We have to access members of uv_fs_t and passing the pointer of uv_fs_t back to uv, like:
uv_fs_t req; uv_fs_open(nullptr, &req, path, O_RDONLY, 0, nullptr); // <- either we write with `&UvFsReq.req` or using operators to automatically convert (which might not be very straightforward since it implicit converting from data type to pointer type)if (req.result < 0); // <- accessing member of `uv_fs_t`, either we write with UvFsReq.req.result or explicitly declare the member proxy in UvFsReq like `UvFsReq.result()`. This is too much for the intent, a OnScopeLeave just fit in well.
As such, I'd believe it is more readable and straightforward to use uv_fs_t here. And there are a lot of precedents in the code base.
legendecas commented Jun 16, 2021
Landed in e4eadb2 |
PR-URL: #38996 Reviewed-By: Joyee Cheung <[email protected]> Reviewed-By: Franziska Hinkelmann <[email protected]>
PR-URL: #38996 Reviewed-By: Joyee Cheung <[email protected]> Reviewed-By: Franziska Hinkelmann <[email protected]>
PR-URL: #38996 Reviewed-By: Joyee Cheung <[email protected]> Reviewed-By: Franziska Hinkelmann <[email protected]>
PR-URL: #38996 Reviewed-By: Joyee Cheung <[email protected]> Reviewed-By: Franziska Hinkelmann <[email protected]>
PR-URL: nodejs#38996 Reviewed-By: Joyee Cheung <[email protected]> Reviewed-By: Franziska Hinkelmann <[email protected]>
uv_fs_tregardless of success or not.uv_fs_tafter cleanup.This is a quite recent change, so I'm requesting original author @joyeecheung 's review.