1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

* ext/objspace/object_tracing.c (newobj_i): skip class_path if class

is frozen.
  rb_class_path() can modify frozen classes (and causes errors).
  This patch is temporary. We need no-modification/no-allocation
  class path function.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43856 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
ko1 2013-11-26 10:26:41 +00:00
parent bd26be2b34
commit 8ca8d7afb3
2 changed files with 10 additions and 1 deletions

View file

@ -1,3 +1,12 @@
Tue Nov 26 19:17:47 2013 Koichi Sasada <ko1@atdot.net>
* ext/objspace/object_tracing.c (newobj_i): skip class_path if class
is frozen.
rb_class_path() can modify frozen classes (and causes errors).
This patch is temporary. We need no-modification/no-allocation
class path function.
Tue Nov 26 18:12:13 2013 Koichi Sasada <ko1@atdot.net>
* vm_trace.c: skip "exception check" and "reentrant check (only normal

View file

@ -81,7 +81,7 @@ newobj_i(VALUE tpval, void *data)
VALUE klass = rb_tracearg_defined_class(tparg);
struct allocation_info *info;
const char *path_cstr = RTEST(path) ? make_unique_str(arg->str_table, RSTRING_PTR(path), RSTRING_LEN(path)) : 0;
VALUE class_path = RTEST(klass) ? rb_class_path(klass) : Qnil;
VALUE class_path = (RTEST(klass) && !OBJ_FROZEN(klass)) ? rb_class_path(klass) : Qnil;
const char *class_path_cstr = RTEST(class_path) ? make_unique_str(arg->str_table, RSTRING_PTR(class_path), RSTRING_LEN(class_path)) : 0;
if (st_lookup(arg->object_table, (st_data_t)obj, (st_data_t *)&info)) {