diff options
author | ktsj <ktsj@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2014-04-01 00:07:58 +0000 |
---|---|---|
committer | ktsj <ktsj@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2014-04-01 00:07:58 +0000 |
commit | f6686b51325dc039652555c6724d7c1c960dd242 (patch) | |
tree | 893e8afc899b86d1fef06df4dfff68861d181b8a | |
parent | f265ce708d975d32db295fc85c7e92d89c7f6d20 (diff) | |
download | ruby-f6686b51325dc039652555c6724d7c1c960dd242.tar.gz |
* parse.y (rb_str_dynamic_intern): set mark bit if dynamic symbol
is before sweeping.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@45492 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-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); |