diff options
author | cinap_lenrek <cinap_lenrek@felloff.net> | 2015-10-19 00:20:33 +0200 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@felloff.net> | 2015-10-19 00:20:33 +0200 |
commit | 24d74a4b5fe730cbd7ebac851665fb50c37da163 (patch) | |
tree | 62af0e5fd94107fe782d29d5bfbef182ccbb5adf | |
parent | 5ca4afb2491571cc96ba1c1a6a0bee0b1912bab5 (diff) | |
download | plan9front-24d74a4b5fe730cbd7ebac851665fb50c37da163.tar.xz |
acid/leak: fix endless loop for B2NB(b) == b case (thanks mischief)
-rw-r--r-- | sys/lib/acid/leak | 3 | ||||
-rw-r--r-- | sys/lib/acid/pool | 9 |
2 files changed, 6 insertions, 6 deletions
diff --git a/sys/lib/acid/leak b/sys/lib/acid/leak index 33b8f68b7..a4449f1a3 100644 --- a/sys/lib/acid/leak +++ b/sys/lib/acid/leak @@ -41,8 +41,7 @@ dumparena(arena, sum) if nb == b then { print("B2NB(", b\A, ") = b\n"); b = atail; // end loop - } - if nb > atail then { + } else if nb > atail then { b = (Bhdr)(b+4); print("lost at block ", (b-4)\A, ", scanning forward\n"); while b < atail && b.magic != ALLOC_MAGIC && b.magic != FREE_MAGIC do diff --git a/sys/lib/acid/pool b/sys/lib/acid/pool index 6ca5ba5cd..b00b55273 100644 --- a/sys/lib/acid/pool +++ b/sys/lib/acid/pool @@ -206,18 +206,19 @@ checkblock(addr) defn checkarena(arena) { - local atail, b; + local atail, b, nb; atail = A2TB(arena); complex Bhdr arena; b = arena; while b.magic != ARENATAIL_MAGIC && b < atail do { checkblock(b); - if B2NB(b) == b then { + nb = B2NB(b); + if nb == b then { print("B2NB(", b\X, ") = b\n"); b = atail; // end loop - } - b = B2NB(b); + } else + b = nb; } checkblock(b); |