You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
fix(runtime): fence the dense subclass seqlock; specialize imported this-methods and proven Symbols (#8737)
Lands #8735, #8729 and #8731.
#8735 fixes a real data race in the dense-array subclass layout cache.
`cached_dense_layout` read two payload fields `Relaxed` and then rechecked
the sequence counter with an `Acquire` LOAD -- but an acquire load only
constrains what follows it, so on weakly ordered hardware the preceding
payload reads could sink past the recheck. A reader racing a colliding
publisher could then combine one field from the old layout with one from
the new and return a WRONG ELEMENT rather than faulting. A standalone
`fence(Acquire)` now sits between the payload reads and the recheck, which
is the canonical seqlock-reader form.
#8729 lowers strict equality against a proven Symbol to raw NaN-boxed
identity, keeping loose equality, reassigned locals and erased TypeScript
annotation claims on the semantic runtime helpers.
#8731 (fixes#8693) publishes producer-authoritative proven-`this` method
capabilities through imports, aliases and re-exports, emitting guarded
direct imported clone calls while retaining generic dispatch fallbacks.
A changelog fragment was added for #8735, which had neither one nor a
skip-changelog label.
No version bump.
Co-authored-by: Ralph Küpper <ralph@skelpo.com>
Fixed a data race in the dense-array subclass layout cache. `cached_dense_layout` read two payload fields with `Relaxed` ordering and then rechecked the sequence counter with an `Acquire` load — but an acquire *load* only constrains operations that follow it, so on weakly-ordered hardware the preceding payload reads could sink past the recheck. A reader racing a colliding publisher could then combine one field from the old layout with one from the new and return a wrong element value rather than faulting. A standalone `fence(Acquire)` now sits between the payload reads and the recheck, which is the canonical seqlock-reader form.
0 commit comments