X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fruntime%2Fpurify.c;h=90c4669469d4b602400ed56932d6718c708d13b7;hb=2dfaffe8bdce30dac9b5baa4d2645d074a176b4f;hp=aa809b92d7ddbe411084d743d2eb5997f7428d48;hpb=4023b1bec2412344e5eea4a33cd85dd662149c67;p=sbcl.git diff --git a/src/runtime/purify.c b/src/runtime/purify.c index aa809b9..90c4669 100644 --- a/src/runtime/purify.c +++ b/src/runtime/purify.c @@ -27,13 +27,13 @@ #include "interrupt.h" #include "purify.h" #include "interr.h" -#include "fixnump.h" #include "gc.h" #include "gc-internal.h" #include "thread.h" #include "genesis/primitive-objects.h" #include "genesis/static-symbols.h" #include "genesis/layout.h" +#include "genesis/hash-table.h" #include "gencgc.h" /* We don't ever do purification with GENCGC as of 1.0.5.*. There was @@ -717,8 +717,9 @@ pscav(lispobj *addr, long nwords, boolean constant) case SIMPLE_VECTOR_WIDETAG: if (HeaderValue(thing) == subtype_VectorValidHashing) { - *addr = (subtype_VectorMustRehash << N_WIDETAG_BITS) | - SIMPLE_VECTOR_WIDETAG; + struct hash_table *hash_table = + (struct hash_table *)native_pointer(addr[2]); + hash_table->needs_rehash_p = T; } count = 2; break; @@ -953,7 +954,7 @@ purify(lispobj static_roots, lispobj read_only_roots) fflush(stdout); #endif pscav((lispobj *)all_threads->control_stack_start, - current_control_stack_pointer - + access_control_stack_pointer(all_threads) - all_threads->control_stack_start, 0); @@ -963,7 +964,7 @@ purify(lispobj static_roots, lispobj read_only_roots) #endif pscav( (lispobj *)all_threads->binding_stack_start, - (lispobj *)current_binding_stack_pointer - + (lispobj *)get_binding_stack_pointer(all_threads) - all_threads->binding_stack_start, 0); @@ -1021,15 +1022,18 @@ purify(lispobj static_roots, lispobj read_only_roots) printf(" cleanup"); fflush(stdout); #endif +#ifdef LISP_FEATURE_HPUX + clear_auto_gc_trigger(); /* restore mmap as it was given by os */ +#endif os_zero((os_vm_address_t) current_dynamic_space, (os_vm_size_t) dynamic_space_size); /* Zero the stack. */ - os_zero((os_vm_address_t) current_control_stack_pointer, + os_zero((os_vm_address_t) access_control_stack_pointer(all_threads), (os_vm_size_t) ((all_threads->control_stack_end - - current_control_stack_pointer) * sizeof(lispobj))); + access_control_stack_pointer(all_threads)) * sizeof(lispobj))); /* It helps to update the heap free pointers so that free_heap can * verify after it's done. */