Skip to content

lib: add WeakRef and FinalizationRegistry to primordials - #37263

Merged
aduh95 merged 1 commit into
nodejs:masterfrom
ExE-Boss:lib/primordials/add-weakref-primordials
Apr 13, 2021
Merged

lib: add WeakRef and FinalizationRegistry to primordials#37263
aduh95 merged 1 commit into
nodejs:masterfrom
ExE-Boss:lib/primordials/add-weakref-primordials

Conversation

@ExE-Boss

Copy link
Copy Markdown
Contributor

This cleans up the two TODOs in:

// TODO(aduh95): Add FinalizationRegistry to primordials
constSafeFinalizationRegistry=makeSafe(
globalThis.FinalizationRegistry,
classSafeFinalizationRegistryextendsglobalThis.FinalizationRegistry{}
);
// TODO(aduh95): Add WeakRef to primordials
constSafeWeakRef=makeSafe(
globalThis.WeakRef,
classSafeWeakRefextendsglobalThis.WeakRef{}
);

@nodejs-github-botnodejs-github-bot added the util Issues and PRs related to the built-in util module. label Feb 7, 2021
@benjamingr

Copy link
Copy Markdown
Member

Thanks!

Any chance you could also make the (new'ish) weak event handler machinery in event_target use this? (It's the other place I know in the code that uses FinalizationRegistry and WeakRef).

@targos

Copy link
Copy Markdown
Member

I wouldn't expect this to work yet. WeakRef can still be disabled with a V8 flag (--no-harmony-weak-refs) so they are not available while bootstrapping.

@devsnek

Copy link
Copy Markdown
Member

I might just go change that, moving the error snapshot use instead of creation.

@jasnell

Copy link
Copy Markdown
Member

FWIW, Node.js already fails to start when the --no-harmony-weak-refs flag is used...

root@DESKTOP-5KK9VIR:~/node/node# ./node --no-harmony-weak-refs
node:internal/util/iterable_weak_map:14
class SafeFinalizationRegistry extends globalThis.FinalizationRegistry {}
^
TypeError: Class extends value undefined is not a constructor or null
at node:internal/util/iterable_weak_map:14:53
at NativeModule.compileForInternalLoader (node:internal/bootstrap/loaders:283:7)
at nativeModuleRequire (node:internal/bootstrap/loaders:312:14)
at node:internal/source_map/source_map_cache:28:29
at NativeModule.compileForInternalLoader (node:internal/bootstrap/loaders:283:7)
at nativeModuleRequire (node:internal/bootstrap/loaders:312:14)
at node:internal/modules/cjs/loader:78:5
at NativeModule.compileForInternalLoader (node:internal/bootstrap/loaders:283:7)
at nativeModuleRequire (node:internal/bootstrap/loaders:312:14)
at node:internal/modules/esm/loader:4:1

@devsnek

Copy link
Copy Markdown
Member

@jasnell the issue is that V8 disables flagged globals during snapshot, regardless of whether you expect them to be available later or not.

@aduh95

Copy link
Copy Markdown
Contributor

I'v e submitted https://chromium-review.googlesource.com/c/v8/v8/+/2741582/ to unblock this.

@devsnek

Copy link
Copy Markdown
Member

@aduh95 cloudflare uses that flag for workers, probably can't land.

@devsnek

Copy link
Copy Markdown
Member

I'd like to talk to the V8 team about a new flag system which allows them to be snapshotted, but they don't seem to care at all about our design constraints or maintaining contact with us so it's been delayed.

@aduh95

aduh95 commented Apr 9, 2021

Copy link
Copy Markdown
Contributor

Flag has been removed upstream, I've opened #38162 to test if that makes the tests pass.

@aduh95
aduh95force-pushed the lib/primordials/add-weakref-primordials branch from 846fc79 to f98f3b5CompareApril 9, 2021 18:21
@aduh95

aduh95 commented Apr 9, 2021

Copy link
Copy Markdown
Contributor

Tests are passing :) @ExE-Boss I've forced-pushed to your branch to include the V8 patch, please have a look in case I did something wrong (oh and I added f98f3b551cc5433ba2224178e6f1a03f0af32769, I hope that's OK; if you disagree of course feel free to revert).

@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

@ExE-Boss
ExE-Bossforce-pushed the lib/primordials/add-weakref-primordials branch from f98f3b5 to 0669710CompareApril 12, 2021 22:49
@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

Co-authored-by: Antoine du Hamel <duhamelantoine1995@gmail.com>
PR-URL: nodejs#37263
Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com>
@aduh95
aduh95force-pushed the lib/primordials/add-weakref-primordials branch from 0669710 to 78343bbCompareApril 13, 2021 10:37
@aduh95
aduh95 merged commit 78343bb into nodejs:masterApr 13, 2021
@aduh95

Copy link
Copy Markdown
Contributor

Landed in 78343bb

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

utilIssues and PRs related to the built-in util module.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

7 participants

@ExE-Boss@benjamingr@targos@devsnek@jasnell@aduh95@nodejs-github-bot