diff options
| author | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-05-02 14:57:23 +0000 |
|---|---|---|
| committer | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-05-02 14:57:23 +0000 |
| commit | 69a08148deb8249933abf5408ef47924b799359a (patch) | |
| tree | 6da770580272d7b4bbcd492654eddfdcc9856c66 /variable.c | |
| parent | 2470ac539348cbf6e6e13a39b270c21eebf7c7f9 (diff) | |
| download | ruby-69a08148deb8249933abf5408ef47924b799359a.tar.gz ruby-69a08148deb8249933abf5408ef47924b799359a.tar.xz ruby-69a08148deb8249933abf5408ef47924b799359a.zip | |
* variable.c (rb_define_hooked_variable): guard *var from GC to
prevent collecting argf under RUBY_DEBUG=gc_stress.
git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@16272 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'variable.c')
| -rw-r--r-- | variable.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/variable.c b/variable.c index 154f0872b..a935c51d3 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 |
