feat(xsnap): enable gc() in the start compartment #2683
Merged
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.
Modify xsnap.c to add a
gc()
function to the globals of theinitial ("start") Compartment. This function should trigger an immediate,
synchronous, full GC sweep. As a non-standard global, the
gc()
functionwill be filtered out of the globals in all child Compartments by SES as
usual.
Note that this changes the snapshot format: heap snapshots written before
this change cannot be read by code after this change. This happens because
gc()
(which is implemented in C) is a new "callback" (a C function madeavailable to JS code), which is an "exit" from the reference graph. It must
be recognized during serialization, and re-attached during reload, and xsnap
cannot handle loading snapshots with a different set of exits, even purely
additive changes.
closes #2682
refs #2660
refs #2615