mmtk / mmtk-core

Memory Management ToolKit
https://www.mmtk.io
Other
379 stars 69 forks source link

Fix a race between forwarding bits and VO bits. #1214

Closed wks closed 1 month ago

wks commented 1 month ago

The current code sets the forwarding bits before setting the VO bit when copying an object. If another GC worker is attempting to forward the same object, it may observe the forwarding bits being FORWARDED but the VO bit is not set. This violates the semantics of VO bits because VO bits should be set for both from-space and to-space copies. This will affect VM bindings that assert slots always refer to a valid object when scanning objects and may update the same slot multiple times for some reasons.

This revision provides a mechanism to ensure that all necessary metadata are set before setting forwarding bits to FORWARDED. Currently it affects the VO bits and the mark bits (which are used to update the VO bits in Immix-based plans). It may be used for other metadata introduced in the future.

qinsoon commented 1 month ago
error: cannot install package `cargo-msrv 0.16.2`, it requires rustc 1.78 or newer, while the currently active rustc version is 1.77.0
`cargo-msrv 0.1[6](https://github.com/mmtk/mmtk-core/actions/runs/11285882886/job/31389361498?pr=1214#step:5:7).0` supports rustc 1.76

Maybe we should pin to a specific cargo-msrv version before we bump our Rust toolchain version.