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

ruby-changes:16693

From: nari <ko1@a...>
Date: Tue, 20 Jul 2010 15:14:55 +0900 (JST)
Subject: [ruby-changes:16693] Ruby:r28689 (trunk): * gc.c: don't call after_gc_sweep() after when garbage_collect()

nari	2010-07-20 15:14:40 +0900 (Tue, 20 Jul 2010)

  New Revision: 28689

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

  Log:
    * gc.c: don't call after_gc_sweep() after when garbage_collect()
      was called, because rb_sweep_method_entry() free live unlinked
      method entries. [ruby-core:31169]

  Modified files:
    trunk/ChangeLog
    trunk/gc.c

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 28688)
+++ ChangeLog	(revision 28689)
@@ -1,3 +1,9 @@
+Tue Jul 20 14:21:38 2010  Narihiro Nakamura  <authorNari@g...>
+
+	* gc.c: don't call after_gc_sweep() after when garbage_collect()
+	  was called, because rb_sweep_method_entry() free live unlinked
+	  method entries. [ruby-core:31169]
+
 Tue Jul 20 12:42:06 2010  URABE Shyouhei  <shyouhei@r...>
 
 	* ext/socket/raddrinfo.c (rb_getaddrinfo): according to my
Index: gc.c
===================================================================
--- gc.c	(revision 28688)
+++ gc.c	(revision 28689)
@@ -2055,16 +2055,17 @@
     GC_PROF_TIMER_START;
     GC_PROF_SWEEP_TIMER_START;
 
-    res = lazy_sweep(objspace);
-    if (res) {
-        GC_PROF_SWEEP_TIMER_STOP;
-        GC_PROF_SET_MALLOC_INFO;
-        GC_PROF_TIMER_STOP(Qfalse);
-        return res;
+    if (objspace->heap.sweep_slots) {
+        res = lazy_sweep(objspace);
+        if (res) {
+            GC_PROF_SWEEP_TIMER_STOP;
+            GC_PROF_SET_MALLOC_INFO;
+            GC_PROF_TIMER_STOP(Qfalse);
+            return res;
+        }
+        after_gc_sweep(objspace);
     }
 
-    after_gc_sweep(objspace);
-
     gc_marks(objspace);
 
     before_gc_sweep(objspace);

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

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