summaryrefslogtreecommitdiffstats
path: root/variable.c
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-07-21 03:38:17 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-07-21 03:38:17 +0000
commit60f846bb47967c3aab5828a3bc3a200e39428eae (patch)
tree4d4ef529e739c5568447882837dcab5e05974be5 /variable.c
parent92bade722b1cd2b731302dca51d020a1f2b4e313 (diff)
downloadruby-60f846bb47967c3aab5828a3bc3a200e39428eae.tar.gz
ruby-60f846bb47967c3aab5828a3bc3a200e39428eae.tar.xz
ruby-60f846bb47967c3aab5828a3bc3a200e39428eae.zip
* variable.c (rb_generic_ivar_memsize): should not remove generic
instance variable table. git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@24215 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'variable.c')
-rw-r--r--variable.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/variable.c b/variable.c
index 1d8e4133c..3bab27874 100644
--- a/variable.c
+++ b/variable.c
@@ -908,10 +908,10 @@ rb_mark_generic_ivar_tbl(void)
void
rb_free_generic_ivar(VALUE obj)
{
- st_data_t tbl;
+ st_data_t key = (st_data_t)obj, tbl;
if (!generic_iv_tbl) return;
- if (st_delete(generic_iv_tbl, &obj, &tbl))
+ if (st_delete(generic_iv_tbl, &key, &tbl))
st_free_table((st_table *)tbl);
}
@@ -919,8 +919,8 @@ size_t
rb_generic_ivar_memsize(VALUE obj)
{
st_data_t tbl;
- if (st_delete(generic_iv_tbl, &obj, &tbl))
- return st_memsize((st_table *)tbl);
+ if (st_lookup(generic_iv_tbl, (st_data_t)obj, &tbl))
+ return st_memsize((st_table *)tbl);
return 0;
}
@@ -931,7 +931,7 @@ rb_copy_generic_ivar(VALUE clone, VALUE obj)
if (!generic_iv_tbl) return;
if (!FL_TEST(obj, FL_EXIVAR)) {
-clear:
+ clear:
if (FL_TEST(clone, FL_EXIVAR)) {
rb_free_generic_ivar(clone);
FL_UNSET(clone, FL_EXIVAR);