[ruby-trunk - Bug #9069][Open] test_weakref.rb with GC.stress causes [BUG] rb_gc_mark(): 0x8024ee94

Issue #9069 has been reported by akr (Akira T.).


Bug #9069: test_weakref.rb with GC.stress causes [BUG] rb_gc_mark():
0x8024ee94 is T_ZOMBIE

Author: akr (Akira T.)
Status: Open
Priority: Normal
Assignee:
Category:
Target version:
ruby -v: ruby 2.1.0dev (2013-11-01 trunk 43497) [i686-linux]
Backport: 1.9.3: UNKNOWN, 2.0.0: UNKNOWN

気がついたのですが、GC.stress = true で test/test_weakref.rb を動かすと、
[BUG] rb_gc_mark(): 0x8024ee94 is T_ZOMBIE
というようなメッセージで異常終了することがあります。

たとえば、boron の ~akr/tst1 に install したものでは以下のようになりました。

boron% pwd
/home/akr/tst1/ruby
boron% ./ruby -e ‘GC.stress = true; load(“test/test_weakref.rb”)’
Run options:

Running tests:

[2/4] TestWeakRef#test_recycled = 1.02 s

  1. Failure:
    TestWeakRef#test_recycled [test/test_weakref.rb:20]:
    Exception raised:
    <#<WeakRef::RefError: Invalid Reference - probably recycled>>.

[3/4] TestWeakRef#test_ref/home/akr/tst1/lib/ruby/2.1.0/weakref.rb:84:
[BUG] rb_gc_mark(): 0x8024ee94 is T_ZOMBIE
ruby 2.1.0dev (2013-11-01 trunk 43497) [i686-linux]

– Control frame information

c:0028 p:---- s:0123 e:000122 CFUNC :===
c:0027 p:0011 s:0121 e:000119 METHOD
/home/akr/tst1/lib/ruby/2.1.0/weakref.rb:84 [FINISH]
c:0026 p:---- s:0116 e:000115 CFUNC :new
c:0025 p:0015 s:0112 e:000111 BLOCK test/test_weakref.rb:9 [FINISH]
c:0024 p:---- s:0110 e:000109 CFUNC :times
c:0023 p:0033 s:0107 e:000106 METHOD test/test_weakref.rb:9
c:0022 p:0007 s:0101 e:000100 METHOD test/test_weakref.rb:14
c:0021 p:0038 s:0096 e:000095 METHOD
/home/akr/tst1/lib/ruby/2.1.0/test/unit.rb:869
c:0020 p:0069 s:0091 e:000090 METHOD
/home/akr/tst1/lib/ruby/2.1.0/minitest/unit.rb:1265
c:0019 p:0019 s:0083 e:000082 METHOD
/home/akr/tst1/lib/ruby/2.1.0/test/unit/testcase.rb:17
c:0018 p:0068 s:0079 e:000078 BLOCK
/home/akr/tst1/lib/ruby/2.1.0/minitest/unit.rb:940 [FINISH]
c:0017 p:---- s:0073 e:000072 CFUNC :map
c:0016 p:0103 s:0070 e:000069 METHOD
/home/akr/tst1/lib/ruby/2.1.0/minitest/unit.rb:933
c:0015 p:0015 s:0060 e:000058 BLOCK
/home/akr/tst1/lib/ruby/2.1.0/test/unit.rb:663 [FINISH]
c:0014 p:---- s:0055 e:000054 CFUNC :each
c:0013 p:0067 s:0052 e:000051 METHOD
/home/akr/tst1/lib/ruby/2.1.0/test/unit.rb:661
c:0012 p:0135 s:0046 e:000045 METHOD
/home/akr/tst1/lib/ruby/2.1.0/minitest/unit.rb:884
c:0011 p:0009 s:0036 e:000035 METHOD
/home/akr/tst1/lib/ruby/2.1.0/minitest/unit.rb:1092
c:0010 p:0009 s:0033 e:000032 BLOCK
/home/akr/tst1/lib/ruby/2.1.0/minitest/unit.rb:1079 [FINISH]
c:0009 p:---- s:0030 e:000029 CFUNC :each
c:0008 p:0048 s:0027 e:000026 METHOD
/home/akr/tst1/lib/ruby/2.1.0/minitest/unit.rb:1078
c:0007 p:0017 s:0023 e:000022 METHOD
/home/akr/tst1/lib/ruby/2.1.0/minitest/unit.rb:1066
c:0006 p:0019 s:0019 e:000018 METHOD
/home/akr/tst1/lib/ruby/2.1.0/test/unit.rb:27
c:0005 p:0010 s:0015 e:000014 METHOD
/home/akr/tst1/lib/ruby/2.1.0/test/unit.rb:780
c:0004 p:0027 s:0010 e:000008 BLOCK
/home/akr/tst1/lib/ruby/2.1.0/test/unit.rb:372
c:0003 p:0031 s:0007 e:000006 METHOD
/home/akr/tst1/lib/ruby/2.1.0/test/unit.rb:33
c:0002 p:0024 s:0004 e:000003 BLOCK
/home/akr/tst1/lib/ruby/2.1.0/test/unit.rb:371 [FINISH]
c:0001 p:0000 s:0002 E:fffff04c TOP [FINISH]

/home/akr/tst1/lib/ruby/2.1.0/test/unit.rb:371:in block in autorun' /home/akr/tst1/lib/ruby/2.1.0/test/unit.rb:33:in run_once’
/home/akr/tst1/lib/ruby/2.1.0/test/unit.rb:372:in block (2 levels) in autorun' /home/akr/tst1/lib/ruby/2.1.0/test/unit.rb:780:in run’
/home/akr/tst1/lib/ruby/2.1.0/test/unit.rb:27:in run' /home/akr/tst1/lib/ruby/2.1.0/minitest/unit.rb:1066:in run’
/home/akr/tst1/lib/ruby/2.1.0/minitest/unit.rb:1078:in _run' /home/akr/tst1/lib/ruby/2.1.0/minitest/unit.rb:1078:in each’
/home/akr/tst1/lib/ruby/2.1.0/minitest/unit.rb:1079:in block in _run' /home/akr/tst1/lib/ruby/2.1.0/minitest/unit.rb:1092:in run_tests’
/home/akr/tst1/lib/ruby/2.1.0/minitest/unit.rb:884:in _run_anything' /home/akr/tst1/lib/ruby/2.1.0/test/unit.rb:661:in _run_suites’
/home/akr/tst1/lib/ruby/2.1.0/test/unit.rb:661:in each' /home/akr/tst1/lib/ruby/2.1.0/test/unit.rb:663:in block in _run_suites’
/home/akr/tst1/lib/ruby/2.1.0/minitest/unit.rb:933:in _run_suite' /home/akr/tst1/lib/ruby/2.1.0/minitest/unit.rb:933:in map’
/home/akr/tst1/lib/ruby/2.1.0/minitest/unit.rb:940:in block in _run_suite' /home/akr/tst1/lib/ruby/2.1.0/test/unit/testcase.rb:17:in run’
/home/akr/tst1/lib/ruby/2.1.0/minitest/unit.rb:1265:in run' /home/akr/tst1/lib/ruby/2.1.0/test/unit.rb:869:in run_test’
test/test_weakref.rb:14:in test_ref' test/test_weakref.rb:9:in make_weakref’
test/test_weakref.rb:9:in times' test/test_weakref.rb:9:in block in make_weakref’
test/test_weakref.rb:9:in new' /home/akr/tst1/lib/ruby/2.1.0/weakref.rb:84:in initialize’
/home/akr/tst1/lib/ruby/2.1.0/weakref.rb:84:in `===’

– C level backtrace information

-e: TestWeakRef#test_ref(+0x1463e7) [0x801463e7]
-e: TestWeakRef#test_ref(+0x1464d2) [0x801464d2]
-e: TestWeakRef#test_ref(+0x1972bd) [0x801972bd]
-e: TestWeakRef#test_ref(rb_bug+0x5f) [0x801973bb]
-e: TestWeakRef#test_ref(+0x30503) [0x80030503]
-e: TestWeakRef#test_ref(+0x305ad) [0x800305ad]
-e: TestWeakRef#test_ref(+0x30783) [0x80030783]
-e: TestWeakRef#test_ref(+0x3084a) [0x8003084a]
-e: TestWeakRef#test_ref(+0x308a9) [0x800308a9]
-e: TestWeakRef#test_ref(+0x3172b) [0x8003172b]
-e: TestWeakRef#test_ref(+0x31864) [0x80031864]
-e: TestWeakRef#test_ref(+0x2be55) [0x8002be55]
-e: TestWeakRef#test_ref(rb_newobj_of+0x30) [0x8002bfbd]
-e: TestWeakRef#test_ref(+0x15b54a) [0x8015b54a]
-e: TestWeakRef#test_ref(+0x15b642) [0x8015b642]
-e: TestWeakRef#test_ref(rb_ary_new_capa+0x29) [0x8015b677]
-e: TestWeakRef#test_ref(rb_ary_new_from_args+0x1d) [0x8015b6ae]
-e: TestWeakRef#test_ref(+0x2d3b6) [0x8002d3b6]
-e: TestWeakRef#test_ref(+0x2d565) [0x8002d565]
-e: TestWeakRef#test_ref(+0x2d59e) [0x8002d59e]
-e: TestWeakRef#test_ref(+0x2d634) [0x8002d634]
-e: TestWeakRef#test_ref(+0x2d675) [0x8002d675]
-e: TestWeakRef#test_ref(rb_postponed_job_flush+0xc9) [0x8014b953]
-e: TestWeakRef#test_ref(+0x15001b) [0x8015001b]
-e: TestWeakRef#test_ref(+0x13c934) [0x8013c934]
-e: TestWeakRef#test_ref(+0x13c214) [0x8013c214]
-e: TestWeakRef#test_ref(+0x13cbd1) [0x8013cbd1]
-e: TestWeakRef#test_ref(+0x13d57d) [0x8013d57d]
-e: TestWeakRef#test_ref(rb_funcall+0x9f) [0x8013dd3e]
-e: TestWeakRef#test_ref(rb_equal+0x43) [0x80061959]
-e: TestWeakRef#test_ref(+0x130491) [0x80130491]
-e: TestWeakRef#test_ref(+0x13c393) [0x8013c393]
-e: TestWeakRef#test_ref(+0x13c462) [0x8013c462]
-e: TestWeakRef#test_ref(+0x13c5aa) [0x8013c5aa]
-e: TestWeakRef#test_ref(+0x13c214) [0x8013c214]
-e: TestWeakRef#test_ref(+0x12f59a) [0x8012f59a]
-e: TestWeakRef#test_ref(+0x1346f5) [0x801346f5]
-e: TestWeakRef#test_ref(+0x142718) [0x80142718]
-e: TestWeakRef#test_ref(+0x13c58c) [0x8013c58c]
-e: TestWeakRef#test_ref(+0x13c214) [0x8013c214]
-e: TestWeakRef#test_ref(+0x13cbd1) [0x8013cbd1]
-e: TestWeakRef#test_ref(+0x13d57d) [0x8013d57d]
-e: TestWeakRef#test_ref(rb_funcallv+0x2e) [0x8013dd7f]
-e: TestWeakRef#test_ref(rb_obj_call_init+0x64) [0x8001cab3]
-e: TestWeakRef#test_ref(rb_class_new_instance+0x39) [0x800635fb]
-e: TestWeakRef#test_ref(+0x130462) [0x80130462]
-e: TestWeakRef#test_ref(+0x130e69) [0x80130e69]
-e: TestWeakRef#test_ref(+0x130f36) [0x80130f36]
-e: TestWeakRef#test_ref(+0x134fee) [0x80134fee]
-e: TestWeakRef#test_ref(+0x142718) [0x80142718]
-e: TestWeakRef#test_ref(+0x141294) [0x80141294]
-e: TestWeakRef#test_ref(+0x1413ca) [0x801413ca]
-e: TestWeakRef#test_ref(+0x13e02a) [0x8013e02a]
-e: TestWeakRef#test_ref(rb_yield+0x37) [0x8013e063]
-e: TestWeakRef#test_ref(+0x5fb83) [0x8005fb83]
-e: TestWeakRef#test_ref(+0x130475) [0x80130475]
-e: TestWeakRef#test_ref(+0x130e69) [0x80130e69]
-e: TestWeakRef#test_ref(+0x130f36) [0x80130f36]
-e: TestWeakRef#test_ref(+0x134f06) [0x80134f06]
-e: TestWeakRef#test_ref(+0x142718) [0x80142718]
-e: TestWeakRef#test_ref(+0x141294) [0x80141294]
-e: TestWeakRef#test_ref(+0x1413ca) [0x801413ca]
-e: TestWeakRef#test_ref(+0x13e02a) [0x8013e02a]
-e: TestWeakRef#test_ref(rb_yield+0x37) [0x8013e063]
-e: TestWeakRef#test_ref(+0x16136d) [0x8016136d]
-e: TestWeakRef#test_ref(+0x130475) [0x80130475]
-e: TestWeakRef#test_ref(+0x130e69) [0x80130e69]
-e: TestWeakRef#test_ref(+0x130f36) [0x80130f36]
-e: TestWeakRef#test_ref(+0x134f06) [0x80134f06]
-e: TestWeakRef#test_ref(+0x142718) [0x80142718]
-e: TestWeakRef#test_ref(+0x141294) [0x80141294]
-e: TestWeakRef#test_ref(+0x1413ca) [0x801413ca]
-e: TestWeakRef#test_ref(+0x13e02a) [0x8013e02a]
-e: TestWeakRef#test_ref(rb_yield+0x37) [0x8013e063]
-e: TestWeakRef#test_ref(rb_ary_each+0x90) [0x8015f1d8]
-e: TestWeakRef#test_ref(+0x130475) [0x80130475]
-e: TestWeakRef#test_ref(+0x130e69) [0x80130e69]
-e: TestWeakRef#test_ref(+0x130f36) [0x80130f36]
-e: TestWeakRef#test_ref(+0x1317ce) [0x801317ce]
-e: TestWeakRef#test_ref(+0x131dfc) [0x80131dfc]
-e: TestWeakRef#test_ref(+0x134f06) [0x80134f06]
-e: TestWeakRef#test_ref(+0x142718) [0x80142718]
-e: TestWeakRef#test_ref(+0x141294) [0x80141294]
-e: TestWeakRef#test_ref(+0x1413ca) [0x801413ca]
-e: TestWeakRef#test_ref(+0x13e02a) [0x8013e02a]
-e: TestWeakRef#test_ref(rb_yield+0x37) [0x8013e063]
-e: TestWeakRef#test_ref(rb_ary_each+0x90) [0x8015f1d8]
-e: TestWeakRef#test_ref(+0x130475) [0x80130475]
-e: TestWeakRef#test_ref(+0x130e69) [0x80130e69]
-e: TestWeakRef#test_ref(+0x130f36) [0x80130f36]
-e: TestWeakRef#test_ref(+0x1317ce) [0x801317ce]
-e: TestWeakRef#test_ref(+0x131dfc) [0x80131dfc]
-e: TestWeakRef#test_ref(+0x134f06) [0x80134f06]
-e: TestWeakRef#test_ref(+0x142718) [0x80142718]
-e: TestWeakRef#test_ref(+0x141294) [0x80141294]
-e: TestWeakRef#test_ref(+0x14148c) [0x8014148c]
-e: TestWeakRef#test_ref(+0x14151d) [0x8014151d]
-e: TestWeakRef#test_ref(rb_proc_call+0x80) [0x8001e3ec]
-e: TestWeakRef#test_ref(+0x1a016) [0x8001a016]
-e: TestWeakRef#test_ref(rb_exec_end_proc+0x185) [0x8001a2e0]
-e: TestWeakRef#test_ref(+0x1a5cf) [0x8001a5cf]
-e: TestWeakRef#test_ref(ruby_cleanup+0x158) [0x8001a778]
-e: TestWeakRef#test_ref(ruby_run_node+0x40) [0x8001aaec]
-e: TestWeakRef#test_ref(+0x1921a) [0x8001921a]
/lib/i686/nosegneg/libc.so.6(__libc_start_main+0xe6) [0xb7d45ca6]
libc-start.c:228
-e: TestWeakRef#test_ref(+0x190d1) [0x800190d1]

– Other runtime information

  • Loaded script: -e: TestWeakRef#test_ref

  • Loaded features:

    0 enumerator.so
    1 /home/akr/tst1/lib/ruby/2.1.0/i686-linux/enc/encdb.so
    2 /home/akr/tst1/lib/ruby/2.1.0/i686-linux/enc/trans/transdb.so
    3 /home/akr/tst1/lib/ruby/2.1.0/i686-linux/rbconfig.rb
    4 /home/akr/tst1/lib/ruby/2.1.0/rubygems/compatibility.rb
    5 /home/akr/tst1/lib/ruby/2.1.0/rubygems/defaults.rb
    6 /home/akr/tst1/lib/ruby/2.1.0/rubygems/deprecate.rb
    7 /home/akr/tst1/lib/ruby/2.1.0/rubygems/errors.rb
    8 /home/akr/tst1/lib/ruby/2.1.0/rubygems/version.rb
    9 /home/akr/tst1/lib/ruby/2.1.0/rubygems/requirement.rb
    10 /home/akr/tst1/lib/ruby/2.1.0/rubygems/platform.rb
    11 /home/akr/tst1/lib/ruby/2.1.0/rubygems/basic_specification.rb
    12 /home/akr/tst1/lib/ruby/2.1.0/rubygems/stub_specification.rb
    13 /home/akr/tst1/lib/ruby/2.1.0/rubygems/specification.rb
    14 /home/akr/tst1/lib/ruby/2.1.0/rubygems/exceptions.rb
    15 /home/akr/tst1/lib/ruby/2.1.0/rubygems/core_ext/kernel_gem.rb
    16 /home/akr/tst1/lib/ruby/2.1.0/thread.rb
    17 /home/akr/tst1/lib/ruby/2.1.0/monitor.rb
    18 /home/akr/tst1/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb
    19 /home/akr/tst1/lib/ruby/2.1.0/rubygems.rb
    20 /home/akr/tst1/lib/ruby/2.1.0/rubygems/dependency.rb
    21 /home/akr/tst1/lib/ruby/2.1.0/rubygems/path_support.rb
    22 /home/akr/tst1/lib/ruby/2.1.0/optparse.rb
    23 /home/akr/tst1/lib/ruby/2.1.0/minitest/unit.rb
    24 /home/akr/tst1/lib/ruby/2.1.0/prettyprint.rb
    25 /home/akr/tst1/lib/ruby/2.1.0/pp.rb
    26 /home/akr/tst1/lib/ruby/2.1.0/test/unit/assertions.rb
    27 /home/akr/tst1/lib/ruby/2.1.0/test/unit/testcase.rb
    28 /home/akr/tst1/lib/ruby/2.1.0/test/unit.rb
    29 /home/akr/tst1/lib/ruby/2.1.0/delegate.rb
    30 /home/akr/tst1/lib/ruby/2.1.0/weakref.rb
    31 /home/akr/tst1/lib/ruby/2.1.0/open3.rb
    32 /home/akr/tst1/lib/ruby/2.1.0/timeout.rb
    33 /home/akr/tst1/ruby/test/ruby/envutil.rb
    34 /home/akr/tst1/lib/ruby/2.1.0/i686-linux/io/console.so

  • Process memory map:

80000000-80225000 r-xp 00000000 ca:03 319812
/home/akr/tst1/ruby/ruby
80225000-80229000 rw-p 00225000 ca:03 319812
/home/akr/tst1/ruby/ruby
80229000-80594000 rw-p 80229000 00:00 0 [heap]
b7c7d000-b7c9a000 r-xp 00000000 ca:02 278530 /lib/libgcc_s.so.1
b7c9a000-b7c9b000 rw-p 0001c000 ca:02 278530 /lib/libgcc_s.so.1
b7ca8000-b7cab000 r-xp 00000000 ca:03 468021
/home/akr/tst1/lib/ruby/2.1.0/i686-linux/io/console.so
b7cab000-b7cac000 rw-p 00002000 ca:03 468021
/home/akr/tst1/lib/ruby/2.1.0/i686-linux/io/console.so
b7cac000-b7d2f000 rw-p b7cac000 00:00 0
b7d2f000-b7e72000 r-xp 00000000 ca:02 83914
/lib/i686/nosegneg/libc-2.11.3.so
b7e72000-b7e74000 r–p 00143000 ca:02 83914
/lib/i686/nosegneg/libc-2.11.3.so
b7e74000-b7e75000 rw-p 00145000 ca:02 83914
/lib/i686/nosegneg/libc-2.11.3.so
b7e75000-b7e78000 rw-p b7e75000 00:00 0
b7e78000-b7e9c000 r-xp 00000000 ca:02 83026
/lib/i686/nosegneg/libm-2.11.3.so
b7e9c000-b7e9d000 r–p 00023000 ca:02 83026
/lib/i686/nosegneg/libm-2.11.3.so
b7e9d000-b7e9e000 rw-p 00024000 ca:02 83026
/lib/i686/nosegneg/libm-2.11.3.so
b7e9e000-b7ea7000 r-xp 00000000 ca:02 83251
/lib/i686/nosegneg/libcrypt-2.11.3.so
b7ea7000-b7ea8000 r–p 00008000 ca:02 83251
/lib/i686/nosegneg/libcrypt-2.11.3.so
b7ea8000-b7ea9000 rw-p 00009000 ca:02 83251
/lib/i686/nosegneg/libcrypt-2.11.3.so
b7ea9000-b7ed0000 rw-p b7ea9000 00:00 0
b7ed0000-b7ed2000 r-xp 00000000 ca:02 83024
/lib/i686/nosegneg/libdl-2.11.3.so
b7ed2000-b7ed3000 r–p 00001000 ca:02 83024
/lib/i686/nosegneg/libdl-2.11.3.so
b7ed3000-b7ed4000 rw-p 00002000 ca:02 83024
/lib/i686/nosegneg/libdl-2.11.3.so
b7ed4000-b7ed5000 rw-p b7ed4000 00:00 0
b7ed5000-b7f32000 r-xp 00000000 ca:02 170351
/usr/lib/libgmp.so.3.5.2
b7f32000-b7f33000 rw-p 0005d000 ca:02 170351
/usr/lib/libgmp.so.3.5.2
b7f33000-b7f3a000 r-xp 00000000 ca:02 83913
/lib/i686/nosegneg/librt-2.11.3.so
b7f3a000-b7f3b000 r–p 00006000 ca:02 83913
/lib/i686/nosegneg/librt-2.11.3.so
b7f3b000-b7f3c000 rw-p 00007000 ca:02 83913
/lib/i686/nosegneg/librt-2.11.3.so
b7f3c000-b7f51000 r-xp 00000000 ca:02 83903
/lib/i686/nosegneg/libpthread-2.11.3.so
b7f51000-b7f52000 r–p 00014000 ca:02 83903
/lib/i686/nosegneg/libpthread-2.11.3.so
b7f52000-b7f53000 rw-p 00015000 ca:02 83903
/lib/i686/nosegneg/libpthread-2.11.3.so
b7f53000-b7f55000 rw-p b7f53000 00:00 0
b7f56000-b7f57000 rw-p b7f56000 00:00 0
b7f57000-b7f5a000 r-xp 00000000 ca:03 467993
/home/akr/tst1/lib/ruby/2.1.0/i686-linux/enc/trans/transdb.so
b7f5a000-b7f5b000 rw-p 00002000 ca:03 467993
/home/akr/tst1/lib/ruby/2.1.0/i686-linux/enc/trans/transdb.so
b7f5b000-b7f5d000 r-xp 00000000 ca:03 467962
/home/akr/tst1/lib/ruby/2.1.0/i686-linux/enc/encdb.so
b7f5d000-b7f5e000 rw-p 00001000 ca:03 467962
/home/akr/tst1/lib/ruby/2.1.0/i686-linux/enc/encdb.so
b7f5e000-b7f5f000 —p b7f5e000 00:00 0
b7f5f000-b7f66000 rw-p b7f5f000 00:00 0
b7f66000-b7f67000 r-xp b7f66000 00:00 0 [vdso]
b7f67000-b7f82000 r-xp 00000000 ca:02 278816 /lib/ld-2.11.3.so
b7f82000-b7f83000 r–p 0001b000 ca:02 278816 /lib/ld-2.11.3.so
b7f83000-b7f84000 rw-p 0001c000 ca:02 278816 /lib/ld-2.11.3.so
bfe6b000-bfe81000 rw-p bfe6b000 00:00 0 [stack]

[NOTE]
You may have encountered a bug in the Ruby interpreter or extension
libraries.
Bug reports are welcome.
For details: http://www.ruby-lang.org/bugreport.html

zsh: abort ./ruby -e ‘GC.stress = true;
load(“test/test_weakref.rb”)’

boron は以下のように Debian GNU/Linux 6.0.8 (squeeze) です。

boron% lsb_release -idrc
Distributor ID: Debian
Description: Debian GNU/Linux 6.0.8 (squeeze)
Release: 6.0.8
Codename: squeeze
boron% uname -mrsv
Linux 2.6.18-6-xen-686 #1 SMP Thu Nov 5 19:54:42 UTC 2009 i686

なお、この結果はあまり安定したものではないようで、異常終了しない環境もあります。

Issue #9069 has been updated by akr (Akira T.).

Status changed from Closed to Open

直っていないように思います。

boron% ./ruby -e ‘GC.stress = true; load(“test/test_weakref.rb”)’
Run options:

Running tests:

[2/4] TestWeakRef#test_recycled = 1.04 s

  1. Failure:
    TestWeakRef#test_recycled [test/test_weakref.rb:20]:
    Exception raised:
    <#<WeakRef::RefError: Invalid Reference - probably recycled>>.

[3/4] TestWeakRef#test_ref/home/akr/tst1/lib/ruby/2.1.0/weakref.rb:84:
[BUG] rb_gc_mark(): 0x8024eebc is T_ZOMBIE
ruby 2.1.0dev (2013-11-01 trunk 43504) [i686-linux]

– Control frame information

c:0028 p:---- s:0123 e:000122 CFUNC :===
c:0027 p:0011 s:0121 e:000119 METHOD
/home/akr/tst1/lib/ruby/2.1.0/weakref.rb:84 [FINISH]
c:0026 p:---- s:0116 e:000115 CFUNC :new
c:0025 p:0015 s:0112 e:000111 BLOCK test/test_weakref.rb:9 [FINISH]
c:0024 p:---- s:0110 e:000109 CFUNC :times
c:0023 p:0033 s:0107 e:000106 METHOD test/test_weakref.rb:9
c:0022 p:0007 s:0101 e:000100 METHOD test/test_weakref.rb:14
c:0021 p:0038 s:0096 e:000095 METHOD
/home/akr/tst1/lib/ruby/2.1.0/test/unit.rb:869
c:0020 p:0069 s:0091 e:000090 METHOD
/home/akr/tst1/lib/ruby/2.1.0/minitest/unit.rb:1265
c:0019 p:0019 s:0083 e:000082 METHOD
/home/akr/tst1/lib/ruby/2.1.0/test/unit/testcase.rb:17
c:0018 p:0068 s:0079 e:000078 BLOCK
/home/akr/tst1/lib/ruby/2.1.0/minitest/unit.rb:940 [FINISH]
c:0017 p:---- s:0073 e:000072 CFUNC :map
c:0016 p:0103 s:0070 e:000069 METHOD
/home/akr/tst1/lib/ruby/2.1.0/minitest/unit.rb:933
c:0015 p:0015 s:0060 e:000058 BLOCK
/home/akr/tst1/lib/ruby/2.1.0/test/unit.rb:663 [FINISH]
c:0014 p:---- s:0055 e:000054 CFUNC :each
c:0013 p:0067 s:0052 e:000051 METHOD
/home/akr/tst1/lib/ruby/2.1.0/test/unit.rb:661
c:0012 p:0135 s:0046 e:000045 METHOD
/home/akr/tst1/lib/ruby/2.1.0/minitest/unit.rb:884
c:0011 p:0009 s:0036 e:000035 METHOD
/home/akr/tst1/lib/ruby/2.1.0/minitest/unit.rb:1092
c:0010 p:0009 s:0033 e:000032 BLOCK
/home/akr/tst1/lib/ruby/2.1.0/minitest/unit.rb:1079 [FINISH]
c:0009 p:---- s:0030 e:000029 CFUNC :each
c:0008 p:0048 s:0027 e:000026 METHOD
/home/akr/tst1/lib/ruby/2.1.0/minitest/unit.rb:1078
c:0007 p:0017 s:0023 e:000022 METHOD
/home/akr/tst1/lib/ruby/2.1.0/minitest/unit.rb:1066
c:0006 p:0019 s:0019 e:000018 METHOD
/home/akr/tst1/lib/ruby/2.1.0/test/unit.rb:27
c:0005 p:0010 s:0015 e:000014 METHOD
/home/akr/tst1/lib/ruby/2.1.0/test/unit.rb:780
c:0004 p:0027 s:0010 e:000008 BLOCK
/home/akr/tst1/lib/ruby/2.1.0/test/unit.rb:372
c:0003 p:0031 s:0007 e:000006 METHOD
/home/akr/tst1/lib/ruby/2.1.0/test/unit.rb:33
c:0002 p:0024 s:0004 e:000003 BLOCK
/home/akr/tst1/lib/ruby/2.1.0/test/unit.rb:371 [FINISH]
c:0001 p:0000 s:0002 E:fffff04c TOP [FINISH]

/home/akr/tst1/lib/ruby/2.1.0/test/unit.rb:371:in block in autorun' /home/akr/tst1/lib/ruby/2.1.0/test/unit.rb:33:in run_once’
/home/akr/tst1/lib/ruby/2.1.0/test/unit.rb:372:in block (2 levels) in autorun' /home/akr/tst1/lib/ruby/2.1.0/test/unit.rb:780:in run’
/home/akr/tst1/lib/ruby/2.1.0/test/unit.rb:27:in run' /home/akr/tst1/lib/ruby/2.1.0/minitest/unit.rb:1066:in run’
/home/akr/tst1/lib/ruby/2.1.0/minitest/unit.rb:1078:in _run' /home/akr/tst1/lib/ruby/2.1.0/minitest/unit.rb:1078:in each’
/home/akr/tst1/lib/ruby/2.1.0/minitest/unit.rb:1079:in block in _run' /home/akr/tst1/lib/ruby/2.1.0/minitest/unit.rb:1092:in run_tests’
/home/akr/tst1/lib/ruby/2.1.0/minitest/unit.rb:884:in _run_anything' /home/akr/tst1/lib/ruby/2.1.0/test/unit.rb:661:in _run_suites’
/home/akr/tst1/lib/ruby/2.1.0/test/unit.rb:661:in each' /home/akr/tst1/lib/ruby/2.1.0/test/unit.rb:663:in block in _run_suites’
/home/akr/tst1/lib/ruby/2.1.0/minitest/unit.rb:933:in _run_suite' /home/akr/tst1/lib/ruby/2.1.0/minitest/unit.rb:933:in map’
/home/akr/tst1/lib/ruby/2.1.0/minitest/unit.rb:940:in block in _run_suite' /home/akr/tst1/lib/ruby/2.1.0/test/unit/testcase.rb:17:in run’
/home/akr/tst1/lib/ruby/2.1.0/minitest/unit.rb:1265:in run' /home/akr/tst1/lib/ruby/2.1.0/test/unit.rb:869:in run_test’
test/test_weakref.rb:14:in test_ref' test/test_weakref.rb:9:in make_weakref’
test/test_weakref.rb:9:in times' test/test_weakref.rb:9:in block in make_weakref’
test/test_weakref.rb:9:in new' /home/akr/tst1/lib/ruby/2.1.0/weakref.rb:84:in initialize’
/home/akr/tst1/lib/ruby/2.1.0/weakref.rb:84:in `===’

– C level backtrace information

-e: TestWeakRef#test_ref(+0x14642f) [0x8014642f]
-e: TestWeakRef#test_ref(+0x14651a) [0x8014651a]
-e: TestWeakRef#test_ref(+0x197305) [0x80197305]
-e: TestWeakRef#test_ref(rb_bug+0x5f) [0x80197403]
-e: TestWeakRef#test_ref(+0x30538) [0x80030538]
-e: TestWeakRef#test_ref(+0x305e2) [0x800305e2]
-e: TestWeakRef#test_ref(+0x307b8) [0x800307b8]
-e: TestWeakRef#test_ref(+0x3087f) [0x8003087f]
-e: TestWeakRef#test_ref(+0x308de) [0x800308de]
-e: TestWeakRef#test_ref(+0x31760) [0x80031760]
-e: TestWeakRef#test_ref(+0x31899) [0x80031899]
-e: TestWeakRef#test_ref(+0x2be85) [0x8002be85]
-e: TestWeakRef#test_ref(rb_newobj_of+0x30) [0x8002bfed]
-e: TestWeakRef#test_ref(+0x15b592) [0x8015b592]
-e: TestWeakRef#test_ref(+0x15b68a) [0x8015b68a]
-e: TestWeakRef#test_ref(rb_ary_new_capa+0x29) [0x8015b6bf]
-e: TestWeakRef#test_ref(rb_ary_new_from_args+0x1d) [0x8015b6f6]
-e: TestWeakRef#test_ref(+0x2d3e6) [0x8002d3e6]
-e: TestWeakRef#test_ref(+0x2d595) [0x8002d595]
-e: TestWeakRef#test_ref(+0x2d5ce) [0x8002d5ce]
-e: TestWeakRef#test_ref(+0x2d664) [0x8002d664]
-e: TestWeakRef#test_ref(+0x2d6a5) [0x8002d6a5]
-e: TestWeakRef#test_ref(rb_postponed_job_flush+0xc9) [0x8014b99b]
-e: TestWeakRef#test_ref(+0x150063) [0x80150063]
-e: TestWeakRef#test_ref(+0x13c97c) [0x8013c97c]
-e: TestWeakRef#test_ref(+0x13c25c) [0x8013c25c]
-e: TestWeakRef#test_ref(+0x13cc19) [0x8013cc19]
-e: TestWeakRef#test_ref(+0x13d5c5) [0x8013d5c5]
-e: TestWeakRef#test_ref(rb_funcall+0x9f) [0x8013dd86]
-e: TestWeakRef#test_ref(rb_equal+0x43) [0x8006198d]
-e: TestWeakRef#test_ref(+0x1304d9) [0x801304d9]
-e: TestWeakRef#test_ref(+0x13c3db) [0x8013c3db]
-e: TestWeakRef#test_ref(+0x13c4aa) [0x8013c4aa]
-e: TestWeakRef#test_ref(+0x13c5f2) [0x8013c5f2]
-e: TestWeakRef#test_ref(+0x13c25c) [0x8013c25c]
-e: TestWeakRef#test_ref(+0x12f5e2) [0x8012f5e2]
-e: TestWeakRef#test_ref(+0x13473d) [0x8013473d]
-e: TestWeakRef#test_ref(+0x142760) [0x80142760]
-e: TestWeakRef#test_ref(+0x13c5d4) [0x8013c5d4]
-e: TestWeakRef#test_ref(+0x13c25c) [0x8013c25c]
-e: TestWeakRef#test_ref(+0x13cc19) [0x8013cc19]
-e: TestWeakRef#test_ref(+0x13d5c5) [0x8013d5c5]
-e: TestWeakRef#test_ref(rb_funcallv+0x2e) [0x8013ddc7]
-e: TestWeakRef#test_ref(rb_obj_call_init+0x64) [0x8001cae3]
-e: TestWeakRef#test_ref(rb_class_new_instance+0x39) [0x8006362f]
-e: TestWeakRef#test_ref(+0x1304aa) [0x801304aa]
-e: TestWeakRef#test_ref(+0x130eb1) [0x80130eb1]
-e: TestWeakRef#test_ref(+0x130f7e) [0x80130f7e]
-e: TestWeakRef#test_ref(+0x135036) [0x80135036]
-e: TestWeakRef#test_ref(+0x142760) [0x80142760]
-e: TestWeakRef#test_ref(+0x1412dc) [0x801412dc]
-e: TestWeakRef#test_ref(+0x141412) [0x80141412]
-e: TestWeakRef#test_ref(+0x13e072) [0x8013e072]
-e: TestWeakRef#test_ref(rb_yield+0x37) [0x8013e0ab]
-e: TestWeakRef#test_ref(+0x5fbb7) [0x8005fbb7]
-e: TestWeakRef#test_ref(+0x1304bd) [0x801304bd]
-e: TestWeakRef#test_ref(+0x130eb1) [0x80130eb1]
-e: TestWeakRef#test_ref(+0x130f7e) [0x80130f7e]
-e: TestWeakRef#test_ref(+0x134f4e) [0x80134f4e]
-e: TestWeakRef#test_ref(+0x142760) [0x80142760]
-e: TestWeakRef#test_ref(+0x1412dc) [0x801412dc]
-e: TestWeakRef#test_ref(+0x141412) [0x80141412]
-e: TestWeakRef#test_ref(+0x13e072) [0x8013e072]
-e: TestWeakRef#test_ref(rb_yield+0x37) [0x8013e0ab]
-e: TestWeakRef#test_ref(+0x1613b5) [0x801613b5]
-e: TestWeakRef#test_ref(+0x1304bd) [0x801304bd]
-e: TestWeakRef#test_ref(+0x130eb1) [0x80130eb1]
-e: TestWeakRef#test_ref(+0x130f7e) [0x80130f7e]
-e: TestWeakRef#test_ref(+0x134f4e) [0x80134f4e]
-e: TestWeakRef#test_ref(+0x142760) [0x80142760]
-e: TestWeakRef#test_ref(+0x1412dc) [0x801412dc]
-e: TestWeakRef#test_ref(+0x141412) [0x80141412]
-e: TestWeakRef#test_ref(+0x13e072) [0x8013e072]
-e: TestWeakRef#test_ref(rb_yield+0x37) [0x8013e0ab]
-e: TestWeakRef#test_ref(rb_ary_each+0x90) [0x8015f220]
-e: TestWeakRef#test_ref(+0x1304bd) [0x801304bd]
-e: TestWeakRef#test_ref(+0x130eb1) [0x80130eb1]
-e: TestWeakRef#test_ref(+0x130f7e) [0x80130f7e]
-e: TestWeakRef#test_ref(+0x131816) [0x80131816]
-e: TestWeakRef#test_ref(+0x131e44) [0x80131e44]
-e: TestWeakRef#test_ref(+0x134f4e) [0x80134f4e]
-e: TestWeakRef#test_ref(+0x142760) [0x80142760]
-e: TestWeakRef#test_ref(+0x1412dc) [0x801412dc]
-e: TestWeakRef#test_ref(+0x141412) [0x80141412]
-e: TestWeakRef#test_ref(+0x13e072) [0x8013e072]
-e: TestWeakRef#test_ref(rb_yield+0x37) [0x8013e0ab]
-e: TestWeakRef#test_ref(rb_ary_each+0x90) [0x8015f220]
-e: TestWeakRef#test_ref(+0x1304bd) [0x801304bd]
-e: TestWeakRef#test_ref(+0x130eb1) [0x80130eb1]
-e: TestWeakRef#test_ref(+0x130f7e) [0x80130f7e]
-e: TestWeakRef#test_ref(+0x131816) [0x80131816]
-e: TestWeakRef#test_ref(+0x131e44) [0x80131e44]
-e: TestWeakRef#test_ref(+0x134f4e) [0x80134f4e]
-e: TestWeakRef#test_ref(+0x142760) [0x80142760]
-e: TestWeakRef#test_ref(+0x1412dc) [0x801412dc]
-e: TestWeakRef#test_ref(+0x1414d4) [0x801414d4]
-e: TestWeakRef#test_ref(+0x141565) [0x80141565]
-e: TestWeakRef#test_ref(rb_proc_call+0x80) [0x8001e41c]
-e: TestWeakRef#test_ref(+0x1a046) [0x8001a046]
-e: TestWeakRef#test_ref(rb_exec_end_proc+0x185) [0x8001a310]
-e: TestWeakRef#test_ref(+0x1a5ff) [0x8001a5ff]
-e: TestWeakRef#test_ref(ruby_cleanup+0x158) [0x8001a7a8]
-e: TestWeakRef#test_ref(ruby_run_node+0x40) [0x8001ab1c]
-e: TestWeakRef#test_ref(+0x1924a) [0x8001924a]
/lib/i686/nosegneg/libc.so.6(__libc_start_main+0xe6) [0xb7d28ca6]
libc-start.c:228
-e: TestWeakRef#test_ref(+0x19101) [0x80019101]

– Other runtime information

  • Loaded script: -e: TestWeakRef#test_ref

  • Loaded features:

    0 enumerator.so
    1 /home/akr/tst1/lib/ruby/2.1.0/i686-linux/enc/encdb.so
    2 /home/akr/tst1/lib/ruby/2.1.0/i686-linux/enc/trans/transdb.so
    3 /home/akr/tst1/lib/ruby/2.1.0/i686-linux/rbconfig.rb
    4 /home/akr/tst1/lib/ruby/2.1.0/rubygems/compatibility.rb
    5 /home/akr/tst1/lib/ruby/2.1.0/rubygems/defaults.rb
    6 /home/akr/tst1/lib/ruby/2.1.0/rubygems/deprecate.rb
    7 /home/akr/tst1/lib/ruby/2.1.0/rubygems/errors.rb
    8 /home/akr/tst1/lib/ruby/2.1.0/rubygems/version.rb
    9 /home/akr/tst1/lib/ruby/2.1.0/rubygems/requirement.rb
    10 /home/akr/tst1/lib/ruby/2.1.0/rubygems/platform.rb
    11 /home/akr/tst1/lib/ruby/2.1.0/rubygems/basic_specification.rb
    12 /home/akr/tst1/lib/ruby/2.1.0/rubygems/stub_specification.rb
    13 /home/akr/tst1/lib/ruby/2.1.0/rubygems/specification.rb
    14 /home/akr/tst1/lib/ruby/2.1.0/rubygems/exceptions.rb
    15 /home/akr/tst1/lib/ruby/2.1.0/rubygems/core_ext/kernel_gem.rb
    16 /home/akr/tst1/lib/ruby/2.1.0/thread.rb
    17 /home/akr/tst1/lib/ruby/2.1.0/monitor.rb
    18 /home/akr/tst1/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb
    19 /home/akr/tst1/lib/ruby/2.1.0/rubygems.rb
    20 /home/akr/tst1/lib/ruby/2.1.0/rubygems/dependency.rb
    21 /home/akr/tst1/lib/ruby/2.1.0/rubygems/path_support.rb
    22 /home/akr/tst1/lib/ruby/2.1.0/optparse.rb
    23 /home/akr/tst1/lib/ruby/2.1.0/minitest/unit.rb
    24 /home/akr/tst1/lib/ruby/2.1.0/prettyprint.rb
    25 /home/akr/tst1/lib/ruby/2.1.0/pp.rb
    26 /home/akr/tst1/lib/ruby/2.1.0/test/unit/assertions.rb
    27 /home/akr/tst1/lib/ruby/2.1.0/test/unit/testcase.rb
    28 /home/akr/tst1/lib/ruby/2.1.0/test/unit.rb
    29 /home/akr/tst1/lib/ruby/2.1.0/delegate.rb
    30 /home/akr/tst1/lib/ruby/2.1.0/weakref.rb
    31 /home/akr/tst1/lib/ruby/2.1.0/open3.rb
    32 /home/akr/tst1/lib/ruby/2.1.0/timeout.rb
    33 /home/akr/tst1/ruby/test/ruby/envutil.rb
    34 /home/akr/tst1/lib/ruby/2.1.0/i686-linux/io/console.so

  • Process memory map:

80000000-80225000 r-xp 00000000 ca:03 319808
/home/akr/tst1/ruby/ruby
80225000-80229000 rw-p 00225000 ca:03 319808
/home/akr/tst1/ruby/ruby
80229000-80594000 rw-p 80229000 00:00 0 [heap]
b7c60000-b7c7d000 r-xp 00000000 ca:02 278530 /lib/libgcc_s.so.1
b7c7d000-b7c7e000 rw-p 0001c000 ca:02 278530 /lib/libgcc_s.so.1
b7c8b000-b7c8e000 r-xp 00000000 ca:03 468021
/home/akr/tst1/lib/ruby/2.1.0/i686-linux/io/console.so
b7c8e000-b7c8f000 rw-p 00002000 ca:03 468021
/home/akr/tst1/lib/ruby/2.1.0/i686-linux/io/console.so
b7c8f000-b7d12000 rw-p b7c8f000 00:00 0
b7d12000-b7e55000 r-xp 00000000 ca:02 83914
/lib/i686/nosegneg/libc-2.11.3.so
b7e55000-b7e57000 r–p 00143000 ca:02 83914
/lib/i686/nosegneg/libc-2.11.3.so
b7e57000-b7e58000 rw-p 00145000 ca:02 83914
/lib/i686/nosegneg/libc-2.11.3.so
b7e58000-b7e5b000 rw-p b7e58000 00:00 0
b7e5b000-b7e7f000 r-xp 00000000 ca:02 83026
/lib/i686/nosegneg/libm-2.11.3.so
b7e7f000-b7e80000 r–p 00023000 ca:02 83026
/lib/i686/nosegneg/libm-2.11.3.so
b7e80000-b7e81000 rw-p 00024000 ca:02 83026
/lib/i686/nosegneg/libm-2.11.3.so
b7e81000-b7e8a000 r-xp 00000000 ca:02 83251
/lib/i686/nosegneg/libcrypt-2.11.3.so
b7e8a000-b7e8b000 r–p 00008000 ca:02 83251
/lib/i686/nosegneg/libcrypt-2.11.3.so
b7e8b000-b7e8c000 rw-p 00009000 ca:02 83251
/lib/i686/nosegneg/libcrypt-2.11.3.so
b7e8c000-b7eb3000 rw-p b7e8c000 00:00 0
b7eb3000-b7eb5000 r-xp 00000000 ca:02 83024
/lib/i686/nosegneg/libdl-2.11.3.so
b7eb5000-b7eb6000 r–p 00001000 ca:02 83024
/lib/i686/nosegneg/libdl-2.11.3.so
b7eb6000-b7eb7000 rw-p 00002000 ca:02 83024
/lib/i686/nosegneg/libdl-2.11.3.so
b7eb7000-b7eb8000 rw-p b7eb7000 00:00 0
b7eb8000-b7f15000 r-xp 00000000 ca:02 170351
/usr/lib/libgmp.so.3.5.2
b7f15000-b7f16000 rw-p 0005d000 ca:02 170351
/usr/lib/libgmp.so.3.5.2
b7f16000-b7f1d000 r-xp 00000000 ca:02 83913
/lib/i686/nosegneg/librt-2.11.3.so
b7f1d000-b7f1e000 r–p 00006000 ca:02 83913
/lib/i686/nosegneg/librt-2.11.3.so
b7f1e000-b7f1f000 rw-p 00007000 ca:02 83913
/lib/i686/nosegneg/librt-2.11.3.so
b7f1f000-b7f34000 r-xp 00000000 ca:02 83903
/lib/i686/nosegneg/libpthread-2.11.3.so
b7f34000-b7f35000 r–p 00014000 ca:02 83903
/lib/i686/nosegneg/libpthread-2.11.3.so
b7f35000-b7f36000 rw-p 00015000 ca:02 83903
/lib/i686/nosegneg/libpthread-2.11.3.so
b7f36000-b7f38000 rw-p b7f36000 00:00 0
b7f39000-b7f3a000 rw-p b7f39000 00:00 0
b7f3a000-b7f3d000 r-xp 00000000 ca:03 467993
/home/akr/tst1/lib/ruby/2.1.0/i686-linux/enc/trans/transdb.so
b7f3d000-b7f3e000 rw-p 00002000 ca:03 467993
/home/akr/tst1/lib/ruby/2.1.0/i686-linux/enc/trans/transdb.so
b7f3e000-b7f40000 r-xp 00000000 ca:03 467962
/home/akr/tst1/lib/ruby/2.1.0/i686-linux/enc/encdb.so
b7f40000-b7f41000 rw-p 00001000 ca:03 467962
/home/akr/tst1/lib/ruby/2.1.0/i686-linux/enc/encdb.so
b7f41000-b7f42000 —p b7f41000 00:00 0
b7f42000-b7f49000 rw-p b7f42000 00:00 0
b7f49000-b7f4a000 r-xp b7f49000 00:00 0 [vdso]
b7f4a000-b7f65000 r-xp 00000000 ca:02 278816 /lib/ld-2.11.3.so
b7f65000-b7f66000 r–p 0001b000 ca:02 278816 /lib/ld-2.11.3.so
b7f66000-b7f67000 rw-p 0001c000 ca:02 278816 /lib/ld-2.11.3.so
bfd9e000-bfdb4000 rw-p bfd9e000 00:00 0 [stack]

[NOTE]
You may have encountered a bug in the Ruby interpreter or extension
libraries.
Bug reports are welcome.
For details: http://www.ruby-lang.org/bugreport.html

zsh: abort ./ruby -e ‘GC.stress = true;
load(“test/test_weakref.rb”)’


Bug #9069: test_weakref.rb with GC.stress causes [BUG] rb_gc_mark():
0x8024ee94 is T_ZOMBIE

Author: akr (Akira T.)
Status: Open
Priority: Normal
Assignee:
Category:
Target version:
ruby -v: ruby 2.1.0dev (2013-11-01 trunk 43497) [i686-linux]
Backport: 1.9.3: UNKNOWN, 2.0.0: UNKNOWN

気がついたのですが、GC.stress = true で test/test_weakref.rb を動かすと、
[BUG] rb_gc_mark(): 0x8024ee94 is T_ZOMBIE
というようなメッセージで異常終了することがあります。

たとえば、boron の ~akr/tst1 に install したものでは以下のようになりました。

boron% pwd
/home/akr/tst1/ruby
boron% ./ruby -e ‘GC.stress = true; load(“test/test_weakref.rb”)’
Run options:

Running tests:

[2/4] TestWeakRef#test_recycled = 1.02 s

  1. Failure:
    TestWeakRef#test_recycled [test/test_weakref.rb:20]:
    Exception raised:
    <#<WeakRef::RefError: Invalid Reference - probably recycled>>.

[3/4] TestWeakRef#test_ref/home/akr/tst1/lib/ruby/2.1.0/weakref.rb:84:
[BUG] rb_gc_mark(): 0x8024ee94 is T_ZOMBIE
ruby 2.1.0dev (2013-11-01 trunk 43497) [i686-linux]

– Control frame information

c:0028 p:---- s:0123 e:000122 CFUNC :===
c:0027 p:0011 s:0121 e:000119 METHOD
/home/akr/tst1/lib/ruby/2.1.0/weakref.rb:84 [FINISH]
c:0026 p:---- s:0116 e:000115 CFUNC :new
c:0025 p:0015 s:0112 e:000111 BLOCK test/test_weakref.rb:9 [FINISH]
c:0024 p:---- s:0110 e:000109 CFUNC :times
c:0023 p:0033 s:0107 e:000106 METHOD test/test_weakref.rb:9
c:0022 p:0007 s:0101 e:000100 METHOD test/test_weakref.rb:14
c:0021 p:0038 s:0096 e:000095 METHOD
/home/akr/tst1/lib/ruby/2.1.0/test/unit.rb:869
c:0020 p:0069 s:0091 e:000090 METHOD
/home/akr/tst1/lib/ruby/2.1.0/minitest/unit.rb:1265
c:0019 p:0019 s:0083 e:000082 METHOD
/home/akr/tst1/lib/ruby/2.1.0/test/unit/testcase.rb:17
c:0018 p:0068 s:0079 e:000078 BLOCK
/home/akr/tst1/lib/ruby/2.1.0/minitest/unit.rb:940 [FINISH]
c:0017 p:---- s:0073 e:000072 CFUNC :map
c:0016 p:0103 s:0070 e:000069 METHOD
/home/akr/tst1/lib/ruby/2.1.0/minitest/unit.rb:933
c:0015 p:0015 s:0060 e:000058 BLOCK
/home/akr/tst1/lib/ruby/2.1.0/test/unit.rb:663 [FINISH]
c:0014 p:---- s:0055 e:000054 CFUNC :each
c:0013 p:0067 s:0052 e:000051 METHOD
/home/akr/tst1/lib/ruby/2.1.0/test/unit.rb:661
c:0012 p:0135 s:0046 e:000045 METHOD
/home/akr/tst1/lib/ruby/2.1.0/minitest/unit.rb:884
c:0011 p:0009 s:0036 e:000035 METHOD
/home/akr/tst1/lib/ruby/2.1.0/minitest/unit.rb:1092
c:0010 p:0009 s:0033 e:000032 BLOCK
/home/akr/tst1/lib/ruby/2.1.0/minitest/unit.rb:1079 [FINISH]
c:0009 p:---- s:0030 e:000029 CFUNC :each
c:0008 p:0048 s:0027 e:000026 METHOD
/home/akr/tst1/lib/ruby/2.1.0/minitest/unit.rb:1078
c:0007 p:0017 s:0023 e:000022 METHOD
/home/akr/tst1/lib/ruby/2.1.0/minitest/unit.rb:1066
c:0006 p:0019 s:0019 e:000018 METHOD
/home/akr/tst1/lib/ruby/2.1.0/test/unit.rb:27
c:0005 p:0010 s:0015 e:000014 METHOD
/home/akr/tst1/lib/ruby/2.1.0/test/unit.rb:780
c:0004 p:0027 s:0010 e:000008 BLOCK
/home/akr/tst1/lib/ruby/2.1.0/test/unit.rb:372
c:0003 p:0031 s:0007 e:000006 METHOD
/home/akr/tst1/lib/ruby/2.1.0/test/unit.rb:33
c:0002 p:0024 s:0004 e:000003 BLOCK
/home/akr/tst1/lib/ruby/2.1.0/test/unit.rb:371 [FINISH]
c:0001 p:0000 s:0002 E:fffff04c TOP [FINISH]

/home/akr/tst1/lib/ruby/2.1.0/test/unit.rb:371:in block in autorun' /home/akr/tst1/lib/ruby/2.1.0/test/unit.rb:33:in run_once’
/home/akr/tst1/lib/ruby/2.1.0/test/unit.rb:372:in block (2 levels) in autorun' /home/akr/tst1/lib/ruby/2.1.0/test/unit.rb:780:in run’
/home/akr/tst1/lib/ruby/2.1.0/test/unit.rb:27:in run' /home/akr/tst1/lib/ruby/2.1.0/minitest/unit.rb:1066:in run’
/home/akr/tst1/lib/ruby/2.1.0/minitest/unit.rb:1078:in _run' /home/akr/tst1/lib/ruby/2.1.0/minitest/unit.rb:1078:in each’
/home/akr/tst1/lib/ruby/2.1.0/minitest/unit.rb:1079:in block in _run' /home/akr/tst1/lib/ruby/2.1.0/minitest/unit.rb:1092:in run_tests’
/home/akr/tst1/lib/ruby/2.1.0/minitest/unit.rb:884:in _run_anything' /home/akr/tst1/lib/ruby/2.1.0/test/unit.rb:661:in _run_suites’
/home/akr/tst1/lib/ruby/2.1.0/test/unit.rb:661:in each' /home/akr/tst1/lib/ruby/2.1.0/test/unit.rb:663:in block in _run_suites’
/home/akr/tst1/lib/ruby/2.1.0/minitest/unit.rb:933:in _run_suite' /home/akr/tst1/lib/ruby/2.1.0/minitest/unit.rb:933:in map’
/home/akr/tst1/lib/ruby/2.1.0/minitest/unit.rb:940:in block in _run_suite' /home/akr/tst1/lib/ruby/2.1.0/test/unit/testcase.rb:17:in run’
/home/akr/tst1/lib/ruby/2.1.0/minitest/unit.rb:1265:in run' /home/akr/tst1/lib/ruby/2.1.0/test/unit.rb:869:in run_test’
test/test_weakref.rb:14:in test_ref' test/test_weakref.rb:9:in make_weakref’
test/test_weakref.rb:9:in times' test/test_weakref.rb:9:in block in make_weakref’
test/test_weakref.rb:9:in new' /home/akr/tst1/lib/ruby/2.1.0/weakref.rb:84:in initialize’
/home/akr/tst1/lib/ruby/2.1.0/weakref.rb:84:in `===’

– C level backtrace information

-e: TestWeakRef#test_ref(+0x1463e7) [0x801463e7]
-e: TestWeakRef#test_ref(+0x1464d2) [0x801464d2]
-e: TestWeakRef#test_ref(+0x1972bd) [0x801972bd]
-e: TestWeakRef#test_ref(rb_bug+0x5f) [0x801973bb]
-e: TestWeakRef#test_ref(+0x30503) [0x80030503]
-e: TestWeakRef#test_ref(+0x305ad) [0x800305ad]
-e: TestWeakRef#test_ref(+0x30783) [0x80030783]
-e: TestWeakRef#test_ref(+0x3084a) [0x8003084a]
-e: TestWeakRef#test_ref(+0x308a9) [0x800308a9]
-e: TestWeakRef#test_ref(+0x3172b) [0x8003172b]
-e: TestWeakRef#test_ref(+0x31864) [0x80031864]
-e: TestWeakRef#test_ref(+0x2be55) [0x8002be55]
-e: TestWeakRef#test_ref(rb_newobj_of+0x30) [0x8002bfbd]
-e: TestWeakRef#test_ref(+0x15b54a) [0x8015b54a]
-e: TestWeakRef#test_ref(+0x15b642) [0x8015b642]
-e: TestWeakRef#test_ref(rb_ary_new_capa+0x29) [0x8015b677]
-e: TestWeakRef#test_ref(rb_ary_new_from_args+0x1d) [0x8015b6ae]
-e: TestWeakRef#test_ref(+0x2d3b6) [0x8002d3b6]
-e: TestWeakRef#test_ref(+0x2d565) [0x8002d565]
-e: TestWeakRef#test_ref(+0x2d59e) [0x8002d59e]
-e: TestWeakRef#test_ref(+0x2d634) [0x8002d634]
-e: TestWeakRef#test_ref(+0x2d675) [0x8002d675]
-e: TestWeakRef#test_ref(rb_postponed_job_flush+0xc9) [0x8014b953]
-e: TestWeakRef#test_ref(+0x15001b) [0x8015001b]
-e: TestWeakRef#test_ref(+0x13c934) [0x8013c934]
-e: TestWeakRef#test_ref(+0x13c214) [0x8013c214]
-e: TestWeakRef#test_ref(+0x13cbd1) [0x8013cbd1]
-e: TestWeakRef#test_ref(+0x13d57d) [0x8013d57d]
-e: TestWeakRef#test_ref(rb_funcall+0x9f) [0x8013dd3e]
-e: TestWeakRef#test_ref(rb_equal+0x43) [0x80061959]
-e: TestWeakRef#test_ref(+0x130491) [0x80130491]
-e: TestWeakRef#test_ref(+0x13c393) [0x8013c393]
-e: TestWeakRef#test_ref(+0x13c462) [0x8013c462]
-e: TestWeakRef#test_ref(+0x13c5aa) [0x8013c5aa]
-e: TestWeakRef#test_ref(+0x13c214) [0x8013c214]
-e: TestWeakRef#test_ref(+0x12f59a) [0x8012f59a]
-e: TestWeakRef#test_ref(+0x1346f5) [0x801346f5]
-e: TestWeakRef#test_ref(+0x142718) [0x80142718]
-e: TestWeakRef#test_ref(+0x13c58c) [0x8013c58c]
-e: TestWeakRef#test_ref(+0x13c214) [0x8013c214]
-e: TestWeakRef#test_ref(+0x13cbd1) [0x8013cbd1]
-e: TestWeakRef#test_ref(+0x13d57d) [0x8013d57d]
-e: TestWeakRef#test_ref(rb_funcallv+0x2e) [0x8013dd7f]
-e: TestWeakRef#test_ref(rb_obj_call_init+0x64) [0x8001cab3]
-e: TestWeakRef#test_ref(rb_class_new_instance+0x39) [0x800635fb]
-e: TestWeakRef#test_ref(+0x130462) [0x80130462]
-e: TestWeakRef#test_ref(+0x130e69) [0x80130e69]
-e: TestWeakRef#test_ref(+0x130f36) [0x80130f36]
-e: TestWeakRef#test_ref(+0x134fee) [0x80134fee]
-e: TestWeakRef#test_ref(+0x142718) [0x80142718]
-e: TestWeakRef#test_ref(+0x141294) [0x80141294]
-e: TestWeakRef#test_ref(+0x1413ca) [0x801413ca]
-e: TestWeakRef#test_ref(+0x13e02a) [0x8013e02a]
-e: TestWeakRef#test_ref(rb_yield+0x37) [0x8013e063]
-e: TestWeakRef#test_ref(+0x5fb83) [0x8005fb83]
-e: TestWeakRef#test_ref(+0x130475) [0x80130475]
-e: TestWeakRef#test_ref(+0x130e69) [0x80130e69]
-e: TestWeakRef#test_ref(+0x130f36) [0x80130f36]
-e: TestWeakRef#test_ref(+0x134f06) [0x80134f06]
-e: TestWeakRef#test_ref(+0x142718) [0x80142718]
-e: TestWeakRef#test_ref(+0x141294) [0x80141294]
-e: TestWeakRef#test_ref(+0x1413ca) [0x801413ca]
-e: TestWeakRef#test_ref(+0x13e02a) [0x8013e02a]
-e: TestWeakRef#test_ref(rb_yield+0x37) [0x8013e063]
-e: TestWeakRef#test_ref(+0x16136d) [0x8016136d]
-e: TestWeakRef#test_ref(+0x130475) [0x80130475]
-e: TestWeakRef#test_ref(+0x130e69) [0x80130e69]
-e: TestWeakRef#test_ref(+0x130f36) [0x80130f36]
-e: TestWeakRef#test_ref(+0x134f06) [0x80134f06]
-e: TestWeakRef#test_ref(+0x142718) [0x80142718]
-e: TestWeakRef#test_ref(+0x141294) [0x80141294]
-e: TestWeakRef#test_ref(+0x1413ca) [0x801413ca]
-e: TestWeakRef#test_ref(+0x13e02a) [0x8013e02a]
-e: TestWeakRef#test_ref(rb_yield+0x37) [0x8013e063]
-e: TestWeakRef#test_ref(rb_ary_each+0x90) [0x8015f1d8]
-e: TestWeakRef#test_ref(+0x130475) [0x80130475]
-e: TestWeakRef#test_ref(+0x130e69) [0x80130e69]
-e: TestWeakRef#test_ref(+0x130f36) [0x80130f36]
-e: TestWeakRef#test_ref(+0x1317ce) [0x801317ce]
-e: TestWeakRef#test_ref(+0x131dfc) [0x80131dfc]
-e: TestWeakRef#test_ref(+0x134f06) [0x80134f06]
-e: TestWeakRef#test_ref(+0x142718) [0x80142718]
-e: TestWeakRef#test_ref(+0x141294) [0x80141294]
-e: TestWeakRef#test_ref(+0x1413ca) [0x801413ca]
-e: TestWeakRef#test_ref(+0x13e02a) [0x8013e02a]
-e: TestWeakRef#test_ref(rb_yield+0x37) [0x8013e063]
-e: TestWeakRef#test_ref(rb_ary_each+0x90) [0x8015f1d8]
-e: TestWeakRef#test_ref(+0x130475) [0x80130475]
-e: TestWeakRef#test_ref(+0x130e69) [0x80130e69]
-e: TestWeakRef#test_ref(+0x130f36) [0x80130f36]
-e: TestWeakRef#test_ref(+0x1317ce) [0x801317ce]
-e: TestWeakRef#test_ref(+0x131dfc) [0x80131dfc]
-e: TestWeakRef#test_ref(+0x134f06) [0x80134f06]
-e: TestWeakRef#test_ref(+0x142718) [0x80142718]
-e: TestWeakRef#test_ref(+0x141294) [0x80141294]
-e: TestWeakRef#test_ref(+0x14148c) [0x8014148c]
-e: TestWeakRef#test_ref(+0x14151d) [0x8014151d]
-e: TestWeakRef#test_ref(rb_proc_call+0x80) [0x8001e3ec]
-e: TestWeakRef#test_ref(+0x1a016) [0x8001a016]
-e: TestWeakRef#test_ref(rb_exec_end_proc+0x185) [0x8001a2e0]
-e: TestWeakRef#test_ref(+0x1a5cf) [0x8001a5cf]
-e: TestWeakRef#test_ref(ruby_cleanup+0x158) [0x8001a778]
-e: TestWeakRef#test_ref(ruby_run_node+0x40) [0x8001aaec]
-e: TestWeakRef#test_ref(+0x1921a) [0x8001921a]
/lib/i686/nosegneg/libc.so.6(__libc_start_main+0xe6) [0xb7d45ca6]
libc-start.c:228
-e: TestWeakRef#test_ref(+0x190d1) [0x800190d1]

– Other runtime information

  • Loaded script: -e: TestWeakRef#test_ref

  • Loaded features:

    0 enumerator.so
    1 /home/akr/tst1/lib/ruby/2.1.0/i686-linux/enc/encdb.so
    2 /home/akr/tst1/lib/ruby/2.1.0/i686-linux/enc/trans/transdb.so
    3 /home/akr/tst1/lib/ruby/2.1.0/i686-linux/rbconfig.rb
    4 /home/akr/tst1/lib/ruby/2.1.0/rubygems/compatibility.rb
    5 /home/akr/tst1/lib/ruby/2.1.0/rubygems/defaults.rb
    6 /home/akr/tst1/lib/ruby/2.1.0/rubygems/deprecate.rb
    7 /home/akr/tst1/lib/ruby/2.1.0/rubygems/errors.rb
    8 /home/akr/tst1/lib/ruby/2.1.0/rubygems/version.rb
    9 /home/akr/tst1/lib/ruby/2.1.0/rubygems/requirement.rb
    10 /home/akr/tst1/lib/ruby/2.1.0/rubygems/platform.rb
    11 /home/akr/tst1/lib/ruby/2.1.0/rubygems/basic_specification.rb
    12 /home/akr/tst1/lib/ruby/2.1.0/rubygems/stub_specification.rb
    13 /home/akr/tst1/lib/ruby/2.1.0/rubygems/specification.rb
    14 /home/akr/tst1/lib/ruby/2.1.0/rubygems/exceptions.rb
    15 /home/akr/tst1/lib/ruby/2.1.0/rubygems/core_ext/kernel_gem.rb
    16 /home/akr/tst1/lib/ruby/2.1.0/thread.rb
    17 /home/akr/tst1/lib/ruby/2.1.0/monitor.rb
    18 /home/akr/tst1/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb
    19 /home/akr/tst1/lib/ruby/2.1.0/rubygems.rb
    20 /home/akr/tst1/lib/ruby/2.1.0/rubygems/dependency.rb
    21 /home/akr/tst1/lib/ruby/2.1.0/rubygems/path_support.rb
    22 /home/akr/tst1/lib/ruby/2.1.0/optparse.rb
    23 /home/akr/tst1/lib/ruby/2.1.0/minitest/unit.rb
    24 /home/akr/tst1/lib/ruby/2.1.0/prettyprint.rb
    25 /home/akr/tst1/lib/ruby/2.1.0/pp.rb
    26 /home/akr/tst1/lib/ruby/2.1.0/test/unit/assertions.rb
    27 /home/akr/tst1/lib/ruby/2.1.0/test/unit/testcase.rb
    28 /home/akr/tst1/lib/ruby/2.1.0/test/unit.rb
    29 /home/akr/tst1/lib/ruby/2.1.0/delegate.rb
    30 /home/akr/tst1/lib/ruby/2.1.0/weakref.rb
    31 /home/akr/tst1/lib/ruby/2.1.0/open3.rb
    32 /home/akr/tst1/lib/ruby/2.1.0/timeout.rb
    33 /home/akr/tst1/ruby/test/ruby/envutil.rb
    34 /home/akr/tst1/lib/ruby/2.1.0/i686-linux/io/console.so

  • Process memory map:

80000000-80225000 r-xp 00000000 ca:03 319812
/home/akr/tst1/ruby/ruby
80225000-80229000 rw-p 00225000 ca:03 319812
/home/akr/tst1/ruby/ruby
80229000-80594000 rw-p 80229000 00:00 0 [heap]
b7c7d000-b7c9a000 r-xp 00000000 ca:02 278530 /lib/libgcc_s.so.1
b7c9a000-b7c9b000 rw-p 0001c000 ca:02 278530 /lib/libgcc_s.so.1
b7ca8000-b7cab000 r-xp 00000000 ca:03 468021
/home/akr/tst1/lib/ruby/2.1.0/i686-linux/io/console.so
b7cab000-b7cac000 rw-p 00002000 ca:03 468021
/home/akr/tst1/lib/ruby/2.1.0/i686-linux/io/console.so
b7cac000-b7d2f000 rw-p b7cac000 00:00 0
b7d2f000-b7e72000 r-xp 00000000 ca:02 83914
/lib/i686/nosegneg/libc-2.11.3.so
b7e72000-b7e74000 r–p 00143000 ca:02 83914
/lib/i686/nosegneg/libc-2.11.3.so
b7e74000-b7e75000 rw-p 00145000 ca:02 83914
/lib/i686/nosegneg/libc-2.11.3.so
b7e75000-b7e78000 rw-p b7e75000 00:00 0
b7e78000-b7e9c000 r-xp 00000000 ca:02 83026
/lib/i686/nosegneg/libm-2.11.3.so
b7e9c000-b7e9d000 r–p 00023000 ca:02 83026
/lib/i686/nosegneg/libm-2.11.3.so
b7e9d000-b7e9e000 rw-p 00024000 ca:02 83026
/lib/i686/nosegneg/libm-2.11.3.so
b7e9e000-b7ea7000 r-xp 00000000 ca:02 83251
/lib/i686/nosegneg/libcrypt-2.11.3.so
b7ea7000-b7ea8000 r–p 00008000 ca:02 83251
/lib/i686/nosegneg/libcrypt-2.11.3.so
b7ea8000-b7ea9000 rw-p 00009000 ca:02 83251
/lib/i686/nosegneg/libcrypt-2.11.3.so
b7ea9000-b7ed0000 rw-p b7ea9000 00:00 0
b7ed0000-b7ed2000 r-xp 00000000 ca:02 83024
/lib/i686/nosegneg/libdl-2.11.3.so
b7ed2000-b7ed3000 r–p 00001000 ca:02 83024
/lib/i686/nosegneg/libdl-2.11.3.so
b7ed3000-b7ed4000 rw-p 00002000 ca:02 83024
/lib/i686/nosegneg/libdl-2.11.3.so
b7ed4000-b7ed5000 rw-p b7ed4000 00:00 0
b7ed5000-b7f32000 r-xp 00000000 ca:02 170351
/usr/lib/libgmp.so.3.5.2
b7f32000-b7f33000 rw-p 0005d000 ca:02 170351
/usr/lib/libgmp.so.3.5.2
b7f33000-b7f3a000 r-xp 00000000 ca:02 83913
/lib/i686/nosegneg/librt-2.11.3.so
b7f3a000-b7f3b000 r–p 00006000 ca:02 83913
/lib/i686/nosegneg/librt-2.11.3.so
b7f3b000-b7f3c000 rw-p 00007000 ca:02 83913
/lib/i686/nosegneg/librt-2.11.3.so
b7f3c000-b7f51000 r-xp 00000000 ca:02 83903
/lib/i686/nosegneg/libpthread-2.11.3.so
b7f51000-b7f52000 r–p 00014000 ca:02 83903
/lib/i686/nosegneg/libpthread-2.11.3.so
b7f52000-b7f53000 rw-p 00015000 ca:02 83903
/lib/i686/nosegneg/libpthread-2.11.3.so
b7f53000-b7f55000 rw-p b7f53000 00:00 0
b7f56000-b7f57000 rw-p b7f56000 00:00 0
b7f57000-b7f5a000 r-xp 00000000 ca:03 467993
/home/akr/tst1/lib/ruby/2.1.0/i686-linux/enc/trans/transdb.so
b7f5a000-b7f5b000 rw-p 00002000 ca:03 467993
/home/akr/tst1/lib/ruby/2.1.0/i686-linux/enc/trans/transdb.so
b7f5b000-b7f5d000 r-xp 00000000 ca:03 467962
/home/akr/tst1/lib/ruby/2.1.0/i686-linux/enc/encdb.so
b7f5d000-b7f5e000 rw-p 00001000 ca:03 467962
/home/akr/tst1/lib/ruby/2.1.0/i686-linux/enc/encdb.so
b7f5e000-b7f5f000 —p b7f5e000 00:00 0
b7f5f000-b7f66000 rw-p b7f5f000 00:00 0
b7f66000-b7f67000 r-xp b7f66000 00:00 0 [vdso]
b7f67000-b7f82000 r-xp 00000000 ca:02 278816 /lib/ld-2.11.3.so
b7f82000-b7f83000 r–p 0001b000 ca:02 278816 /lib/ld-2.11.3.so
b7f83000-b7f84000 rw-p 0001c000 ca:02 278816 /lib/ld-2.11.3.so
bfe6b000-bfe81000 rw-p bfe6b000 00:00 0 [stack]

[NOTE]
You may have encountered a bug in the Ruby interpreter or extension
libraries.
Bug reports are welcome.
For details: http://www.ruby-lang.org/bugreport.html

zsh: abort ./ruby -e ‘GC.stress = true;
load(“test/test_weakref.rb”)’

boron は以下のように Debian GNU/Linux 6.0.8 (squeeze) です。

boron% lsb_release -idrc
Distributor ID: Debian
Description: Debian GNU/Linux 6.0.8 (squeeze)
Release: 6.0.8
Codename: squeeze
boron% uname -mrsv
Linux 2.6.18-6-xen-686 #1 SMP Thu Nov 5 19:54:42 UTC 2009 i686

なお、この結果はあまり安定したものではないようで、異常終了しない環境もあります。