summaryrefslogtreecommitdiff
path: root/variable.c
diff options
context:
space:
mode:
authorakr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-05-02 14:57:23 +0000
committerakr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-05-02 14:57:23 +0000
commit3a0a3f4ea22b88286b835518d7ec5d2d5308f34a (patch)
tree6da770580272d7b4bbcd492654eddfdcc9856c66 /variable.c
parentf099a94afaa5a8e3871e7de8fa89c97ce016dd54 (diff)
* variable.c (rb_define_hooked_variable): guard *var from GC to
prevent collecting argf under RUBY_DEBUG=gc_stress. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@16272 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'variable.c')
-rw-r--r--variable.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/variable.c b/variable.c
index 154f0872b0..a935c51d3a 100644
--- a/variable.c
+++ b/variable.c
@@ -455,13 +455,20 @@ rb_define_hooked_variable(
void (*setter)(ANYARGS))
{
struct global_variable *gvar;
- ID id = global_id(name);
+ ID id;
+ VALUE tmp;
+
+ if (var)
+ tmp = *var;
+ id = global_id(name);
gvar = rb_global_entry(id)->var;
gvar->data = (void*)var;
gvar->getter = getter?getter:var_getter;
gvar->setter = setter?setter:var_setter;
gvar->marker = var_marker;
+
+ RB_GC_GUARD(tmp);
}
void