summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--rts/sm/Storage.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/rts/sm/Storage.c b/rts/sm/Storage.c
index 0bc15c075e..8b3839f8a8 100644
--- a/rts/sm/Storage.c
+++ b/rts/sm/Storage.c
@@ -999,10 +999,11 @@ calcNeeded(void)
for (s = 0; s < generations[g].n_steps; s++) {
if (g == 0 && s == 0) { continue; }
stp = &generations[g].steps[s];
- if (generations[g].steps[0].n_blocks +
- generations[g].steps[0].n_large_blocks
- > generations[g].max_blocks
- && stp->is_compacted == 0) {
+ if (g == 0 || // always collect gen 0
+ (generations[g].steps[0].n_blocks +
+ generations[g].steps[0].n_large_blocks
+ > generations[g].max_blocks
+ && stp->is_compacted == 0)) {
needed += 2 * stp->n_blocks + stp->n_large_blocks;
} else {
needed += stp->n_blocks + stp->n_large_blocks;