]> git.llucax.com Git - software/dgc/cdgc.git/commitdiff
Move sweeping phase to a separate function
authorLeandro Lucarella <llucax@gmail.com>
Mon, 23 Aug 2010 00:38:50 +0000 (21:38 -0300)
committerLeandro Lucarella <llucax@gmail.com>
Thu, 26 Aug 2010 01:23:36 +0000 (22:23 -0300)
rt/gc/cdgc/gc.d

index 0084481afc149313609f69e3856453f9f27f7e38..46c43adc2da3d82f5453d59e327bc7cb156a4f67 100644 (file)
@@ -921,13 +921,22 @@ size_t fullcollect(void *stackTop)
     thread_resumeAll();
     gc.stats.world_started();
 
+    return sweep();
+}
+
+
+/**
+ *
+ */
+size_t sweep()
+{
     // Free up everything not marked
-    debug(COLLECT_PRINTF) printf("\tfree'ing\n");
+    debug(COLLECT_PRINTF) printf("\tsweep\n");
     size_t freedpages = 0;
     size_t freed = 0;
-    for (n = 0; n < gc.pools.length; n++)
+    for (size_t n = 0; n < gc.pools.length; n++)
     {
-        pool = gc.pools[n];
+        Pool* pool = gc.pools[n];
         pool.clear_cache();
         uint*  bbase = pool.mark.base();
         size_t pn;
@@ -1039,9 +1048,9 @@ version(none) // BUG: doesn't work because freebits() must also be cleared
     // Free complete pages, rebuild free list
     debug(COLLECT_PRINTF) printf("\tfree complete pages\n");
     size_t recoveredpages = 0;
-    for (n = 0; n < gc.pools.length; n++)
+    for (size_t n = 0; n < gc.pools.length; n++)
     {
-        pool = gc.pools[n];
+        Pool* pool = gc.pools[n];
         for (size_t pn = 0; pn < pool.npages; pn++)
         {
             Bins   bin = cast(Bins)pool.pagetable[pn];