diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2018-09-07 03:16:12 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2018-09-07 03:16:12 +0000 |
commit | 4ff0ce6a79cda7b64e1c02fd530ee8b7426d98b0 (patch) | |
tree | c1444b8e943dc3f766885a1d6d11ec0a454f111e /ext | |
parent | 5b476b4ad0fd019900cd2310aed37a83176e9c7e (diff) |
ext/objspace/object_tracing.c: get rid of aliasing pointers
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@64650 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'ext')
-rw-r--r-- | ext/objspace/object_tracing.c | 26 |
1 files changed, 16 insertions, 10 deletions
diff --git a/ext/objspace/object_tracing.c b/ext/objspace/object_tracing.c index 611d059b9e..00b33caa79 100644 --- a/ext/objspace/object_tracing.c +++ b/ext/objspace/object_tracing.c @@ -39,7 +39,8 @@ make_unique_str(st_table *tbl, const char *str, long len) if (st_lookup(tbl, (st_data_t)str, &n)) { st_insert(tbl, (st_data_t)str, n+1); - st_get_key(tbl, (st_data_t)str, (st_data_t *)&result); + st_get_key(tbl, (st_data_t)str, &n); + result = (char *)n; } else { result = (char *)ruby_xmalloc(len+1); @@ -59,8 +60,9 @@ delete_unique_str(st_table *tbl, const char *str) st_lookup(tbl, (st_data_t)str, &n); if (n == 1) { - st_delete(tbl, (st_data_t *)&str, 0); - ruby_xfree((char *)str); + n = (st_data_t)str; + st_delete(tbl, &n, 0); + ruby_xfree((char *)n); } else { st_insert(tbl, (st_data_t)str, n-1); @@ -82,8 +84,10 @@ newobj_i(VALUE tpval, void *data) 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_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; + st_data_t v; - if (st_lookup(arg->object_table, (st_data_t)obj, (st_data_t *)&info)) { + if (st_lookup(arg->object_table, (st_data_t)obj, &v)) { + info = (struct allocation_info *)v; if (arg->keep_remains) { if (info->living) { /* do nothing. there is possibility to keep living if FREEOBJ events while suppressing tracing */ @@ -113,15 +117,17 @@ freeobj_i(VALUE tpval, void *data) { struct traceobj_arg *arg = (struct traceobj_arg *)data; rb_trace_arg_t *tparg = rb_tracearg_from_tracepoint(tpval); - VALUE obj = rb_tracearg_object(tparg); + st_data_t obj = (st_data_t)rb_tracearg_object(tparg); + st_data_t v; struct allocation_info *info; - if (st_lookup(arg->object_table, (st_data_t)obj, (st_data_t *)&info)) { + if (st_lookup(arg->object_table, obj, &v)) { + info = (struct allocation_info *)v; if (arg->keep_remains) { info->living = 0; } else { - st_delete(arg->object_table, (st_data_t *)&obj, (st_data_t *)&info); + st_delete(arg->object_table, &obj, &v); delete_unique_str(arg->str_table, info->path); delete_unique_str(arg->str_table, info->class_path); ruby_xfree(info); @@ -321,9 +327,9 @@ static struct allocation_info * lookup_allocation_info(VALUE obj) { if (tmp_trace_arg) { - struct allocation_info *info; - if (st_lookup(tmp_trace_arg->object_table, obj, (st_data_t *)&info)) { - return info; + st_data_t info; + if (st_lookup(tmp_trace_arg->object_table, obj, &info)) { + return (struct allocation_info *)info; } } return NULL; |