-
-
Notifications
You must be signed in to change notification settings - Fork 31.9k
src: track cppgc wrappers with a list in Realm #56534
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
Conversation
Codecov ReportAttention: Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## main #56534 +/- ##
==========================================
- Coverage 90.14% 90.12% -0.03%
==========================================
Files 630 632 +2
Lines 186784 186905 +121
Branches 36653 36682 +29
==========================================
+ Hits 168377 168447 +70
- Misses 11205 11247 +42
- Partials 7202 7211 +9
🚀 New features to boost your workflow:
|
37e7bac
to
195a9a4
Compare
195a9a4
to
9b53840
Compare
Trying to rebase #51017 on top of it to verify the "use list for heap snapshot integration" idea. It seems we'll need to update the MemoryTracker code to stop creating duplicate nodes for cppgc wrappers (either that, or use something different for the cppgc wrapper list). Still looking into it.. |
ed3648a
to
036116a
Compare
```cpp | ||
private: | ||
CPPGC_USING_PRE_FINALIZER(MyWrap, Clean); | ||
``` |
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.
Some of these rules may be non-obvious to many developers. For example, let's say someone has a wrapped object that is holding a BaseObjectPtr<Foo>
as a member... Just based on reading this documentation, as a newcomer I would not know which of these conditions may apply. Do I need to clear the BaseObjectPtr in the CleanEnvResource callback? What about if it has a v8::Global<...>
member field? Is it ok to just let that be cleared by the default destructor? etc. I think calling out a few more detailed examples (and not partial examples like you have currently) of each case would be most helpful.
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.
let's say someone has a wrapped object that is holding a
BaseObjectPtr<Foo>
as a member
I don't think this would be supported in the nearest future, or will ever be supported - a cppgc-object should not hold on to a BaseObjectPtr<Foo>
without converting that BaseObjectPtr<Foo>
to cppgc-managed first - and then in that case they should use cppgc::Member<Foo>
to hold on to that instead. The migration needs to be done bottom-to-top. In the case of using cppgc::Member<Foo>
, nothing special needs to be done in the destructor, V8 will handle that properly.
What about if it has a v8::Global<...> member field?
I think in most cases, this should be v8::TracedReference
instead. In that case nothing special needs to be done in the destructor. This has been documented in the Creating C++ to JavaScript references in cppgc-managed objects
section.
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.
Added a note about not supporting cross BaseObject and cppgc-managed wrapeprs. I don't think it's impossible but someone needs to implement some helpers for that first (I am not 100% sure what needs to be done, but using cppgc::Persistent
would be a start).
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 wonder if we can somehow have c++ linting detect it for us if someone includes a BaseObjectPtr
member in one of these? .... in any case, this all sounds fine, I'd just like to make sure this gets included somehow in the documentation.
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.
If it comes up in the future that some people attempt to use BaseObjectPtr
in a cppgc wrapper, we can consider adding some linting rules. For now it seems a bit too premature. Since we are still in an early phase of cppgc migration, I think the rule of thumb is probably:
- If you are not looking into also updating the cppgc helpers, only use cppgc on classes that aren't more than what existing cppgc wrappers are doing (at this point in time, v8 handles and MemoryRetainer over other plain types are supported, cppgc members are supposed to be supported by we haven't tried it internally yet)
- If you want to tread on untrodden paths and manage more complex memory structures, like a cppgc wrapper referencing BaseObject, expect to figure out how to make it work and update the cppgc helpers yourself.
909a80a
to
6fd34b0
Compare
I did a few updates to the design:
|
This comment was marked as outdated.
This comment was marked as outdated.
This comment was marked as outdated.
This comment was marked as outdated.
This comment was marked as outdated.
This comment was marked as outdated.
This comment was marked as outdated.
This comment was marked as outdated.
This comment was marked as outdated.
This comment was marked as outdated.
CI is happy. @jasnell @legendecas can you take another look please? The last commit updated the list to hold weak persistents and uses the GC epilogue callback to purge empty weak persistents - mutating the handles at destruction incurs more complexity than it needs, for our use cases, letting V8's GC mark them as empty once the referenced objects become unreachable so that we can recognize and skip is already good enough for our own iterations. We just need to regularly prune the useless handles from list. |
This comment was marked as outdated.
This comment was marked as outdated.
This comment was marked as outdated.
This comment was marked as outdated.
CI is struggling again due to #57235... |
This comment was marked as outdated.
This comment was marked as outdated.
This comment was marked as outdated.
This comment was marked as outdated.
Landed in d2a1369 |
This allows us to perform cleanups of cppgc wrappers that rely on a living Realm during Realm shutdown. Otherwise the cleanup may happen during object destruction, which can be triggered by GC after Realm shutdown, leading to invalid access to Realm. The general pattern for this type of non-trivial destruction is designed to be: ``` class MyWrap final : CPPGC_MIXIN(MyWrap) { public: ~MyWrap() { this->Finalize(); } void Clean(Realm* realm) override { // Do cleanup that relies on a living Realm. This would be // called by CppgcMixin::Finalize() first during Realm // shutdown, while the Realm is still alive. If the destructor // calls Finalize() again later during garbage collection that // happens after Realm shutdown, Clean() would be skipped, // preventing invalid access to the Realm. } } ``` In addition, this allows us to trace external memory held by the wrappers in the heap snapshots if we add synthethic edges between the wrappers and other nodes in the embdder graph callback, or to perform snapshot serialization for them. PR-URL: #56534 Reviewed-By: Chengzhong Wu <legendecas@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
This does not land cleanly on v22.x-staging and would require a manual backport if we want it on v22.x |
This MR contains the following updates: | Package | Update | Change | |---|---|---| | [node](https://nodejs.org) ([source](https://github.com/nodejs/node)) | minor | `24.0.2` -> `24.2.0` | MR created with the help of [el-capitano/tools/renovate-bot](https://gitlab.com/el-capitano/tools/renovate-bot). **Proposed changes to behavior should be submitted there as MRs.** --- ### Release Notes <details> <summary>nodejs/node (node)</summary> ### [`v24.2.0`](https://github.com/nodejs/node/releases/tag/v24.2.0): 2025-06-09, Version 24.2.0 (Current), @​aduh95 [Compare Source](nodejs/node@v24.0.2...v24.2.0) ##### Notable Changes ##### Remove support for HTTP/2 priority signaling The support for priority signaling has been removed in nghttp2, following its deprecation in the [RFC 9113](https://datatracker.ietf.org/doc/html/rfc9113#section-5.3.1). As a consequence of this, priority signaling is deprecated on all release lines of Node.js, and removed from Node.js 24 so we can include latest updates from nghttp2. Contributed by Matteo Collina and Antoine du Hamel in [#​58293](nodejs/node#58293). ##### `import.meta.main` is now available Boolean value available in ECMAScript modules, which can be used to detect whether the current module was the entry point of the current process. ```mjs export function foo() { return 'Hello, world'; } function main() { const message = foo(); console.log(message); } if (import.meta.main) main(); // `foo` can be imported from another module without possible side-effects from `main` ``` Contributed by Joe and Antoine du Hamel in [#​57804](nodejs/node#57804). ##### Other Notable Changes - \[[`e13930bbe0`](nodejs/node@e13930bbe0)] - **doc**: add Filip Skokan to TSC (Rafael Gonzaga) [#​58499](nodejs/node#58499) - \[[`984894b38c`](nodejs/node@984894b38c)] - **doc**: deprecate `util.isNativeError` in favor of `Error.isError` (Miguel Marcondes Filho) [#​58262](nodejs/node#58262) - \[[`d261274b0f`](nodejs/node@d261274b0f)] - **doc**: deprecate passing an empty string to `options.shell` (Antoine du Hamel) [#​58564](nodejs/node#58564) - \[[`510872a522`](nodejs/node@510872a522)] - **(SEMVER-MINOR)** **doc**: graduate `Symbol.dispose`/`asyncDispose` from experimental (James M Snell) [#​58467](nodejs/node#58467) - \[[`6f4c9dd423`](nodejs/node@6f4c9dd423)] - **(SEMVER-MINOR)** **fs**: add `autoClose` option to `FileHandle` readableWebStream (James M Snell) [#​58548](nodejs/node#58548) - \[[`32efb63242`](nodejs/node@32efb63242)] - **http**: deprecate instantiating classes without new (Yagiz Nizipli) [#​58518](nodejs/node#58518) - \[[`0234a8ef53`](nodejs/node@0234a8ef53)] - **(SEMVER-MINOR)** **http2**: add diagnostics channel `http2.server.stream.finish` (Darshan Sen) [#​58560](nodejs/node#58560) - \[[`0f1e94f731`](nodejs/node@0f1e94f731)] - **(SEMVER-MINOR)** **lib**: graduate error codes that have been around for years (James M Snell) [#​58541](nodejs/node#58541) - \[[`13abca3c26`](nodejs/node@13abca3c26)] - **(SEMVER-MINOR)** **perf_hooks**: make event loop delay histogram disposable (James M Snell) [#​58384](nodejs/node#58384) - \[[`8ea1fc5f3b`](nodejs/node@8ea1fc5f3b)] - **(SEMVER-MINOR)** **src**: support namespace options in configuration file (Pietro Marchini) [#​58073](nodejs/node#58073) - \[[`d6ea36ad6c`](nodejs/node@d6ea36ad6c)] - **src,permission**: implicit allow-fs-read to app entrypoint (Rafael Gonzaga) [#​58579](nodejs/node#58579) - \[[`5936cef60a`](nodejs/node@5936cef60a)] - **(SEMVER-MINOR)** **test**: add disposable histogram test (James M Snell) [#​58384](nodejs/node#58384) - \[[`7a91f4aaa1`](nodejs/node@7a91f4aaa1)] - **(SEMVER-MINOR)** **test**: add test for async disposable worker thread (James M Snell) [#​58385](nodejs/node#58385) - \[[`532c173cf2`](nodejs/node@532c173cf2)] - **(SEMVER-MINOR)** **util**: add `none` style to styleText (James M Snell) [#​58437](nodejs/node#58437) - \[[`aeb9ab4c4c`](nodejs/node@aeb9ab4c4c)] - **(SEMVER-MINOR)** **worker**: make Worker async disposable (James M Snell) [#​58385](nodejs/node#58385) ##### Commits - \[[`6c92329b1b`](nodejs/node@6c92329b1b)] - ***Revert*** "**benchmark**: fix broken fs.cpSync benchmark" (Yuesong Jake Li) [#​58476](nodejs/node#58476) - \[[`8bc045264e`](nodejs/node@8bc045264e)] - **benchmark**: fix broken fs.cpSync benchmark (Dario Piotrowicz) [#​58472](nodejs/node#58472) - \[[`46aa079cce`](nodejs/node@46aa079cce)] - **benchmark**: add callback-based `fs.glob` to glob benchmark (Livia Medeiros) [#​58417](nodejs/node#58417) - \[[`a57b05e105`](nodejs/node@a57b05e105)] - **benchmark**: add more options to cp-sync (Sonny) [#​58278](nodejs/node#58278) - \[[`8b5ada4b31`](nodejs/node@8b5ada4b31)] - **buffer**: use Utf8LengthV2() instead of Utf8Length() (Tobias Nießen) [#​58156](nodejs/node#58156) - \[[`22e97362f3`](nodejs/node@22e97362f3)] - **build**: search for libnode.so in multiple places (Jan Staněk) [#​58213](nodejs/node#58213) - \[[`0b4056c573`](nodejs/node@0b4056c573)] - **build**: add support for OpenHarmony operating system (hqzing) [#​58350](nodejs/node#58350) - \[[`db7f413dd3`](nodejs/node@db7f413dd3)] - **build**: fix pointer compression builds (Joyee Cheung) [#​58171](nodejs/node#58171) - \[[`7ff37183e5`](nodejs/node@7ff37183e5)] - **build**: fix defaults for shared llhttp (Antoine du Hamel) [#​58269](nodejs/node#58269) - \[[`b8c33190fe`](nodejs/node@b8c33190fe)] - **build,win**: fix dll build (Stefan Stojanovic) [#​58357](nodejs/node#58357) - \[[`ef9ecbe8a6`](nodejs/node@ef9ecbe8a6)] - **child_process**: give names to `ChildProcess` functions (Livia Medeiros) [#​58370](nodejs/node#58370) - \[[`cec9d9d016`](nodejs/node@cec9d9d016)] - **crypto**: forward auth tag to OpenSSL immediately (Tobias Nießen) [#​58547](nodejs/node#58547) - \[[`9fccb0609f`](nodejs/node@9fccb0609f)] - **crypto**: expose crypto.constants.OPENSSL_IS_BORINGSSL (Shelley Vohr) [#​58387](nodejs/node#58387) - \[[`e7c69b9345`](nodejs/node@e7c69b9345)] - **deps**: update nghttp2 to 1.65.0 (Node.js GitHub Bot) [#​57269](nodejs/node#57269) - \[[`d0b89598a3`](nodejs/node@d0b89598a3)] - **deps**: use proper C standard when building libuv (Yaksh Bariya) [#​58587](nodejs/node#58587) - \[[`8a1fe7bc6a`](nodejs/node@8a1fe7bc6a)] - **deps**: update simdjson to 3.12.3 (Node.js GitHub Bot) [#​57682](nodejs/node#57682) - \[[`36b639b1eb`](nodejs/node@36b639b1eb)] - **deps**: update googletest to [`e9092b1`](nodejs/node@e9092b1) (Node.js GitHub Bot) [#​58565](nodejs/node#58565) - \[[`f8a2a1ef52`](nodejs/node@f8a2a1ef52)] - **deps**: update corepack to 0.33.0 (Node.js GitHub Bot) [#​58566](nodejs/node#58566) - \[[`efb28f7895`](nodejs/node@efb28f7895)] - **deps**: V8: cherry-pick [`249de88`](nodejs/node@249de887a8d3) (Michaël Zasso) [#​58561](nodejs/node#58561) - \[[`88e621ea97`](nodejs/node@88e621ea97)] - **deps**: update sqlite to 3.50.0 (Node.js GitHub Bot) [#​58272](nodejs/node#58272) - \[[`8d2ba386f1`](nodejs/node@8d2ba386f1)] - **deps**: update OpenSSL gen container to Ubuntu 22.04 (Michaël Zasso) [#​58432](nodejs/node#58432) - \[[`7e62a77a7f`](nodejs/node@7e62a77a7f)] - **deps**: update undici to 7.10.0 (Node.js GitHub Bot) [#​58445](nodejs/node#58445) - \[[`87eebd7bad`](nodejs/node@87eebd7bad)] - **deps**: keep required OpenSSL doc files (Michaël Zasso) [#​58431](nodejs/node#58431) - \[[`10910660f6`](nodejs/node@10910660f6)] - **deps**: update undici to 7.9.0 (Node.js GitHub Bot) [#​58268](nodejs/node#58268) - \[[`5e27078ca2`](nodejs/node@5e27078ca2)] - **deps**: update ada to 3.2.4 (Node.js GitHub Bot) [#​58152](nodejs/node#58152) - \[[`3b1e4bdbbb`](nodejs/node@3b1e4bdbbb)] - **deps**: update libuv to 1.51.0 (Node.js GitHub Bot) [#​58124](nodejs/node#58124) - \[[`6bddf587ae`](nodejs/node@6bddf587ae)] - **dns**: fix dns query cache implementation (Ethan Arrowood) [#​58404](nodejs/node#58404) - \[[`984894b38c`](nodejs/node@984894b38c)] - **doc**: deprecate utilisNativeError in favor of ErrorisError (Miguel Marcondes Filho) [#​58262](nodejs/node#58262) - \[[`377ef3ce3a`](nodejs/node@377ef3ce3a)] - **doc**: add support link for panva (Filip Skokan) [#​58591](nodejs/node#58591) - \[[`33a69ff9e4`](nodejs/node@33a69ff9e4)] - **doc**: update metadata for \_transformState deprecation (James M Snell) [#​58530](nodejs/node#58530) - \[[`d261274b0f`](nodejs/node@d261274b0f)] - **doc**: deprecate passing an empty string to `options.shell` (Antoine du Hamel) [#​58564](nodejs/node#58564) - \[[`447ca11010`](nodejs/node@447ca11010)] - **doc**: correct formatting of example definitions for `--test-shard` (Jacob Smith) [#​58571](nodejs/node#58571) - \[[`2f555e0e19`](nodejs/node@2f555e0e19)] - **doc**: clarify DEP0194 scope (Antoine du Hamel) [#​58504](nodejs/node#58504) - \[[`af0446edcb`](nodejs/node@af0446edcb)] - **doc**: deprecate HTTP/2 priority signaling (Matteo Collina) [#​58313](nodejs/node#58313) - \[[`80cc17f1ec`](nodejs/node@80cc17f1ec)] - **doc**: explain child_process code and signal null values everywhere (Darshan Sen) [#​58479](nodejs/node#58479) - \[[`e13930bbe0`](nodejs/node@e13930bbe0)] - **doc**: add Filip Skokan to TSC (Rafael Gonzaga) [#​58499](nodejs/node#58499) - \[[`5f3f045ecc`](nodejs/node@5f3f045ecc)] - **doc**: update `git node release` example (Antoine du Hamel) [#​58475](nodejs/node#58475) - \[[`4bbd026cde`](nodejs/node@4bbd026cde)] - **doc**: add missing options.info for ZstdOptions (Jimmy Leung) [#​58360](nodejs/node#58360) - \[[`a6d0d2a0d7`](nodejs/node@a6d0d2a0d7)] - **doc**: add missing options.info for BrotliOptions (Jimmy Leung) [#​58359](nodejs/node#58359) - \[[`510872a522`](nodejs/node@510872a522)] - **(SEMVER-MINOR)** **doc**: graduate Symbol.dispose/asyncDispose from experimental (James M Snell) [#​58467](nodejs/node#58467) - \[[`08685256cd`](nodejs/node@08685256cd)] - **doc**: clarify x509.checkIssued only checks metadata (Filip Skokan) [#​58457](nodejs/node#58457) - \[[`095794fc24`](nodejs/node@095794fc24)] - **doc**: add links to parent class for `node:zlib` classes (Antoine du Hamel) [#​58433](nodejs/node#58433) - \[[`7acac70bce`](nodejs/node@7acac70bce)] - **doc**: remove remaining uses of `@@​wellknown` syntax (René) [#​58413](nodejs/node#58413) - \[[`62056d40c7`](nodejs/node@62056d40c7)] - **doc**: clarify behavior of --watch-path and --watch flags (Juan Ignacio Benito) [#​58136](nodejs/node#58136) - \[[`e6e6ae887d`](nodejs/node@e6e6ae887d)] - **doc**: fix the order of `process.md` sections (Allon Murienik) [#​58403](nodejs/node#58403) - \[[`d2f6c82c0f`](nodejs/node@d2f6c82c0f)] - **doc,lib**: update source map links to ECMA426 (Chengzhong Wu) [#​58597](nodejs/node#58597) - \[[`a994d3d51a`](nodejs/node@a994d3d51a)] - **doc,src,test**: fix typos (Noritaka Kobayashi) [#​58477](nodejs/node#58477) - \[[`252acc1e89`](nodejs/node@252acc1e89)] - **errors**: show url of unsupported attributes in the error message (Aditi) [#​58303](nodejs/node#58303) - \[[`767e88cbc3`](nodejs/node@767e88cbc3)] - **esm**: unwrap WebAssembly.Global on Wasm Namespaces (Guy Bedford) [#​57525](nodejs/node#57525) - \[[`adef9af3ae`](nodejs/node@adef9af3ae)] - **(SEMVER-MINOR)** **esm**: implement import.meta.main (Joe) [#​57804](nodejs/node#57804) - \[[`308f4cac4b`](nodejs/node@308f4cac4b)] - **esm**: add support for dynamic source phase hook (Guy Bedford) [#​58147](nodejs/node#58147) - \[[`fcef56cb05`](nodejs/node@fcef56cb05)] - **fs**: improve cpSync no-filter copyDir performance (Dario Piotrowicz) [#​58461](nodejs/node#58461) - \[[`996fdb05ab`](nodejs/node@996fdb05ab)] - **fs**: fix cp handle existing symlinks (Yuesong Jake Li) [#​58476](nodejs/node#58476) - \[[`d2931e50e3`](nodejs/node@d2931e50e3)] - **fs**: fix cpSync handle existing symlinks (Yuesong Jake Li) [#​58476](nodejs/node#58476) - \[[`6f4c9dd423`](nodejs/node@6f4c9dd423)] - **(SEMVER-MINOR)** **fs**: add autoClose option to FileHandle readableWebStream (James M Snell) [#​58548](nodejs/node#58548) - \[[`8870bb8677`](nodejs/node@8870bb8677)] - **fs**: improve `cpSync` dest overriding performance (Dario Piotrowicz) [#​58160](nodejs/node#58160) - \[[`f2e2301559`](nodejs/node@f2e2301559)] - **fs**: unexpose internal constants (Chengzhong Wu) [#​58327](nodejs/node#58327) - \[[`32efb63242`](nodejs/node@32efb63242)] - **http**: deprecate instantiating classes without new (Yagiz Nizipli) [#​58518](nodejs/node#58518) - \[[`0b987e5741`](nodejs/node@0b987e5741)] - **(SEMVER-MAJOR)** **http2**: remove support for priority signaling (Matteo Collina) [#​58293](nodejs/node#58293) - \[[`44ca874b2c`](nodejs/node@44ca874b2c)] - **http2**: add lenient flag for RFC-9113 (Carlos Fuentes) [#​58116](nodejs/node#58116) - \[[`0234a8ef53`](nodejs/node@0234a8ef53)] - **(SEMVER-MINOR)** **http2**: add diagnostics channel 'http2.server.stream.finish' (Darshan Sen) [#​58560](nodejs/node#58560) - \[[`2b868e8aa7`](nodejs/node@2b868e8aa7)] - **http2**: add diagnostics channel 'http2.server.stream.error' (Darshan Sen) [#​58512](nodejs/node#58512) - \[[`b4df8d38cd`](nodejs/node@b4df8d38cd)] - **http2**: add diagnostics channel 'http2.server.stream.start' (Darshan Sen) [#​58449](nodejs/node#58449) - \[[`d86ff608bb`](nodejs/node@d86ff608bb)] - **http2**: remove no longer userful options.selectPadding (Jimmy Leung) [#​58373](nodejs/node#58373) - \[[`13dbbdc8a8`](nodejs/node@13dbbdc8a8)] - **http2**: add diagnostics channel 'http2.server.stream.created' (Darshan Sen) [#​58390](nodejs/node#58390) - \[[`08855464ec`](nodejs/node@08855464ec)] - **http2**: add diagnostics channel 'http2.client.stream.close' (Darshan Sen) [#​58329](nodejs/node#58329) - \[[`566fc567b8`](nodejs/node@566fc567b8)] - **http2**: add diagnostics channel 'http2.client.stream.finish' (Darshan Sen) [#​58317](nodejs/node#58317) - \[[`f30b9117d4`](nodejs/node@f30b9117d4)] - **http2**: add diagnostics channel 'http2.client.stream.error' (Darshan Sen) [#​58306](nodejs/node#58306) - \[[`79b852a692`](nodejs/node@79b852a692)] - **inspector**: add mimeType and charset support to Network.Response (Shima Ryuhei) [#​58192](nodejs/node#58192) - \[[`402ac8b1d8`](nodejs/node@402ac8b1d8)] - **inspector**: add protocol method Network.dataReceived (Chengzhong Wu) [#​58001](nodejs/node#58001) - \[[`29f34a7f86`](nodejs/node@29f34a7f86)] - **lib**: disable REPL completion on proxies and getters (Dario Piotrowicz) [#​57909](nodejs/node#57909) - \[[`0f1e94f731`](nodejs/node@0f1e94f731)] - **(SEMVER-MINOR)** **lib**: graduate error codes that have been around for years (James M Snell) [#​58541](nodejs/node#58541) - \[[`cc1aacabb0`](nodejs/node@cc1aacabb0)] - **lib**: make ERM functions into wrappers returning undefined (Livia Medeiros) [#​58400](nodejs/node#58400) - \[[`8df4dee38c`](nodejs/node@8df4dee38c)] - **lib**: remove no-mixed-operators eslint rule (Ruben Bridgewater) [#​58375](nodejs/node#58375) - \[[`104d173f58`](nodejs/node@104d173f58)] - **meta**: bump github/codeql-action from 3.28.16 to 3.28.18 (dependabot\[bot]) [#​58552](nodejs/node#58552) - \[[`b454e8386c`](nodejs/node@b454e8386c)] - **meta**: bump codecov/codecov-action from 5.4.2 to 5.4.3 (dependabot\[bot]) [#​58551](nodejs/node#58551) - \[[`f31e014b81`](nodejs/node@f31e014b81)] - **meta**: bump step-security/harden-runner from 2.11.0 to 2.12.0 (dependabot\[bot]) [#​58109](nodejs/node#58109) - \[[`4da920cc13`](nodejs/node@4da920cc13)] - **meta**: bump ossf/scorecard-action from 2.4.1 to 2.4.2 (dependabot\[bot]) [#​58550](nodejs/node#58550) - \[[`eb9bb95fe2`](nodejs/node@eb9bb95fe2)] - **meta**: bump rtCamp/action-slack-notify from 2.3.2 to 2.3.3 (dependabot\[bot]) [#​58108](nodejs/node#58108) - \[[`27ada1f18c`](nodejs/node@27ada1f18c)] - **meta**: move one or more collaborators to emeritus (Node.js GitHub Bot) [#​58456](nodejs/node#58456) - \[[`4606a6792b`](nodejs/node@4606a6792b)] - **meta**: bump github/codeql-action from 3.28.11 to 3.28.16 (dependabot\[bot]) [#​58112](nodejs/node#58112) - \[[`7dfe448b7f`](nodejs/node@7dfe448b7f)] - **meta**: bump codecov/codecov-action from 5.4.0 to 5.4.2 (dependabot\[bot]) [#​58110](nodejs/node#58110) - \[[`18bb5f7e7e`](nodejs/node@18bb5f7e7e)] - **meta**: bump actions/download-artifact from 4.2.1 to 4.3.0 (dependabot\[bot]) [#​58106](nodejs/node#58106) - \[[`72f2a22889`](nodejs/node@72f2a22889)] - **module**: clarify cjs global-like error on ModuleJobSync (Carlos Espa) [#​56491](nodejs/node#56491) - \[[`b0e0b1afae`](nodejs/node@b0e0b1afae)] - **net**: always publish to 'net.client.socket' diagnostics channel (Darshan Sen) [#​58349](nodejs/node#58349) - \[[`f373d6a540`](nodejs/node@f373d6a540)] - **node-api**: use WriteOneByteV2 in napi_get_value_string_latin1 (Chengzhong Wu) [#​58325](nodejs/node#58325) - \[[`429c38db1b`](nodejs/node@429c38db1b)] - **node-api**: use WriteV2 in napi_get_value_string_utf16 (Tobias Nießen) [#​58165](nodejs/node#58165) - \[[`b882148999`](nodejs/node@b882148999)] - **path**: improve path.resolve() performance when used as process.cwd() (Ruben Bridgewater) [#​58362](nodejs/node#58362) - \[[`13abca3c26`](nodejs/node@13abca3c26)] - **(SEMVER-MINOR)** **perf_hooks**: make event loop delay histogram disposable (James M Snell) [#​58384](nodejs/node#58384) - \[[`1cd417d823`](nodejs/node@1cd417d823)] - **permission**: remove useless conditional (Juan José) [#​58514](nodejs/node#58514) - \[[`462c4b0c24`](nodejs/node@462c4b0c24)] - **readline**: add stricter validation for functions called after closed (Dario Piotrowicz) [#​58283](nodejs/node#58283) - \[[`e3e36f902c`](nodejs/node@e3e36f902c)] - **repl**: extract and standardize history from both repl and interface (Giovanni Bucci) [#​58225](nodejs/node#58225) - \[[`cbb2a0172f`](nodejs/node@cbb2a0172f)] - **report**: use uv_getrusage_thread in report (theanarkh) [#​58405](nodejs/node#58405) - \[[`3a6bd9c4c4`](nodejs/node@3a6bd9c4c4)] - **sqlite**: handle thrown errors in result callback (Colin Ihrig) [#​58426](nodejs/node#58426) - \[[`0d761bbccd`](nodejs/node@0d761bbccd)] - **src**: env_vars caching and local variable scope optimization (Mert Can Altin) [#​57624](nodejs/node#57624) - \[[`8ea1fc5f3b`](nodejs/node@8ea1fc5f3b)] - **(SEMVER-MINOR)** **src**: support namespace options in configuration file (Pietro Marchini) [#​58073](nodejs/node#58073) - \[[`f72ce2ef75`](nodejs/node@f72ce2ef75)] - **src**: remove fast API for InternalModuleStat (Joyee Cheung) [#​58489](nodejs/node#58489) - \[[`8a1eaea151`](nodejs/node@8a1eaea151)] - **src**: update std::vector\<v8::Local\<T>> to use v8::LocalVector\<T> (Aditi) [#​58500](nodejs/node#58500) - \[[`d99d657842`](nodejs/node@d99d657842)] - **src**: fix FIPS init error handling (Tobias Nießen) [#​58379](nodejs/node#58379) - \[[`11e4cd698b`](nodejs/node@11e4cd698b)] - **src**: fix possible dereference of null pointer (Eusgor) [#​58459](nodejs/node#58459) - \[[`ca0f5a0188`](nodejs/node@ca0f5a0188)] - **src**: add env->cppgc_allocation_handle() convenience method (James M Snell) [#​58483](nodejs/node#58483) - \[[`440d4f42bd`](nodejs/node@440d4f42bd)] - **src**: fix -Wreturn-stack-address error (Shelley Vohr) [#​58439](nodejs/node#58439) - \[[`08615b1020`](nodejs/node@08615b1020)] - **src**: prepare for v8 sandboxing (James M Snell) [#​58376](nodejs/node#58376) - \[[`63f643e844`](nodejs/node@63f643e844)] - **src**: reorganize ContextifyFunction methods (Chengzhong Wu) [#​58434](nodejs/node#58434) - \[[`3b6895a506`](nodejs/node@3b6895a506)] - **src**: improve CompileFunctionAndCacheResult error handling (Chengzhong Wu) [#​58434](nodejs/node#58434) - \[[`7f1c95aee8`](nodejs/node@7f1c95aee8)] - **src**: make a number of minor improvements to buffer (James M Snell) [#​58377](nodejs/node#58377) - \[[`ce081bcb9a`](nodejs/node@ce081bcb9a)] - **src**: fix build when using shared simdutf (Antoine du Hamel) [#​58407](nodejs/node#58407) - \[[`a35cc216e5`](nodejs/node@a35cc216e5)] - **src**: track cppgc wrappers with a list in Realm (Joyee Cheung) [#​56534](nodejs/node#56534) - \[[`947c1c2cd5`](nodejs/node@947c1c2cd5)] - **src,lib**: obtain sourceURL in magic comments from V8 (Chengzhong Wu) [#​58389](nodejs/node#58389) - \[[`d6ea36ad6c`](nodejs/node@d6ea36ad6c)] - **src,permission**: implicit allow-fs-read to app entrypoint (Rafael Gonzaga) [#​58579](nodejs/node#58579) - \[[`e8a07f2198`](nodejs/node@e8a07f2198)] - **stream**: making DecompressionStream spec compilent for trailing junk (0hm☘️) [#​58316](nodejs/node#58316) - \[[`3caa2f71c1`](nodejs/node@3caa2f71c1)] - **stream**: test explicit resource management implicitly (LiviaMedeiros) [#​58296](nodejs/node#58296) - \[[`9ccdf4fdb4`](nodejs/node@9ccdf4fdb4)] - **test**: improve flakiness detection on stack corruption tests (Darshan Sen) [#​58601](nodejs/node#58601) - \[[`d3fea003df`](nodejs/node@d3fea003df)] - **test**: mark timeouts & flaky test as flaky on IBM i (Abdirahim Musse) [#​58583](nodejs/node#58583) - \[[`8347ef6b53`](nodejs/node@8347ef6b53)] - **test**: dispose of filehandles in filehandle.read tests (Livia Medeiros) [#​58543](nodejs/node#58543) - \[[`34e86f91aa`](nodejs/node@34e86f91aa)] - **test**: rewrite test-child-process-spawn-args (Michaël Zasso) [#​58546](nodejs/node#58546) - \[[`d7a2458a58`](nodejs/node@d7a2458a58)] - **test**: make sqlite-database-sync tests work with system sqlite (Jelle Licht) [#​58507](nodejs/node#58507) - \[[`4d9d6830e0`](nodejs/node@4d9d6830e0)] - **test**: force slow JSON.stringify path for overflow (Shelley Vohr) [#​58181](nodejs/node#58181) - \[[`bef67e45e3`](nodejs/node@bef67e45e3)] - **test**: account for truthy signal in flaky async_hooks tests (Darshan Sen) [#​58478](nodejs/node#58478) - \[[`007c82f206`](nodejs/node@007c82f206)] - **test**: mark `test-http2-debug` as flaky on LinuxONE (Richard Lau) [#​58494](nodejs/node#58494) - \[[`21f6400098`](nodejs/node@21f6400098)] - **test**: update WPT for WebCryptoAPI to [`591c95c`](nodejs/node@591c95ce61) (Node.js GitHub Bot) [#​58176](nodejs/node#58176) - \[[`1deb5f06a5`](nodejs/node@1deb5f06a5)] - **test**: remove --no-warnings flag (Tobias Nießen) [#​58424](nodejs/node#58424) - \[[`beba631a10`](nodejs/node@beba631a10)] - **test**: add tests ensuring worker threads cannot access internals (Joe) [#​58332](nodejs/node#58332) - \[[`5936cef60a`](nodejs/node@5936cef60a)] - **(SEMVER-MINOR)** **test**: add disposable histogram test (James M Snell) [#​58384](nodejs/node#58384) - \[[`7a91f4aaa1`](nodejs/node@7a91f4aaa1)] - **(SEMVER-MINOR)** **test**: add test for async disposable worker thread (James M Snell) [#​58385](nodejs/node#58385) - \[[`5fc4706280`](nodejs/node@5fc4706280)] - **test**: leverage process.features.openssl_is_boringssl in test (Shelley Vohr) [#​58421](nodejs/node#58421) - \[[`4629b18397`](nodejs/node@4629b18397)] - **test**: fix test-buffer-tostring-range on allocation failure (Joyee Cheung) [#​58416](nodejs/node#58416) - \[[`4c445a8c85`](nodejs/node@4c445a8c85)] - **test**: skip in test-buffer-tostring-rangeerror on allocation failure (Joyee Cheung) [#​58415](nodejs/node#58415) - \[[`53cb29898b`](nodejs/node@53cb29898b)] - **test**: fix missing edge case in test-blob-slice-with-large-size (Joyee Cheung) [#​58414](nodejs/node#58414) - \[[`89fdfdedc1`](nodejs/node@89fdfdedc1)] - **test**: make crypto tests work with BoringSSL (Shelley Vohr) [#​58117](nodejs/node#58117) - \[[`3b5d0e62b1`](nodejs/node@3b5d0e62b1)] - **test**: test reordering of setAAD and setAuthTag (Tobias Nießen) [#​58396](nodejs/node#58396) - \[[`029440bec5`](nodejs/node@029440bec5)] - **test**: switch from deprecated `optparse` to `argparse` (Aviv Keller) [#​58224](nodejs/node#58224) - \[[`d05263edcc`](nodejs/node@d05263edcc)] - **test**: do not skip OCB decryption in FIPS mode (Tobias Nießen) [#​58382](nodejs/node#58382) - \[[`23474cb257`](nodejs/node@23474cb257)] - **test**: show more information in test-http2-debug upon failure (Joyee Cheung) [#​58391](nodejs/node#58391) - \[[`d0302e7b3d`](nodejs/node@d0302e7b3d)] - **test**: remove loop over single element (Tobias Nießen) [#​58368](nodejs/node#58368) - \[[`33f615897d`](nodejs/node@33f615897d)] - **test**: add chacha20-poly1305 to auth tag order test (Tobias Nießen) [#​58367](nodejs/node#58367) - \[[`8f09a1f502`](nodejs/node@8f09a1f502)] - **test**: skip wasm-allocation tests for pointer compression builds (Joyee Cheung) [#​58171](nodejs/node#58171) - \[[`4ae6a1a5ed`](nodejs/node@4ae6a1a5ed)] - **test**: remove references to create(De|C)ipher (Tobias Nießen) [#​58363](nodejs/node#58363) - \[[`4d647271b2`](nodejs/node@4d647271b2)] - **test_runner**: emit event when file changes in watch mode (Jacopo Martinelli) [#​57903](nodejs/node#57903) - \[[`1eda87c365`](nodejs/node@1eda87c365)] - **test_runner**: add level parameter to reporter.diagnostic (Jacopo Martinelli) [#​57923](nodejs/node#57923) - \[[`13377512be`](nodejs/node@13377512be)] - **tools**: bump the eslint group in `/tools/eslint` with 6 updates (dependabot\[bot]) [#​58549](nodejs/node#58549) - \[[`fcc881de0d`](nodejs/node@fcc881de0d)] - **tools**: support `DisposableStack` and `AsyncDisposableStack` in linter (LiviaMedeiros) [#​58454](nodejs/node#58454) - \[[`208d6a5754`](nodejs/node@208d6a5754)] - **tools**: support explicit resource management in eslint (LiviaMedeiros) [#​58296](nodejs/node#58296) - \[[`32070f304a`](nodejs/node@32070f304a)] - **tools**: add missing highway defines for IBM i (Abdirahim Musse) [#​58335](nodejs/node#58335) - \[[`ddab63a323`](nodejs/node@ddab63a323)] - **tty**: improve color terminal color detection (Ruben Bridgewater) [#​58146](nodejs/node#58146) - \[[`c094bea8d9`](nodejs/node@c094bea8d9)] - **tty**: use terminal VT mode on Windows (Anna Henningsen) [#​58358](nodejs/node#58358) - \[[`dc21054a1e`](nodejs/node@dc21054a1e)] - **typings**: add inspector internalBinding typing (Shima Ryuhei) [#​58492](nodejs/node#58492) - \[[`3499285904`](nodejs/node@3499285904)] - **typings**: remove no longer valid `FixedSizeBlobCopyJob` type (Dario Piotrowicz) [#​58305](nodejs/node#58305) - \[[`1ed2deb2c8`](nodejs/node@1ed2deb2c8)] - **typings**: remove no longer valid `revokeDataObject` type (Dario Piotrowicz) [#​58305](nodejs/node#58305) - \[[`532c173cf2`](nodejs/node@532c173cf2)] - **(SEMVER-MINOR)** **util**: add 'none' style to styleText (James M Snell) [#​58437](nodejs/node#58437) - \[[`2d5a1ef528`](nodejs/node@2d5a1ef528)] - **vm**: import call should return a promise in the current context (Chengzhong Wu) [#​58309](nodejs/node#58309) - \[[`588c2449f2`](nodejs/node@588c2449f2)] - **win,tools**: use Azure Trusted Signing (Stefan Stojanovic) [#​58502](nodejs/node#58502) - \[[`aeb9ab4c4c`](nodejs/node@aeb9ab4c4c)] - **(SEMVER-MINOR)** **worker**: make Worker async disposable (James M Snell) [#​58385](nodejs/node#58385) - \[[`23416cce0a`](nodejs/node@23416cce0a)] - **worker**: give names to `MessagePort` functions (Livia Medeiros) [#​58307](nodejs/node#58307) - \[[`44df21b7fb`](nodejs/node@44df21b7fb)] - **zlib**: remove mentions of unexposed Z_TREES constant (Jimmy Leung) [#​58371](nodejs/node#58371) </details> --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever MR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this MR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this MR, check this box --- This MR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MC41Mi4wIiwidXBkYXRlZEluVmVyIjoiNDAuNTIuMCIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiUmVub3ZhdGUgQm90Il19-->
src: track cppgc wrappers with a list in Realm
This allows us to perform cleanups of cppgc wrappers that rely
on a living Realm during Realm shutdown. Otherwise
the cleanup may happen during object destruction, which can
be triggered by GC after Realm shutdown, leading to invalid
access to Realm.
The general pattern for this type of non-trivial destruction is
designed to be:
In addition, this allows us to trace external memory held by the wrappers
in the heap snapshots if we add synthethic edges between the wrappers
and other nodes in the embdder graph callback, or to perform snapshot
serialization for them.