fix: delay JS environment release to prevent V8 global double free on exit #48377
+7
−1
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Description of Change
fixes: #47999
maybe fixes: #33041
This PR introduces a delayed release of the js_env to prevent double free issues with V8 global instances when Electron exits.
Currently, when closing an Electron window while certain asynchronous operations (such as
process.getProcessMemoryInfo()
) are active, a double free can occur in V8. The root cause is thatJavascriptEnvironment
is released before pendingPromiseBase
objects, which hold V8 global references, are properly disposed.This change ensures that the JS environment is released only after all asynchronous references have completed, preventing crashes related to premature disposal of V8 globals.
Motivation and Context
JavascriptEnvironment
before allPromiseBase
objects are freed.v8::internal::GlobalHandles::NodeSpace<NodeType>::Free()
.JavascriptEnvironment
ensures proper order of destruction, maintaining stability.Crash Reproduction:
In
main.js
, the following code reliably triggers the double free on exit:Checklist
npm test
passesRelease Notes
Notes: fix: delay JS environment release to prevent V8 global double free on exit