From: Christophe Rhodes Date: Fri, 23 Jan 2004 16:52:28 +0000 (+0000) Subject: 0.8.7.21: X-Git-Url: http://repo.macrolet.net/gitweb/?a=commitdiff_plain;h=60e88923a7610fa2cf6d5917707c149578776da2;p=sbcl.git 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. --- diff --git a/NEWS b/NEWS index 176d94e..ee020d9 100644 --- a/NEWS +++ b/NEWS @@ -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. diff --git a/src/runtime/gencgc.c b/src/runtime/gencgc.c index e350702..5914f6f 100644 --- a/src/runtime/gencgc.c +++ b/src/runtime/gencgc.c @@ -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) diff --git a/version.lisp-expr b/version.lisp-expr index cfd6bd6..e847bcc 100644 --- a/version.lisp-expr +++ b/version.lisp-expr @@ -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"