Skip to content

GC: publish provisional VM activation roots failure-atomically #787

Description

@chrisbbreuer

Parent: #786
Related: #477, #493

Audit finding

Interpreter.pushExecRoot currently discards gc_execs.append allocation errors. A failed root-list growth can therefore run bytecode without registering its precise roots. Separately, buildActivation installs callee state and performs argument/rest/parameter/debugger allocations before execLoop or runDriver registers its Exec. Saved caller state and newly prepared frame slots need precise ownership during that provisional window too.

This is a pre-existing publication/lifecycle issue found while fixing the stale saved caller copies in #786; it is not solved by moving those copies into Exec alone.

Scope and acceptance

  • Root registration propagates allocation failure before executing an unregistered activation.
  • Provisional activation preparation publishes all live managed caller/callee state before any allocation-recovery or observable call boundary.
  • Every error path restores the caller and unregisters/recycles exactly the records it owns, including tail replacement and driver-list growth failures.
  • Deterministic allocation-failure sweeps and moving-GC witnesses cover initial, inline, nested-driver, and tail-call entries.
  • Normal/TSan/OOM and required integration gates pass with no ignored allocation errors, pinning, disabled GC, or fallback.

Coordinate any activation-driver lifecycle changes with the actor handling stack/queue/job-native work; this issue must not change Promise, Worker, or iterator behavior.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions