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/