Update of /cvsroot/sbcl/sbcl/src/runtime
In directory usw-pr-cvs1:/tmp/cvs-serv4610/src/runtime
Modified Files:
gencgc-internal.h save.c
Log Message:
0.7.7.29
Fix bug 200: (translate-logical-pathname "/") is now #p"/"
Fix x86 save-lisp-and-die problem (reported by CSR in sbcl-devel
Message-ID: <20020916083642.GA3374@...> - turns out to
be ugly gencgc/purify interaction
Index: gencgc-internal.h
===================================================================
RCS file: /cvsroot/sbcl/sbcl/src/runtime/gencgc-internal.h,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -d -r1.2 -r1.3
--- gencgc-internal.h 6 Aug 2002 11:46:32 -0000 1.2
+++ gencgc-internal.h 17 Sep 2002 19:52:29 -0000 1.3
@@ -94,6 +94,10 @@
extern struct alloc_region unboxed_region;
extern int from_space, new_space;
extern struct weak_pointer *weak_pointers;
+
+extern void *current_region_free_pointer;
+extern void *current_region_end_addr;
+
void gencgc_pickup_dynamic(void);
Index: save.c
===================================================================
RCS file: /cvsroot/sbcl/sbcl/src/runtime/save.c,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -d -r1.12 -r1.13
--- save.c 6 Aug 2002 11:46:33 -0000 1.12
+++ save.c 17 Sep 2002 19:52:29 -0000 1.13
@@ -132,6 +132,14 @@
dynamic_space_free_pointer);
#else
#ifdef LISP_FEATURE_GENCGC
+ /* I don't know too much about the circumstances in which we could
+ * end up here. It may be that current_region_free_pointer is
+ * guaranteed to be relevant and we could skip these slightly
+ * paranoid checks. TRT would be to rid the code of
+ * current_region_foo completely - dan 2002.09.17 */
+ if((boxed_region.free_pointer < current_region_free_pointer) &&
+ (boxed_region.end_addr == current_region_end_addr))
+ boxed_region.free_pointer = current_region_free_pointer;
/* Flush the current_region, updating the tables. */
gc_alloc_update_page_tables(0,&boxed_region);
gc_alloc_update_page_tables(1,&unboxed_region);
|