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.