| persistence_cleanup_lpt#(WROOTADR, WMAXINO, WLOG, WLPT, WORPHANS, WBUFLEB, AROFS; LPT, FREELIST, GCHEAP, WVOL) {let N = 0 in while N < # LPT do {/* (prepost-cleanup-lpt : invariant N ≤ # LPT ∧ # LPT = # LPT` ∧ id-idx(cleanup-lpt(LPT`, N), LPT) ∧ awbuf-inv(WVOL, WBUFLEB) ∧ avol-cleanup-lpt-unchanged(WVOL`, WVOL, LPT`) ∧ freelist-cons(LPT, FREELIST) ∧ keyset(GCHEAP) = gc-heap(cleanup-lpt(LPT`, N), []) ∧ bin-heap-inv(GCHEAP, LPT) ∧ WBUFLEB = nobuffer ∧ synced(WVOL) wfbound # LPT - N) */; if LPT[N].ref-size = 0 ∧ LPT[N].flags ≠ LP_FREE then {if LPT[N].flags = LP_GROUP_NODES then gc_heap_remove#(LPT[N].gcheapidx; GCHEAP, LPT); LPT[N].flags := LP_FREE; LPT[N].size := 0; FREELIST := FREELIST + N; awbuf_unmap#(N, WROOTADR, WMAXINO, WLOG, WLPT, WORPHANS, WBUFLEB, AROFS; WVOL)}; N := N + 1} } |