summaryrefslogtreecommitdiff
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
commitea850e3030dac8e054ba854ba8c4eea2a3c46f7d (patch)
tree4d4ef529e739c5568447882837dcab5e05974be5 /variable.c
parentc38487d06322cbe5eb5ee008e681fee6ec7363b4 (diff)
* variable.c (rb_generic_ivar_memsize): should not remove generic
instance variable table. git-svn-id: svn+ssh://ci.ruby-lang.org/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 1d8e4133c2..3bab278740 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);