Project

General

Profile

Actions

Bug #12492

closed

RUBY_DEBUG=gc_stress dumps core

Added by shyouhei (Shyouhei Urabe) over 8 years ago. Updated over 7 years ago.

Status:
Closed
Assignee:
-
Target version:
-
ruby -v:
ruby 2.4.0dev (2016-05-09 trunk 55419) [x86_64-darwin15]
[ruby-dev:49666]

Description

次のようにすると core を吐きます。

zsh % PATH="/usr/bin:$PATH" RUBY_DEBUG=gc_stress /usr/bin/lldb -- ./ruby -e 'p GC.stress'
(lldb) target create "./ruby"
Current executable set to './ruby' (x86_64).
(lldb) settings set -- target.run-args  "-e" "p GC.stress"
(lldb) run
Process 15385 launched: './ruby' (x86_64)
Process 15385 stopped
* thread #1: tid = 0x5a843, 0x00000001001b4dda ruby`rb_const_defined(klass=4320291960, id=3643) + 106 at variable.c:3082, queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=1, address=0x10)
    frame #0: 0x00000001001b4dda ruby`rb_const_defined(klass=4320291960, id=3643) + 106 at variable.c:3082
   3079 st_table *
   3080 rb_st_copy(VALUE obj, struct st_table *orig_tbl)
   3081 {
-> 3082     st_table *new_tbl = st_copy(orig_tbl);
   3083     st_foreach(new_tbl, tbl_copy_i, (st_data_t)obj);
   3084     return new_tbl;
   3085 }
(lldb) bt
* thread #1: tid = 0x5a843, 0x00000001001b4dda ruby`rb_const_defined(klass=4320291960, id=3643) + 106 at variable.c:3082, queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=1, address=0x10)
  * frame #0: 0x00000001001b4dda ruby`rb_const_defined(klass=4320291960, id=3643) + 106 at variable.c:3082
    frame #1: 0x000000010002d6b8 ruby`rb_define_module(name="Kernel") + 40 at class.c:773
    frame #2: 0x00000001000d4287 ruby`InitVM_Object + 263 at object.c:3407
    frame #3: 0x000000010009853d ruby`rb_call_inits + 29 at inits.c:23
    frame #4: 0x000000010006789b ruby`ruby_setup + 155 at eval.c:60
    frame #5: 0x0000000100067909 ruby`ruby_init + 9 at eval.c:76
    frame #6: 0x000000010021369d ruby`main(argc=<unavailable>, argv=<unavailable>) + 77 at main.c:35
    frame #7: 0x00007fff9c00f5ad libdyld.dylib`start + 1
    frame #8: 0x00007fff9c00f5ad libdyld.dylib`start + 1
(lldb)

ruby-dev:41536 が再発しているのではないでしょうか。


Related issues 1 (0 open1 closed)

Related to Ruby master - Bug #15288: RUBY_DEBUG=gc_stress dumps coreClosedko1 (Koichi Sasada)Actions

Updated by shyouhei (Shyouhei Urabe) over 8 years ago

なお当方の環境はgcc version 6.0.0 20160320 (experimental) (Homebrew gcc6 6-20160320)です。

Actions #2

Updated by nobu (Nobuyoshi Nakada) over 8 years ago

  • Status changed from Open to Closed

Applied in changeset r55429.


prevent rb_cObject from GC

  • class.c (Init_class_hierarchy): prevent rb_cObject which is the
    class tree root, from GC. [ruby-dev:49666] [Bug #12492]

Updated by usa (Usaku NAKAMURA) over 8 years ago

  • Backport changed from 2.1: UNKNOWN, 2.2: UNKNOWN, 2.3: UNKNOWN to 2.1: DONTNEED, 2.2: DONTNEED, 2.3: DONTNEED
Actions #4

Updated by shyouhei (Shyouhei Urabe) over 7 years ago

  • Backport changed from 2.1: DONTNEED, 2.2: DONTNEED, 2.3: DONTNEED to 2.1: REQUIRED, 2.2: REQUIRED, 2.3: REQUIRED

GCC 7が出ていたので試したところ再現したので、r55429 はバックポートが必要です。

% lldb -- miniruby -ve0
(lldb) target create "miniruby"
Current executable set to 'miniruby' (x86_64).
(lldb) settings set -- target.run-args  "-ve0"
(lldb) run
Process 49206 launched: 'miniruby' (x86_64)
Process 49206 stopped
* thread #1: tid = 0xee0d7, 0x00000001001b2f3a miniruby`rb_const_defined(klass=4317686760, id=3579) + 106 at variable.c:3067, queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=1, address=0x10)
    frame #0: 0x00000001001b2f3a miniruby`rb_const_defined(klass=4317686760, id=3579) + 106 at variable.c:3067
   3064 rb_const_entry_t *
   3065 rb_const_lookup(VALUE klass, ID id)
   3066 {
-> 3067     st_table *tbl = RCLASS_CONST_TBL(klass);
   3068     st_data_t val;
   3069
   3070     if (tbl && st_lookup(tbl, (st_data_t)id, &val)) {
(lldb) bt
* thread #1: tid = 0xee0d7, 0x00000001001b2f3a miniruby`rb_const_defined(klass=4317686760, id=3579) + 106 at variable.c:3067, queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=1, address=0x10)
  * frame #0: 0x00000001001b2f3a miniruby`rb_const_defined(klass=4317686760, id=3579) + 106 at variable.c:3067
    frame #1: 0x0000000100029358 miniruby`rb_define_module(name="Kernel") + 40 at class.c:771
    frame #2: 0x00000001000d3907 miniruby`InitVM_Object + 263 at object.c:3412
    frame #3: 0x000000010009523d miniruby`rb_call_inits + 29 at inits.c:23
    frame #4: 0x00000001000630ee miniruby`ruby_setup + 190 at eval.c:60
    frame #5: 0x0000000100063119 miniruby`ruby_init + 9 at eval.c:76
    frame #6: 0x0000000100210ead miniruby`main(argc=<unavailable>, argv=<unavailable>) + 77 at main.c:35
    frame #7: 0x00007fff972a35ad libdyld.dylib`start + 1
(lldb)

Updated by usa (Usaku NAKAMURA) over 7 years ago

  • Backport changed from 2.1: REQUIRED, 2.2: REQUIRED, 2.3: REQUIRED to 2.1: REQUIRED, 2.2: REQUIRED, 2.3: DONE

ruby_2_3 r59215 merged revision(s) 55429.

Actions #6

Updated by shyouhei (Shyouhei Urabe) about 6 years ago

  • Related to Bug #15288: RUBY_DEBUG=gc_stress dumps core added
Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0