From: Daniel B. <da...@us...> - 2004-07-19 23:44:53
|
Update of /cvsroot/sbcl/sbcl/src/compiler/generic In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv18738/src/compiler/generic Modified Files: objdef.lisp Log Message: 0.8.12.42 Fix the threading problems revealed by Edi's CL-PPCRE tests ... If target-arch.h is included before genesis/config.h, some runtime files with inline expansion of get_spinlock get the wrong version Significantly change handling of thread exit: the SIG_THREAD_EXIT handler just makes th->state=STATE_DEAD, does not do all_threads surgery, does not call Lisp code and is no longer deferrable, eliminating a problem where threads die at the start of GC and become zombified so cannot be stopped for GC Instead we call thread exit handlers from reap_dead_threads(), necessitating further changes in HANDLE-THREAD-EXIT, as it can now be called from threads other than the parent of the dead one stop_the_world doesn't actually need to hold all_threads_lock(), as it doesn't modify the all_threads list. Likewise sig_stop_for_gc_handler(), which means the sched_yield() kludge can go away Index: objdef.lisp =================================================================== RCS file: /cvsroot/sbcl/sbcl/src/compiler/generic/objdef.lisp,v retrieving revision 1.28 retrieving revision 1.29 diff -u -d -r1.28 -r1.29 --- objdef.lisp 21 May 2004 12:17:49 -0000 1.28 +++ objdef.lisp 19 Jul 2004 23:44:45 -0000 1.29 @@ -327,7 +327,7 @@ ;; first data slot, and if you subtract 7 you get a symbol header. ;; also the CAR of NIL-as-end-of-list - (value :init :unbound) + (value :init :unbound :ref-known (flushable) :ref-trans symbol-global-value) ;; also the CDR of NIL-as-end-of-list. Its reffer needs special ;; care for this reason, as hash values must be fixnums. (hash :set-trans %set-symbol-hash) @@ -339,7 +339,7 @@ (package :ref-trans symbol-package :set-trans %set-symbol-package :init :null) - #!+sb-thread (tls-index)) + #!+sb-thread (tls-index :ref-known (flushable) :ref-trans symbol-tls-index)) (define-primitive-object (complex-single-float :lowtag other-pointer-lowtag @@ -375,7 +375,7 @@ (tls-cookie) ; on x86, the LDT index (this :c-type "struct thread *" :length #!+alpha 2 #!-alpha 1) (next :c-type "struct thread *" :length #!+alpha 2 #!-alpha 1) - (state) ; running, stopping, stopped + (state) ; running, stopping, stopped, dead #!+x86 (pseudo-atomic-atomic) #!+x86 (pseudo-atomic-interrupted) (interrupt-data :c-type "struct interrupt_data *" |