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

ruby-changes:7066

From: ko1 <ko1@a...>
Date: Wed, 13 Aug 2008 19:44:57 +0900 (JST)
Subject: [ruby-changes:7066] Ruby:r18584 (trunk): * gc.c: count only freed object as freelist size.

ko1	2008-08-13 19:42:57 +0900 (Wed, 13 Aug 2008)

  New Revision: 18584

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

  Log:
    * gc.c: count only freed object as freelist size.

  Modified files:
    trunk/ChangeLog
    trunk/gc.c

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 18583)
+++ ChangeLog	(revision 18584)
@@ -1,3 +1,7 @@
+Wed Aug 13 19:40:12 2008  Koichi Sasada  <ko1@a...>
+
+	* gc.c: count only freed object as freelist size.
+
 Wed Aug 13 18:34:22 2008  Shugo Maeda  <shugo@r...>
 
         * marshal.c (marshal_load): set arg.untrust properly.
Index: gc.c
===================================================================
--- gc.c	(revision 18583)
+++ gc.c	(revision 18584)
@@ -1636,7 +1636,7 @@
     final_list = deferred_final_list;
     deferred_final_list = 0;
     for (i = 0; i < heaps_used; i++) {
-	int n = 0;
+	int free_num = 0, final_num = 0;
 	RVALUE *free = freelist;
 	RVALUE *final = final_list;
 	int deferred;
@@ -1654,11 +1654,12 @@
 		    p->as.free.flags |= FL_MARK;
 		    p->as.free.next = final_list;
 		    final_list = p;
+		    final_num++;
 		}
 		else {
 		    add_freelist(objspace, p);
+		    free_num++;
 		}
-		n++;
 	    }
 	    else if (BUILTIN_TYPE(p) == T_DEFERRED) {
 		/* objects to be finalized */
@@ -1670,21 +1671,19 @@
 	    }
 	    p++;
 	}
-	if (n == heaps[i].limit && freed > do_heap_free) {
+	if (final_num + free_num == heaps[i].limit && freed > do_heap_free) {
 	    RVALUE *pp;
-	    int f_count = 0;
 
 	    for (pp = final_list; pp != final; pp = pp->as.free.next) {
-		f_count++;
 		RDATA(pp)->dmark = (void *)&heaps[i];
 		pp->as.free.flags |= FL_SINGLETON; /* freeing page mark */
 	    }
-	    heaps[i].limit = f_count;
+	    heaps[i].limit = final_num;
 
 	    freelist = free;	/* cancel this page from freelist */
 	}
 	else {
-	    freed += n;
+	    freed += free_num;
 	}
     }
     GC_PROF_SET_MALLOC_INFO;

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

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