0.9.9.34:
authorChristophe Rhodes <csr21@cam.ac.uk>
Fri, 17 Feb 2006 17:49:36 +0000 (17:49 +0000)
committerChristophe Rhodes <csr21@cam.ac.uk>
Fri, 17 Feb 2006 17:49:36 +0000 (17:49 +0000)
commit3d11412f3458048039cd8fece1db2aa6511118dc
tree1a72c657718bf0b1260efd48103529747a69194d
parent059b8dcf4d34fe9e7b96ed889e19e43b8b98906c
0.9.9.34:
Merge fix from Peter Van Eynde (sbcl-devel 2006-02-11 "cosmetic
room bug") for a cosmetic room bug.
... also fix a distinctly non-cosmetic scrub-control-stack bug
resulting from the same issue.  This scrubbing failure
appeared to cause heap corruption in powerpc/gencgc
test builds; I think I understand why.

The Cheney GC zeros the unused parts of the lisp control stack
after it has completed the garbage collection.  This ensures
that, if the active stack had no garbage pointers at the start
of the collection, there is no region in the entire control
stack (used or unused) which contains a garbage pointer, since
every entry has either been scavenged or zeroed.  But since by
assumption we start off with no garbage pointers, by
mathematical induction we never scavenge one, so everything is
safe.

GENCGC doesn't perform this zeroing.  (Why?)  However,
SCRUB-CONTROL-STACK does, before a GC.  This is slightly more
dangerous, because we could in fact have incomplete stack frames
        lying below the stack pointer with an entry from a previous
        iteration of the heap, but I think it's OK by the same
        reasoning as before.  Failure to zero the stack, however, does
        leave the possibility of bogus pointers open when stack frames
        are extended but not every stack slot has yet been written to.
        This wasn't so much of an issue when the stack is
        scanned conservatively and ambiguous roots caused pinning, but
        under a precise stack scanning regime disaster ensues.
NEWS
src/code/gc.lisp
src/code/toplevel.lisp
version.lisp-expr