0.9.6.42:
[sbcl.git] / src / runtime / cheneygc.c
index a18d878..68c8004 100644 (file)
@@ -48,7 +48,6 @@ lispobj *new_space_free_pointer;
 
 static void scavenge_newspace(void);
 static void scavenge_interrupt_contexts(void);
-extern struct interrupt_data * global_interrupt_data;
 
 extern unsigned long bytes_consed_between_gcs;
 
@@ -110,7 +109,7 @@ lispobj  copy_large_object(lispobj object, long nwords) {
  * last_generation argument. That's meaningless for us, since we're
  * not a generational GC. So we ignore it. */
 void
-collect_garbage(unsigned ignore)
+collect_garbage(generation_index_t ignore)
 {
 #ifdef PRINTNOISE
     struct timeval start_tv, stop_tv;
@@ -125,9 +124,6 @@ collect_garbage(unsigned ignore)
     unsigned long control_stack_size, binding_stack_size;
     sigset_t tmp, old;
     struct thread *th=arch_os_get_current_thread();
-    struct interrupt_data *data=
-        th ? th->interrupt_data : global_interrupt_data;
-
 
 #ifdef PRINTNOISE
     printf("[Collecting garbage ... \n");
@@ -179,8 +175,8 @@ collect_garbage(unsigned ignore)
     printf("Scavenging interrupt handlers (%d bytes) ...\n",
            (int)sizeof(interrupt_handlers));
 #endif
-    scavenge((lispobj *) data->interrupt_handlers,
-             sizeof(data->interrupt_handlers) / sizeof(lispobj));
+    scavenge((lispobj *) interrupt_handlers,
+             sizeof(interrupt_handlers) / sizeof(lispobj));
 
     /* _size quantities are in units of sizeof(lispobj) - i.e. 4 */
     control_stack_size =
@@ -588,34 +584,28 @@ gc_initialize_pointers(void)
 /* noise to manipulate the gc trigger stuff */
 
 /* Functions that substantially change the dynamic space free pointer
- * (collect_garbage, purify) are responsible also for resettting the
+ * (collect_garbage, purify) are responsible also for resetting the
  * auto_gc_trigger */
 void set_auto_gc_trigger(os_vm_size_t dynamic_usage)
 {
-    os_vm_address_t addr=(os_vm_address_t)current_dynamic_space
-        + dynamic_usage;
-    long length = DYNAMIC_SPACE_SIZE - dynamic_usage;
-
-    if (addr < (os_vm_address_t)dynamic_space_free_pointer) {
-        fprintf(stderr,
-           "set_auto_gc_trigger: tried to set gc trigger too low! (%ld < 0x%08lx)\n",
-                (unsigned long)dynamic_usage,
-                (unsigned long)((os_vm_address_t)dynamic_space_free_pointer
-                                - (os_vm_address_t)current_dynamic_space));
-        lose("lost");
-    }
-    else if (length < 0) {
-        fprintf(stderr,
-                "set_auto_gc_trigger: tried to set gc trigger too high! (0x%08lx)\n",
-                (unsigned long)dynamic_usage);
-        lose("lost");
-    }
-
-    addr=os_round_up_to_page(addr);
-    length=os_trunc_size_to_page(length);
+    os_vm_address_t addr;
+    os_vm_size_t length;
+
+    addr = os_round_up_to_page((os_vm_address_t)current_dynamic_space
+                               + dynamic_usage);
+    if (addr < (os_vm_address_t)dynamic_space_free_pointer)
+        lose("set_auto_gc_trigger: tried to set gc trigger too low! (%ld < 0x%08lx)\n",
+             (unsigned long)dynamic_usage,
+             (unsigned long)((os_vm_address_t)dynamic_space_free_pointer
+                             - (os_vm_address_t)current_dynamic_space));
+
+    length = os_trunc_size_to_page(DYNAMIC_SPACE_SIZE - dynamic_usage);
+    if (length < 0)
+        lose("set_auto_gc_trigger: tried to set gc trigger too high! (0x%08lx)\n",
+             (unsigned long)dynamic_usage);
 
 #if defined(SUNOS) || defined(SOLARIS)
-    os_invalidate(addr,length);
+    os_invalidate(addr, length);
 #else
     os_protect(addr, length, 0);
 #endif
@@ -625,19 +615,21 @@ void set_auto_gc_trigger(os_vm_size_t dynamic_usage)
 
 void clear_auto_gc_trigger(void)
 {
-    if (current_auto_gc_trigger!=NULL){
-#if defined(SUNOS) || defined(SOLARIS)/* don't want to force whole space into swapping mode... */
-        os_vm_address_t addr=(os_vm_address_t)current_auto_gc_trigger;
-        os_vm_size_t length=
-            DYNAMIC_SPACE_SIZE + (os_vm_address_t)current_dynamic_space - addr;
+    os_vm_address_t addr;
+    os_vm_size_t length;
 
-        os_validate(addr,length);
+    if (current_auto_gc_trigger == NULL)
+        return;
+
+    addr = (os_vm_address_t)current_auto_gc_trigger;
+    length = DYNAMIC_SPACE_SIZE + (os_vm_address_t)current_dynamic_space - addr;
+
+#if defined(SUNOS) || defined(SOLARIS)
+    /* don't want to force whole space into swapping mode... */
+    os_validate(addr, length);
 #else
-        os_protect((os_vm_address_t)current_dynamic_space,
-                   DYNAMIC_SPACE_SIZE,
-                   OS_VM_PROT_ALL);
+    os_protect(addr, length, OS_VM_PROT_ALL);
 #endif
 
-        current_auto_gc_trigger = NULL;
-    }
+    current_auto_gc_trigger = NULL;
 }