Skip to content

Conversation

juanarbol
Copy link
Member

@juanarbol juanarbol commented Feb 11, 2020

Checklist
  • make -j4 test (UNIX), or vcbuild test (Windows) passes
  • tests and/or benchmarks are included
  • documentation is changed or added
  • commit message follows commit guidelines

@nodejs-github-bot nodejs-github-bot added c++ Issues and PRs that require attention from people who are familiar with C++. os Issues and PRs related to the os subsystem. labels Feb 11, 2020
lib/os.js Outdated
getOSType: _getOSType,
getPriority: _getPriority,
getTotalMem,
getUserInfo,
getUptime,
isBigEndian,
getOSVersion,
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
getOSVersion,

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the review sr!

@juanarbol juanarbol force-pushed the juanarbol/os-version-binding branch from 5b7b562 to 654e9d6 Compare February 13, 2020 18:42
@juanarbol
Copy link
Member Author

I've just made a refactor with the internals implementation, we were using uv_os_uname. two times, then I've propose a third time, so I've just create an abstraction for this three calls into one.

src/node_os.cc Outdated
"release",
NewStringType::kNormal).ToLocalChecked(),
release_str)
.FromJust();
Copy link
Member

@addaleax addaleax Feb 13, 2020

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It might be nicer to create an Array with 3 entries here, even if that means that means that the order of the entries becomes important:

  1. It removes the need to create strings for the keys in C++, and
  2. The .FromJust() calls here can be brought to crash if userland code runs before the os module is required

E.g. the following would current crash the process:

$ node -e 'Object.defineProperty(Object.prototype, "release", { set() { throw new Error(); } }); require("os")'
FATAL ERROR: v8::FromJust Maybe value is Nothing.
 1: 0xa15eb0 node::Abort() [./node]

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fwiw, here’s a good example of how to create a JS Array from C++ without much overhead:

node/src/node_util.cc

Lines 100 to 106 in d63bcdd

Local<Value> ret[] = {
proxy->GetTarget(),
proxy->GetHandler()
};
args.GetReturnValue().Set(
Array::New(args.GetIsolate(), ret, arraysize(ret)));

Copy link
Member

@santigimeno santigimeno Feb 13, 2020

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

E.g. the following would current crash the process:

Are these kind of crashes something to be avoided? It can be reproduced with some other properties:

node -e 'Object.defineProperty(Object.prototype, "name", { set() { throw new Error(); } });require("dns").resolveSrv("_jabber._tcp.google.com", () => {});'
FATAL ERROR: v8::FromJust Maybe value is Nothing.
 1: 0xa9d570 node::Abort() [node]

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@santigimeno Yes – unfortunately, a lot of Node.js core C++ code doesn’t do error handling well, but new code generally should.

@juanarbol juanarbol force-pushed the juanarbol/os-version-binding branch from 654e9d6 to 707bef9 Compare February 13, 2020 18:57
@juanarbol juanarbol force-pushed the juanarbol/os-version-binding branch from 707bef9 to bed81ff Compare February 15, 2020 00:01
@juanarbol juanarbol force-pushed the juanarbol/os-version-binding branch from bed81ff to 1e1bcca Compare February 15, 2020 00:43
@juanarbol
Copy link
Member Author

Is this a semver-minor thing?

@addaleax addaleax added the semver-minor PRs that contain new features and should be released in the next minor version. label Mar 4, 2020
@addaleax addaleax added the author ready PRs that have at least one approval, no pending requests for changes, and a CI started. label Mar 4, 2020
@nodejs-github-bot
Copy link
Collaborator

addaleax pushed a commit that referenced this pull request Mar 9, 2020
PR-URL: #31732
Reviewed-By: Anna Henningsen <[email protected]>
Reviewed-By: James M Snell <[email protected]>
@addaleax
Copy link
Member

addaleax commented Mar 9, 2020

Landed in c1e6725 🎉

@addaleax addaleax closed this Mar 9, 2020
@cjihrig cjihrig mentioned this pull request Mar 9, 2020
3 tasks
@MylesBorins
Copy link
Contributor

This does not land cleanly on v13.x. Would someone be willing to open a backport?

@juanarbol
Copy link
Member Author

MEEEEEEE ME ME ME ME ME MEEEEEEE, I want to

@MylesBorins
Copy link
Contributor

Amazing, thanks @juanarbol

You can find details on how to do a backport in this guide

You wil lwant to target the v13.x-staging branch

MylesBorins pushed a commit that referenced this pull request Mar 10, 2020
Backport-PR-URL: #32166
PR-URL: #31732
Reviewed-By: Anna Henningsen <[email protected]>
Reviewed-By: James M Snell <[email protected]>
@MylesBorins MylesBorins mentioned this pull request Mar 10, 2020
MylesBorins added a commit that referenced this pull request Mar 10, 2020
Notable changes:

* [[`ff58854dbe`](ff58854dbe)] - **(SEMVER-MINOR)** **fs**: return first folder made by mkdir recursive (Benjamin Coe) [#31530](#31530)
* [[`258a80d3cc`](258a80d3cc)] - **(SEMVER-MINOR)** **src**: create a getter for kernel version (Juan José Arboleda) [#31732](#31732)
* [[`4d5981be96`](4d5981be96)] - **(SEMVER-MINOR)** **async_hooks**: add sync enterWith to ALS (Stephen Belanger) [#31945](#31945)
* [[`dd83bd266d`](dd83bd266d)] - **(SEMVER-MINOR)** **wasi**: add returnOnExit option (Colin Ihrig) [#32101](#32101)

PR-URL: #32185
MylesBorins added a commit that referenced this pull request Mar 11, 2020
Notable changes:

* async_hooks:
  - add sync enterWith to ALS (Stephen Belanger)
    #31945
* cli:
  - allow --jitless V8 flag in NODE\_OPTIONS (Andrew Neitsch)
    #32100
* fs:
  - return first folder made by mkdir recursive (Benjamin Coe)
    #31530
* n-api:
  - define release 6 (Gabriel Schulhof)
    #32058
* src:
  - create a getter for kernel version (Juan José Arboleda)
    #31732
* wasi:
  - add returnOnExit option (Colin Ihrig)
    #32101

PR-URL: #32185
MylesBorins added a commit that referenced this pull request Mar 11, 2020
Notable changes:

* async_hooks:
  - add sync enterWith to ALS (Stephen Belanger)
    #31945
* cli:
  - allow --jitless V8 flag in NODE\_OPTIONS (Andrew Neitsch)
    #32100
* fs:
  - return first folder made by mkdir recursive (Benjamin Coe)
    #31530
* n-api:
  - define release 6 (Gabriel Schulhof)
    #32058
* src:
  - create a getter for kernel version (Juan José Arboleda)
    #31732
* wasi:
  - add returnOnExit option (Colin Ihrig)
    #32101

PR-URL: #32185
MylesBorins added a commit that referenced this pull request Mar 12, 2020
Notable changes:

* async_hooks:
  - add sync enterWith to ALS (Stephen Belanger)
    #31945
* cli:
  - allow --jitless V8 flag in NODE\_OPTIONS (Andrew Neitsch)
    #32100
* fs:
  - return first folder made by mkdir recursive (Benjamin Coe)
    #31530
* n-api:
  - define release 6 (Gabriel Schulhof)
    #32058
* src:
  - create a getter for kernel version (Juan José Arboleda)
    #31732
* wasi:
  - add returnOnExit option (Colin Ihrig)
    #32101

PR-URL: #32185
MylesBorins added a commit that referenced this pull request Mar 12, 2020
Notable changes:

* async_hooks:
  - add sync enterWith to ALS (Stephen Belanger)
    #31945
* cli:
  - allow --jitless V8 flag in NODE\_OPTIONS (Andrew Neitsch)
    #32100
* fs:
  - return first folder made by mkdir recursive (Benjamin Coe)
    #31530
* n-api:
  - define release 6 (Gabriel Schulhof)
    #32058
* src:
  - create a getter for kernel version (Juan José Arboleda)
    #31732
* wasi:
  - add returnOnExit option (Colin Ihrig)
    #32101

PR-URL: #32185
cjihrig added a commit to cjihrig/node that referenced this pull request Mar 13, 2020
pRtlGetVersion is not a thing. This text was likely a result of
copying the variable name used in libuv. This commit updates the
documentation to reference the correct Windows API call.

PR-URL: nodejs#32156
Refs: nodejs#31732
Reviewed-By: Anna Henningsen <[email protected]>
Reviewed-By: Ruben Bridgewater <[email protected]>
Reviewed-By: Gireesh Punathil <[email protected]>
Reviewed-By: Bartosz Sosnowski <[email protected]>
Reviewed-By: Richard Lau <[email protected]>
Reviewed-By: Ben Noordhuis <[email protected]>
Reviewed-By: James M Snell <[email protected]>
@targos targos removed the author ready PRs that have at least one approval, no pending requests for changes, and a CI started. label Apr 25, 2020
targos pushed a commit to targos/node that referenced this pull request Apr 25, 2020
Backport-PR-URL: nodejs#32166
PR-URL: nodejs#31732
Reviewed-By: Anna Henningsen <[email protected]>
Reviewed-By: James M Snell <[email protected]>
targos pushed a commit that referenced this pull request Apr 28, 2020
Backport-PR-URL: #32166
PR-URL: #31732
Reviewed-By: Anna Henningsen <[email protected]>
Reviewed-By: James M Snell <[email protected]>
@juanarbol juanarbol deleted the juanarbol/os-version-binding branch January 19, 2021 16:26
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
c++ Issues and PRs that require attention from people who are familiar with C++. os Issues and PRs related to the os subsystem. semver-minor PRs that contain new features and should be released in the next minor version.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

10 participants