1.0.46.31: clean up mach port deallocation on x86
[sbcl.git] / src / runtime / thread.c
index 60821ee..ee11e0f 100644 (file)
@@ -131,6 +131,10 @@ initial_thread_trampoline(struct thread *th)
 #ifdef LISP_FEATURE_SB_THREAD
     pthread_setspecific(lisp_thread, (void *)1);
 #endif
+#if defined(LISP_FEATURE_SB_THREAD) && defined(LISP_FEATURE_PPC)
+    /* SIG_STOP_FOR_GC defaults to blocked on PPC? */
+    unblock_gc_signals(0,0);
+#endif
     function = th->no_tls_value_marker;
     th->no_tls_value_marker = NO_TLS_VALUE_MARKER_WIDETAG;
     if(arch_os_thread_init(th)==0) return 1;
@@ -314,12 +318,12 @@ new_thread_trampoline(struct thread *th)
 
 #ifdef LISP_FEATURE_MACH_EXCEPTION_HANDLER
     FSHOW((stderr, "Deallocating mach port %x\n", THREAD_STRUCT_TO_EXCEPTION_PORT(th)));
-    mach_port_move_member(mach_task_self(),
+    mach_port_move_member(current_mach_task,
                           THREAD_STRUCT_TO_EXCEPTION_PORT(th),
                           MACH_PORT_NULL);
-    mach_port_deallocate(mach_task_self(),
+    mach_port_deallocate(current_mach_task,
                          THREAD_STRUCT_TO_EXCEPTION_PORT(th));
-    mach_port_destroy(mach_task_self(),
+    mach_port_destroy(current_mach_task,
                       THREAD_STRUCT_TO_EXCEPTION_PORT(th));
 #endif
 
@@ -469,8 +473,6 @@ create_thread_struct(lispobj initial_function) {
 #if defined(LISP_FEATURE_X86) || defined (LISP_FEATURE_X86_64)
     SetSymbolValue(ALIEN_STACK,(lispobj)th->alien_stack_pointer,th);
     SetSymbolValue(PSEUDO_ATOMIC_BITS,(lispobj)th->pseudo_atomic_bits,th);
-#else
-    current_control_stack_pointer=th->control_stack_start;
 #endif
 #endif
     bind_variable(CURRENT_CATCH_BLOCK,make_fixnum(0),th);
@@ -487,6 +489,9 @@ create_thread_struct(lispobj initial_function) {
 #ifdef LISP_FEATURE_SB_THREAD
     bind_variable(STOP_FOR_GC_PENDING,NIL,th);
 #endif
+#ifndef LISP_FEATURE_C_STACK_IS_CONTROL_STACK
+    access_control_stack_pointer(th)=th->control_stack_start;
+#endif
 
     th->interrupt_data = (struct interrupt_data *)
         os_validate(0,(sizeof (struct interrupt_data)));