diff options
| author | ko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-08-13 10:42:57 +0000 |
|---|---|---|
| committer | ko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-08-13 10:42:57 +0000 |
| commit | 7c5b1fa25587c963eee52546fdd7be0dede4fab6 (patch) | |
| tree | 1791201df7c35e3ebf6b9a73c151d78c326d30bf /gc.c | |
| parent | 03b7544a57433affbe8762a1e90caca381d5e2f6 (diff) | |
| download | ruby-7c5b1fa25587c963eee52546fdd7be0dede4fab6.tar.gz ruby-7c5b1fa25587c963eee52546fdd7be0dede4fab6.tar.xz ruby-7c5b1fa25587c963eee52546fdd7be0dede4fab6.zip | |
* gc.c: count only freed object as freelist size.
git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@18584 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'gc.c')
| -rw-r--r-- | gc.c | 13 |
1 files changed, 6 insertions, 7 deletions
@@ -1636,7 +1636,7 @@ gc_sweep(rb_objspace_t *objspace) 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 @@ gc_sweep(rb_objspace_t *objspace) 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 @@ gc_sweep(rb_objspace_t *objspace) } 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; |
