Update of /cvsroot/sbcl/sbcl/src/runtime
In directory sfp-cvsdas-3.v30.ch3.sourceforge.com:/tmp/cvs-serv18857/src/runtime
220.127.116.11: Scrub control stack after scavenging on non-x86oid gencgc.
* We scavenge the control stack as if it is entirely boxed data,
rewriting pointers as necessary.
* Stack frames tend to contain uninitialized words, which is fine so
long as they are immediate data or valid pointers (they will be
counted as live data, so the scavenge may be more conservative than
necessary, but this is not an error).
* The area beyond the current stack top is not scavenged, as it is not
* Cheneygc scrubs the control stack (clears the area beyond the stack
top) once it (the control stack) has been scavenged.
* Gencgc on non-x86oids (when precise stack scavenging is done) has
not been scrubbing the control stack, leading to the possibility of
having stale pointers in the active heap area.
* Scrubbing the control stack after scavenging it reduces if not
eliminates the random GC faults observed on PPC.
* All of this explanation probably belongs in a document describing
the hows and whys of GC on SBCL, not merely in a commit message.
RCS file: /cvsroot/sbcl/sbcl/src/runtime/gencgc.c,v
retrieving revision 1.160
retrieving revision 1.161
diff -u -d -r1.160 -r1.161
--- gencgc.c 30 Apr 2010 16:48:10 -0000 1.160
+++ gencgc.c 30 Apr 2010 16:53:16 -0000 1.161
@@ -3819,6 +3819,10 @@
control_stack_size = current_control_stack_pointer - control_stack;
+ /* Scrub the unscavenged control stack space, so that we can't run
+ * into any stale pointers in a later GC. */
/* Scavenging Interrupt Contexts */