Skip to content

Commit f6686b5

Browse files
committed
* 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
1 parent f265ce7 commit f6686b5

File tree

2 files changed

+12
-1
lines changed

2 files changed

+12
-1
lines changed

ChangeLog

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
Tue Apr 1 08:58:39 2014 Kazuki Tsujimoto <[email protected]>
2+
3+
* parse.y (rb_str_dynamic_intern): set mark bit if dynamic symbol
4+
is before sweeping.
5+
16
Tue Apr 1 07:37:00 2014 NARUSE, Yui <[email protected]>
27

38
* addr2line.c (fill_lines): use dynsym, which is used for dynamic

parse.y

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10705,7 +10705,13 @@ rb_str_dynamic_intern(VALUE str)
1070510705
ID id, type;
1070610706

1070710707
if (st_lookup(global_symbols.sym_id, str, &id)) {
10708-
return ID2SYM(id);
10708+
VALUE sym = ID2SYM(id);
10709+
if (!STATIC_SYM_P(sym)) {
10710+
/* because of lazy sweep, dynamic symbol may be unmarked already and swept
10711+
* at next time */
10712+
rb_gc_resurrect(sym);
10713+
}
10714+
return sym;
1070910715
}
1071010716

1071110717
enc = rb_enc_get(str);

0 commit comments

Comments
 (0)