- prev->link = ws->scavd_list;
- }
- for (bd = ws->scavd_list; bd != NULL; bd = bd->link) {
- bd->flags &= ~BF_EVACUATED; // now from-space
- ws->step->n_words += bd->free - bd->start;
- prev = bd;
+ prev->link = ws->step->blocks;
+ ws->step->blocks = ws->scavd_list;
+ }
+ ws->step->n_blocks += ws->n_scavd_blocks;
+
+ prev = NULL;
+ for (bd = ws->part_list; bd != NULL; bd = next) {
+ next = bd->link;
+ if (bd->free == bd->start) {
+ if (prev == NULL) {
+ ws->part_list = next;
+ } else {
+ prev->link = next;
+ }
+ freeGroup(bd);
+ ws->n_part_blocks--;
+ } else {
+ bd->flags &= ~BF_EVACUATED; // now from-space
+ ws->step->n_words += bd->free - bd->start;
+ prev = bd;
+ }