Commit 60e88923 authored by Christophe Rhodes's avatar Christophe Rhodes
Browse files

0.8.7.21:

	Dan's GC fragmentation fix
	... & BOXED_REGION
	... it builds, builds itself, doesn't break on PFD's tests;
		that's good enough for me :-)
	... I think I've summarized the "bug fix" right in NEWS, but
		do correct if not.
parent bd246f3f
Loading
Loading
Loading
Loading
+8 −4
Original line number Diff line number Diff line
@@ -2237,15 +2237,19 @@ changes in sbcl-0.8.8 relative to sbcl-0.8.7:
  * bug fix: DECODE-UNIVERSAL-TIME now accepts timezone arguments with
    second-resolution: integer multiples of 1/3600 between -24 and 24.
    (thanks to Vincent Arkesteijn)
  * bug fix: functions =, /=, <, <=, >, >= did not check the argument
    type when called with 1 argument; PEEK-CHAR checked type of
    PEEK-TYPE only after having read first character from a
    stream.  (reported by Peter Graves)
  * bug fix: the garbage collector now has much better locality
    behaviour, and in particular no longer treats all memory as being
    exhausted when many small objects point to each other in a deeply
    recursive manner.
  * optimization: implemented multiplication as a modular
    (UNSIGNED-BYTE 32) operation on the x86 backend.
  * optimization: SEARCH on simple-base-strings can now be open-coded.
    (see also contrib/compiler-extras.lisp for inspiration for
    teaching the compiler about the Boyer-Moore algorithm).
  * bug fix: functions =, /=, <, <=, >, >= did not check the argument
    type when called with 1 argument; PEEK-CHAR checked type of
    PEEK-TYPE only after having read first character from a
    stream. (reported by Peter Graves)
  * fixed some bugs revealed by Paul Dietz' test suite:
    ** in stack analysis liveness information is propagated from
       non-local entry points.
+1 −11
Original line number Diff line number Diff line
@@ -966,16 +966,6 @@ gc_find_freeish_pages(int *restart_page_ptr, int nbytes, int unboxed)
		    (unboxed ? UNBOXED_PAGE : BOXED_PAGE)) &&
		   (page_table[first_page].large_object == 0) &&
		   (page_table[first_page].gen == gc_alloc_generation) &&
		   /* FIXME: Why?  Please tell me why?  Removal of
		      this test, which restricts opening an allocation
		      region on a partially-used page to the nursery
		      generation, causes more or less instant heap
		      corruption on forms such as 
                        (loop repeat 2 
                              do (compile nil '(lambda (x) x)) 
                              do (gc :full t))
		      -- CSR, 2003-01-14 */
		   (gc_alloc_generation == 0) &&
		   (page_table[first_page].bytes_used < (PAGE_BYTES-32)) &&
		   (page_table[first_page].write_protected == 0) &&
		   (page_table[first_page].dont_move == 0)) {
@@ -2763,7 +2753,7 @@ scavenge_newspace_generation_one_scan(int generation)
	   generation));
    for (i = 0; i < last_free_page; i++) {
	/* note that this skips over open regions when it encounters them */
	if ((page_table[i].allocated == BOXED_PAGE)
	if ((page_table[i].allocated & BOXED_PAGE)
	    && (page_table[i].bytes_used != 0)
	    && (page_table[i].gen == generation)
	    && ((page_table[i].write_protected == 0)
+1 −1
Original line number Diff line number Diff line
@@ -17,4 +17,4 @@
;;; checkins which aren't released. (And occasionally for internal
;;; versions, especially for internal versions off the main CVS
;;; branch, it gets hairier, e.g. "0.pre7.14.flaky4.13".)
"0.8.7.20"
"0.8.7.21"