Skip to content

"unreachable code: Block(0x20100ae8000) Marked" with Immix #114

Open
@wks

Description

@wks

The following crash happened when running CI tests with release build and the Immix plan. Link: https://github.com/mmtk/mmtk-ruby/actions/runs/11549564269/job/32142824795?pr=113#step:9:7498

  TestZlibInflate#test_recursive_inflate = 0.64 s = .
  TestGemPackageTarHeader#test_empty = 0.01 s = .
  TestGemPackageTarHeader#test_equals2 = 0.01 s = .
  TestZlibInflate#test_finish_chunked = 0.00 s = .
  thread '<unnamed>' panicked at /home/runner/.cargo/git/checkouts/mmtk-core-3306bdeb8eb4322b/618fde4/src/policy/immix/immixspace.rs:551:26:
  internal error: entered unreachable code: Block(0x20100ae8000) Marked
  stack backtrace:
     0: rust_begin_unwind
     1: core::panicking::panic_fmt
     2: mmtk::policy::immix::immixspace::ImmixSpace<VM>::get_reusable_block
     3: mmtk::util::alloc::immix_allocator::ImmixAllocator<VM>::acquire_recyclable_lines
     4: <mmtk::util::alloc::immix_allocator::ImmixAllocator<VM> as mmtk::util::alloc::allocator::Allocator<VM>>::alloc
  TestCoverage#test_coverage_snapshot = 0.10 s = .
  TestGemPackageTarHeader#test_to_s = 0.02 s = .
     5: rb_mmtk_alloc
               at ./../mmtk_support.c:464:20
     6: rb_mmtk_alloc_obj
               at ./../mmtk_support.c:512:18
     7: rb_mmtk_newobj_of_inner
               at ./../gc/default.c:2620:17
     8: rb_gc_impl_new_obj
               at ./../gc/default.c:2667:15
     9: newobj_of
               at ./../gc.c:919:17
    10: rb_wb_protected_newobj_of
               at ./../gc.c:946:12
    11: rb_ary_tmp_new_from_values
               at ./../array.c:976:11
    12: rb_ary_new_from_values
               at ./../array.c:988:12
    13: iseq_location
               at ./../proc.c:1345:12
    14: rb_proc_location
               at ./../proc.c:1365:12
    15: threadptr_invoke_proc_location
               at ./../thread.c:976:16
    16: threadptr_invoke_proc_location
               at ./../thread.c:973:1
    17: native_set_thread_name
               at ./../thread_pthread.c:2693:21
    18: thread_do_start
               at ./../thread.c:640:5
    19: thread_start_func_2
               at ./../thread.c:708:18
    20: call_thread_start_func_2
               at ./../thread_pthread.c:2180:5
    21: nt_start
               at ./../thread_pthread.c:2225:13
    22: <unknown>
    23: <unknown>
  note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.
  fatal runtime error: failed to initiate panic, error 5
  TestGemPackageTarHeader#test_update_checksum = 0.09 s = .
  TestGemPackageTarHeader#test_initialize_bad = 0.01 s = .
  TestGemPackageTarHeader#test_initialize = 0.01 s = .
  TestGemCommandsUnpackCommand#test_find_in_cache = 0.36 s = .
  TestCoverage#test_oneshot_line_coverage = 0.13 s = .
  running file: /home/runner/work/mmtk-ruby/mmtk-ruby/git/ruby/test/zlib/test_zlib.rb
  
  A test worker crashed. It might be an interpreter bug or
  a bug in test/unit/parallel.rb. Try again without the -j
  option.
  
  make: *** [uncommon.mk:965: yes-test-all] Error 1

In Immix, when a block is added into ImmixSpace::reusable_blocks during Block::sweep(), it is always set to BlockState::Reusable.

So far I have not been able to reproduce this bug locally. It may be related to the PR #113 I will try to restart the CI test to see if it can be reproduced on GitHub CI.

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