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

ruby-changes:25951

From: ko1 <ko1@a...>
Date: Fri, 30 Nov 2012 07:51:59 +0900 (JST)
Subject: [ruby-changes:25951] ko1:r38008 (trunk): * vm_backtrace.c: add GC guards.

ko1	2012-11-30 07:35:09 +0900 (Fri, 30 Nov 2012)

  New Revision: 38008

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=38008

  Log:
    * vm_backtrace.c: add GC guards.

  Modified files:
    trunk/ChangeLog
    trunk/vm_backtrace.c

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 38007)
+++ ChangeLog	(revision 38008)
@@ -1,3 +1,7 @@
+Fri Nov 30 07:34:28 2012  Koichi Sasada  <ko1@a...>
+
+	* vm_backtrace.c: add GC guards.
+
 Fri Nov 30 07:21:33 2012  Koichi Sasada  <ko1@a...>
 
 	[EXPERIMENTAL: NEED DISCUSS]
Index: vm_backtrace.c
===================================================================
--- vm_backtrace.c	(revision 38007)
+++ vm_backtrace.c	(revision 38008)
@@ -499,6 +499,8 @@
 {
     rb_backtrace_t *bt;
     int size;
+    VALUE r;
+
     GetCoreDataFromValue(self, rb_backtrace_t, bt);
     size = bt->backtrace_size;
 
@@ -509,7 +511,9 @@
 	return Qnil;
     }
 
-    return backtrace_collect(bt, lev, n, location_to_str_dmyarg, 0);
+    r = backtrace_collect(bt, lev, n, location_to_str_dmyarg, 0);
+    RB_GC_GUARD_PTR(&self);
+    return r;
 }
 
 VALUE
@@ -542,6 +546,8 @@
 {
     rb_backtrace_t *bt;
     int size;
+    VALUE r;
+
     GetCoreDataFromValue(self, rb_backtrace_t, bt);
     size = bt->backtrace_size;
 
@@ -552,7 +558,9 @@
 	return Qnil;
     }
 
-    return backtrace_collect(bt, lev, n, location_create, (void *)self);
+    r = backtrace_collect(bt, lev, n, location_create, (void *)self);
+    RB_GC_GUARD_PTR(&self);
+    return r;
 }
 
 static VALUE
@@ -706,7 +714,9 @@
     VALUE level, vn;
     long lev, n;
     VALUE btval = backtrace_object(th);
+    VALUE r;
     rb_backtrace_t *bt;
+
     GetCoreDataFromValue(btval, rb_backtrace_t, bt);
 
     rb_scan_args(argc, argv, "02", &level, &vn);
@@ -755,11 +765,13 @@
     }
 
     if (to_str) {
-	return backtrace_to_str_ary(btval, lev, n);
+	r = backtrace_to_str_ary(btval, lev, n);
     }
     else {
-	return backtrace_to_location_ary(btval, lev, n);
+	r = backtrace_to_location_ary(btval, lev, n);
     }
+    RB_GC_GUARD_PTR(&btval);
+    return r;
 }
 
 static VALUE

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

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