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/