Skip to content

Memory region barrier may generate duplicate edges? #743

Open
@qinsoon

Description

@qinsoon

It seems memory region barrier does not log objects (possibly because it does not know object references).

#[inline(always)]
fn memory_region_copy_post(
&mut self,
src: <S::VM as VMBinding>::VMMemorySlice,
dst: <S::VM as VMBinding>::VMMemorySlice,
) {
self.semantics.memory_region_copy_slow(src, dst);
}

It is unlike object write barrier.

fn object_reference_write_slow(
&mut self,
src: ObjectReference,
slot: <S::VM as VMBinding>::VMEdge,
target: ObjectReference,
) {
if self.log_object(src) {
self.semantics
.object_reference_write_slow(src, slot, target);
}
}

That means we may push duplicate edges to ProcessModBuf through memory region barrier. This will cause our edge logger (enabled by extreme_assertions) check fail.

Metadata

Metadata

Assignees

No one assigned

    Labels

    A-planArea: PlanC-bugCategory: BugP-normalPriority: Normal.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions