object_tracing.c: fix allocation from NEWOBJ hook

* ext/objspace/object_tracing.c (newobj_i): use cached class path
  only to get rid object allocation during NEWOBJ hook.
  [ruby-core:58853] [Bug #9212]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@44088 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
nobu 2013-12-09 03:26:07 +00:00
Родитель b4ab650e1a
Коммит d3363a96df
2 изменённых файлов: 6 добавлений и 2 удалений

Просмотреть файл

@ -1,4 +1,8 @@
Mon Dec 9 12:25:32 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
Mon Dec 9 12:26:05 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
* ext/objspace/object_tracing.c (newobj_i): use cached class path
only to get rid object allocation during NEWOBJ hook.
[ruby-core:58853] [Bug #9212]
* variable.c (rb_class_path_cached): returns cached class path
only, without searching and allocating new class path string.

Просмотреть файл

@ -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) && !OBJ_FROZEN(klass)) ? rb_class_path(klass) : Qnil;
VALUE class_path = (RTEST(klass) && !OBJ_FROZEN(klass)) ? rb_class_path_cached(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)) {