SASADA Koichi <ko1 / atdot.net> wrote: > (2014/08/31 0:18), Eric Wong wrote: > > Oops, forgot, I got backtraces on a clean build tree: > > > > http://80x24.org/r35240/rb-dump.txt > > http://80x24.org/r35240/gdb-bt.txt > > > > I ran "make check -j8 TESTS=-j8" in loop for a while. > > It is mysterious. All dynamic symbol should have fstr... It looks like SYM2ID/rb_sym2id interacts badly with dsymbol_check when it encounters garbage objects. dsymbol_check replaces an invalid object and returns a new object for the caller, but the original arg for SYM2ID remains usable to the caller: id = SYM2ID(garbage_sym); do_something(garbage_sym); /* bad invalid object used */ Changing: rb_sym2id(VALUE *) to rb_sym2id(VALUE *) might solve the issue, but introduces many incompatibilities in existing code: id = rb_sym2id(&garbage_sym); do_something(garbage_sym); /* id == garbage_sym, safe to use */ Maybe we should remark garbage objects instead of allocating replacements.