[前][次][番号順一覧][スレッド一覧]

ruby-changes:4778

From: ko1@a...
Date: Fri, 2 May 2008 23:57:55 +0900 (JST)
Subject: [ruby-changes:4778] akr - Ruby:r16272 (trunk): * variable.c (rb_define_hooked_variable): guard *var from GC to

akr	2008-05-02 23:57:23 +0900 (Fri, 02 May 2008)

  New Revision: 16272

  Modified files:
    trunk/ChangeLog
    trunk/variable.c

  Log:
    * variable.c (rb_define_hooked_variable): guard *var from GC to
      prevent collecting argf under RUBY_DEBUG=gc_stress.


  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/variable.c?r1=16272&r2=16271&diff_format=u
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ChangeLog?r1=16272&r2=16271&diff_format=u

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 16271)
+++ ChangeLog	(revision 16272)
@@ -1,3 +1,8 @@
+Fri May  2 23:55:15 2008  Tanaka Akira  <akr@f...>
+
+	* variable.c (rb_define_hooked_variable): guard *var from GC to
+	  prevent collecting argf under RUBY_DEBUG=gc_stress.
+
 Fri May  2 17:29:59 2008  Yukihiro Matsumoto  <matz@r...>
 
 	* range.c (range_step): call to_int if step is not a numeric
Index: variable.c
===================================================================
--- variable.c	(revision 16271)
+++ variable.c	(revision 16272)
@@ -455,13 +455,20 @@
     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

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]