зеркало из https://github.com/github/ruby.git
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:
Родитель
b4ab650e1a
Коммит
d3363a96df
|
@ -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)) {
|
||||
|
|
Загрузка…
Ссылка в новой задаче