From 0f51db6a1ee68ccab6a63e05578b4a737c21d97f Mon Sep 17 00:00:00 2001 From: ktsj Date: Tue, 29 Apr 2014 01:25:36 +0000 Subject: * parse.y (symbols_i): like r45492, call rb_gc_resurrect(). git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@45741 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 4 ++++ parse.y | 8 ++++++-- test/ruby/test_symbol.rb | 4 ++++ 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 25bc55117c..2e703e78b7 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +Tue Apr 29 10:21:38 2014 Kazuki Tsujimoto + + * parse.y (symbols_i): like r45492, call rb_gc_resurrect(). + Tue Apr 29 04:29:05 2014 Kazuhiro NISHIYAMA * file.c (HAVE_STRUCT_STATFS_T_F_FSTYPENAME): Add new macro for diff --git a/parse.y b/parse.y index 0ac1ef2708..290eb75f0f 100644 --- a/parse.y +++ b/parse.y @@ -10908,9 +10908,13 @@ rb_make_internal_id(void) } static int -symbols_i(VALUE sym, ID value, VALUE ary) +symbols_i(VALUE key, ID value, VALUE ary) { - rb_ary_push(ary, ID2SYM(value)); + VALUE sym = ID2SYM(value); + if (ID_DYNAMIC_SYM_P(value)) { + rb_gc_resurrect(sym); + } + rb_ary_push(ary, sym); return ST_CONTINUE; } diff --git a/test/ruby/test_symbol.rb b/test/ruby/test_symbol.rb index 0cc760ae00..49580b1342 100644 --- a/test/ruby/test_symbol.rb +++ b/test/ruby/test_symbol.rb @@ -232,5 +232,9 @@ class TestSymbol < Test::Unit::TestCase assert_normal_exit('".".intern;GC.start(immediate_sweep:false);eval %[GC.start;%i"."]', '', child_env: '--disable-gems') + assert_normal_exit('tap{".".intern};GC.start(immediate_sweep:false);' + + 'eval %[syms=Symbol.all_symbols;GC.start;syms.each(&:to_sym)]', + '', + child_env: '--disable-gems') end end -- cgit v1.2.3