Skip to content

Sticky Immix is broken for mmtk-support-moving-upstream #283

@qinsoon

Description

@qinsoon

I am trying to get sticky immix working on our moving branch mmtk-support-moving-upstream, and observed the following bug:

  1. Create task X in the non-moving space
  2. X is added to all_tasks.
  3. Nursery GC happens.
  4. X is not in the nursery space, and is not traced. X is not marked.
  5. At the end of the GC, we sweep all_tasks by checking is_live() with MMTk. MMTk calls is_live() for the space. X is in the non-moving Immix space which decides liveness based on the mark. X is not marked, thus gets removed from all_tasks.
  6. New roots are pushed to X's shadow stack with no write barrier. So X is not in the mod buffer either.
  7. Nursery GC happens.
  8. X is not in all_tasks. We won't scan its shadow stack and the new roots will not be scanned properly.
  9. X is not in the nursery space, nor the mod buffer. So it not traced or scanned.
  10. New roots become dead.

I think the issue is that is_live() should not return false for X whose liveness is actually unknown. See mmtk/mmtk-core#1422

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions