summaryrefslogtreecommitdiff
path: root/variable.c
diff options
context:
space:
mode:
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