diff options
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | parse.y | 8 |
2 files changed, 12 insertions, 1 deletions
@@ -1,3 +1,8 @@ +Tue Apr 1 08:58:39 2014 Kazuki Tsujimoto <kazuki@callcc.net> + + * parse.y (rb_str_dynamic_intern): set mark bit if dynamic symbol + is before sweeping. + Tue Apr 1 07:37:00 2014 NARUSE, Yui <naruse@ruby-lang.org> * addr2line.c (fill_lines): use dynsym, which is used for dynamic @@ -10705,7 +10705,13 @@ rb_str_dynamic_intern(VALUE str) ID id, type; if (st_lookup(global_symbols.sym_id, str, &id)) { - return ID2SYM(id); + VALUE sym = ID2SYM(id); + if (!STATIC_SYM_P(sym)) { + /* because of lazy sweep, dynamic symbol may be unmarked already and swept + * at next time */ + rb_gc_resurrect(sym); + } + return sym; } enc = rb_enc_get(str); |