From: Nathan F. <nf...@us...> - 2006-07-15 17:40:18
|
Update of /cvsroot/sbcl/sbcl/src/code In directory sc8-pr-cvs8.sourceforge.net:/tmp/cvs-serv25049/src/code Modified Files: target-thread.lisp Log Message: 0.9.14.15: Bandage over the problems noted in "*print-case* in multiple threads broken", sbcl-devel 2006-07-14. Index: target-thread.lisp =================================================================== RCS file: /cvsroot/sbcl/sbcl/src/code/target-thread.lisp,v retrieving revision 1.56 retrieving revision 1.57 diff -u -d -r1.56 -r1.57 --- target-thread.lisp 3 Jun 2006 20:26:52 -0000 1.56 +++ target-thread.lisp 15 Jul 2006 17:40:09 -0000 1.57 @@ -591,12 +591,26 @@ (real-function (coerce function 'function)) (initial-function (lambda () - ;; in time we'll move some of the binding presently done in C - ;; here too + ;; In time we'll move some of the binding presently done in C + ;; here too. + ;; + ;; KLUDGE: Here we have a magic list of variables that are + ;; not thread-safe for one reason or another. As people + ;; report problems with the thread safety of certain + ;; variables, (e.g. "*print-case* in multiple threads + ;; broken", sbcl-devel 2006-07-14), we add a few more + ;; bindings here. The Right Thing is probably some variant + ;; of Allegro's *cl-default-special-bindings*, as that is at + ;; least accessible to users to secure their own libraries. + ;; --njf, 2006-07-15 (let ((*current-thread* thread) (sb!kernel::*restart-clusters* nil) (sb!kernel::*handler-clusters* nil) (sb!kernel::*condition-restarts* nil) + ;; internal printer variables + (sb!impl::*previous-case* nil) + (sb!impl::*previous-readtable-case* nil) + (sb!impl::*internal-symbol-output-fun* nil) (sb!impl::*descriptor-handlers* nil)) ; serve-event (setf (thread-os-thread thread) (current-thread-sap-id)) (with-mutex (*all-threads-lock*) |