0.9.4.55:
[sbcl.git] / doc / internals-notes / threading-specials
index 8ff8460..b76218d 100644 (file)
@@ -27,7 +27,7 @@ The goals are
         spots.  Global state in closures, etc etc
            
        (4) suggest strategies (e.g. rewrites of affected code, suitable
-       locks and lock acquitision/release places) to fix the issues
+       locks and lock acquisition/release places) to fix the issues
        revealed in (2) and (3)
        
        (5) implement same
@@ -599,6 +599,10 @@ Note that the compiler and fasloader are strongly believed not to be
 thread-safe, so there is currently a big lock (*big-compiler-lock*)
 around all calls to the compiler or fasloader
 
+Note that INFO functions use a shared cache for the globaldb, and
+don't lock for cache invalidation. This will need fixing when BCL is
+removed.
+
 *COMPILE-FILE-PATHNAME*  
 *COMPILE-FILE-TRUENAME* 
 *COMPILE-PRINT* 
@@ -647,7 +651,7 @@ SB-C::*COMPILER-ERROR-CONTEXT*
 SB-C::*SEEN-BLOCKS* 
 SB-C::*TN-ID* 
 SB-C::*IR1-OPTIMIZE-UNTIL-DONE-EVENT-INFO* 
-SB-C::*SPECIALIZED-ARRAY-ELEMENT-TYPE-PROPERTIES* 
+SB-C::*SPECIALIZED-ARRAY-ELEMENT-TYPE-PROPERTIES*       ; readonly
 SB-C::*NUMBER-CONTINUATIONS* 
 SB-C::*CTYPE-TEST-FUN*
 SB-C::*IGNORE-COST-VOPS* 
@@ -813,15 +817,17 @@ SB-FASL::FOP-LIST*-3
 
 
 = runtime stuff
+
+
 SB-VM:*STATIC-SPACE-FREE-POINTER* 
 SB-VM:*INITIAL-DYNAMIC-SPACE-FREE-POINTER* 
-SB-VM:*CURRENT-CATCH-BLOCK* 
+SB-VM:*CURRENT-CATCH-BLOCK* ; bound at thread entry (in C)
 SB-VM:*STATIC-SYMBOLS* 
-SB-VM:*CONTROL-STACK-START* ; bound at thread entry
+SB-VM:*CONTROL-STACK-START* ; safe, bound at thread entry
 SB-VM:*READ-ONLY-SPACE-FREE-POINTER* 
-SB-VM:*BINDING-STACK-START* 
-SB-VM:*CONTROL-STACK-END* 
-SB-VM::*CURRENT-UNWIND-PROTECT-BLOCK* 
+SB-VM:*BINDING-STACK-START* ; safe, bound at thread entry
+SB-VM:*CONTROL-STACK-END* ; safe, bound at thread entry
+SB-VM::*CURRENT-UNWIND-PROTECT-BLOCK*  ; bound at thread entry (in C)
 SB-VM::*FREE-TLS-INDEX* 
 SB-VM::*BINDING-STACK-POINTER* 
 SB-VM::*ALLOCATION-POINTER*    ; may be mostly unused ?
@@ -836,7 +842,9 @@ SB-KERNEL::*GC-TRIGGER*  ; I think this is dead, check
 SB-IMPL::*CURRENT-UNWIND-PROTECT-BLOCK*
 SB-IMPL::*CURRENT-CATCH-BLOCK*
 SB-IMPL::*READ-ONLY-SPACE-FREE-POINTER*
-SB-VM::*ALIEN-STACK* 
+SB-VM::*ALIEN-STACK*  ; bound in create_thread_struct()
+
+SB-IMPL::*OBJECTS-PENDING-FINALIZATION*  ; needs locking for writers
 
 *GC-NOTIFY-STREAM*   ; going away
 *BEFORE-GC-HOOKS*    ; must be global
@@ -951,20 +959,20 @@ SB-VM::*MAYBE-USE-INLINE-ALLOCATION*
 SB-VM::*SIGNED-IMM-DWORD-PREFILTER-WRAPPER* 
 SB-VM::*IMMEDIATE-TYPES* 
 
-SB-KERNEL:*WILD-TYPE* 
+SB-KERNEL:*WILD-TYPE*                                   ; readonly
 SB-KERNEL:*UNPARSE-FUN-TYPE-SIMPLIFY* 
 SB-KERNEL:*CURRENT-LEVEL-IN-PRINT* 
 SB-KERNEL:*UNIVERSAL-FUN-TYPE* 
 SB-KERNEL:*COLD-INIT-COMPLETE-P* 
-SB-KERNEL:*UNIVERSAL-TYPE* 
-SB-KERNEL:*HANDLER-CLUSTERS* 
-SB-KERNEL:*EMPTY-TYPE* 
+SB-KERNEL:*UNIVERSAL-TYPE*                              ; readonly
+SB-KERNEL:*HANDLER-CLUSTERS*                           ; bound per-thread
+SB-KERNEL:*EMPTY-TYPE*                                  ; readonly
 SB-KERNEL:*MAXIMUM-ERROR-DEPTH* 
-SB-KERNEL:*CONDITION-RESTARTS* 
+SB-KERNEL:*CONDITION-RESTARTS*                                 ; bound per-thread
 SB-KERNEL:*TYPE-SYSTEM-INITIALIZED* 
-SB-KERNEL:*RESTART-CLUSTERS* 
+SB-KERNEL:*RESTART-CLUSTERS*                            ; bound per-thread
 SB-KERNEL::*MAKE-VALUES-TYPE-CACHED-CACHE-VECTOR* 
-SB-KERNEL::*BUILT-IN-CLASS-CODES* 
+SB-KERNEL::*BUILT-IN-CLASS-CODES*                       ; readonly
 SB-KERNEL::*DEF!STRUCT-TYPE-MAKE-LOAD-FORM-FUN* 
 SB-KERNEL::*LAYOUT-CLOS-HASH-RANDOM-STATE* 
 SB-KERNEL::*TYPE-TEST-ORDERING* 
@@ -977,37 +985,37 @@ SB-KERNEL::*TYPE-INTERSECTION2-CACHE-VECTOR*
 SB-KERNEL::*COLD-INIT-FORMS*
 SB-KERNEL::*DEFAULT-DEFAULT* 
 SB-KERNEL::*RAW-SLOT-DATA-LIST* 
-SB-KERNEL::*SPECIALIZED-ARRAY-ELEMENT-TYPES* 
+SB-KERNEL::*SPECIALIZED-ARRAY-ELEMENT-TYPES*            ; readonly
 SB-KERNEL::*DEFSTRUCT-HOOKS* 
 SB-KERNEL::*VALUES-TYPE-UNION-CACHE-VECTOR* 
 SB-KERNEL::*INTERNAL-ERRORS* 
 SB-KERNEL::*VALUES-TYPE-INTERSECTION-CACHE-VECTOR* 
 SB-KERNEL::*FORWARD-REFERENCED-LAYOUTS* 
-SB-KERNEL::*SYSTEM-LETS* 
+SB-KERNEL::*SYSTEM-LETS*                                ; bound
 SB-KERNEL::*%COERCE-TO-VALUES-CACHE-VECTOR* 
 SB-KERNEL::*IGNORABLE-VARS*
-SB-KERNEL::*ENV-VAR* 
+SB-KERNEL::*ENV-VAR*                                    ; bound
 SB-KERNEL::|*%%MAKE-UNION-TYPE-cached-CACHE-VECTOR*| 
 SB-KERNEL::*CSUBTYPEP-CACHE-VECTOR* 
 SB-KERNEL::*EMPTY-CONDITION-SLOT* 
 SB-KERNEL::*TYPE-UNION2-CACHE-VECTOR* 
 SB-KERNEL::*TYPE-CLASS-FUN-SLOTS* 
-SB-KERNEL::*ARG-TESTS* 
-SB-KERNEL::*USER-LETS* 
+SB-KERNEL::*ARG-TESTS*                                  ; bound
+SB-KERNEL::*USER-LETS*                                  ; bound
 SB-KERNEL::|*%%MAKE-ARRAY-TYPE-cached-CACHE-VECTOR*| 
 SB-KERNEL::*FINDING-NAME* 
 SB-KERNEL::*TYPE-CLASSES* 
 SB-KERNEL::*VALUES-SPECIFIER-TYPE-CACHE-VECTOR* 
-SB-KERNEL::*FLOAT-FORMATS* 
+SB-KERNEL::*FLOAT-FORMATS*                              ; readonly
 SB-KERNEL::*INTERNAL-ERROR-ARGS*
 SB-KERNEL::*DEF!STRUCT-SUPERTYPE* 
 SB-KERNEL::*%TYPE-UNION-CACHE-VECTOR* 
 SB-KERNEL::*CTYPE-OF-CACHE-VECTOR* 
 
-SB-IMPL::*READ-BUFFER* 
+SB-IMPL::*READ-BUFFER*  ; FIXME: non-threadsafe
 SB-IMPL::*SECONDARY-ATTRIBUTE-TABLE* 
 SB-IMPL::*STANDARD-READTABLE* 
-SB-IMPL::*OUCH-PTR* 
+SB-IMPL::*OUCH-PTR*  ; FIXME: non-threadsafe
 SB-IMPL::*ERROR-ERROR-DEPTH* 
 SB-IMPL::*CURRENT-ERROR-DEPTH* 
 SB-IMPL::*INTERNAL-REAL-TIME-BASE-SECONDS* 
@@ -1017,7 +1025,7 @@ SB-IMPL::*HANDLERS-INSTALLED*
 SB-IMPL::*READ-FROM-STRING-SPARES* 
 SB-IMPL::*HASH-TABLE-TESTS* 
 SB-IMPL::*ATTRIBUTE-NAMES* 
-SB-IMPL::*DAYS-BEFORE-MONTH* 
+SB-IMPL::*DAYS-BEFORE-MONTH*                            ; readonly
 SB-IMPL::*CHARACTER-ATTRIBUTES* 
 SB-IMPL::*UNIX-HOST* 
 SB-IMPL::*DESCRIPTOR-HANDLERS* 
@@ -1025,12 +1033,11 @@ SB-IMPL::*STRING-OUTPUT-STREAMS*
 SB-IMPL::*CLOSE-ON-ERROR* 
 SB-IMPL::*INTEGER-READER-SAFE-DIGITS* 
 SB-IMPL::*TIMEZONE-TABLE* 
-SB-IMPL::*BQ-COMMA-FLAG* 
+SB-IMPL::*BQ-COMMA-FLAG*                                ; readonly
 SB-IMPL::*PRINT-OBJECT-IS-DISABLED-P*
-SB-IMPL::*MERGE-SORT-TEMP-VECTOR* 
+SB-IMPL::*MERGE-SORT-TEMP-VECTOR*  ; FIXME: SORT non-threadsafe, non-reentrant
 SB-IMPL::*PROFILE-HASH-CACHE* 
 SB-IMPL::*FIXNUM-POWER--1* 
-SB-IMPL::*OBJECTS-PENDING-FINALIZATION* 
 SB-IMPL::*SHARP-EQUAL-CIRCLE-TABLE*
 SB-IMPL::*SOFTWARE-INTERRUPT-VECTOR*        ; suspect unused
 SB-IMPL::*INSPECT-UNBOUND-OBJECT-MARKER* 
@@ -1041,17 +1048,17 @@ SB-IMPL::*CLOSE-IN-PARENT*
 SB-IMPL::*IN-COMPILATION-UNIT*
 SB-IMPL::*CIRCULARITY-HASH-TABLE* 
 SB-IMPL::*LOAD-PRINT-STUFF*
-SB-IMPL::*ZAP-ARRAY-DATA-TEMP* 
+SB-IMPL::*ZAP-ARRAY-DATA-TEMP*       ; FIXME: ADJUST-ARRAY non-threadsafe
 SB-IMPL::*ACTIVE-PROCESSES* 
 SB-IMPL::*SHARP-SHARP-ALIST*     
 SB-IMPL::*BASE-POWER* 
 SB-IMPL::*LOGICAL-PATHNAME-DEFAULTS* 
 SB-IMPL::*AVAILABLE-BUFFERS* 
-SB-IMPL::*BQ-DOT-FLAG* 
+SB-IMPL::*BQ-DOT-FLAG*                          ; readonly
 SB-IMPL::*CIRCULARITY-COUNTER* 
 SB-IMPL::*DIGITS* 
-SB-IMPL::*PREVIOUS-READTABLE-CASE* 
-SB-IMPL::*BQ-VECTOR-FLAG* 
+SB-IMPL::*PREVIOUS-READTABLE-CASE* ; FIXME: printer not threadsafe
+SB-IMPL::*BQ-VECTOR-FLAG*                       ; readonly
 SB-IMPL::*ABBREV-WEEKDAY-TABLE* 
 SB-IMPL::*LOGICAL-HOSTS* 
 SB-IMPL::*PACKAGE-NAMES* 
@@ -1063,24 +1070,24 @@ SB-IMPL::*VALID-FUN-NAMES-ALIST*
 SB-IMPL::*PERIODIC-POLLING-FUNCTION* 
 SB-IMPL::*ABORTED-COMPILATION-UNIT-COUNT*
 SB-IMPL::*LONG-WEEKDAY-TABLE* 
-SB-IMPL::*INTERNAL-SYMBOL-OUTPUT-FUN* 
-SB-IMPL::*BACKQUOTE-COUNT* 
+SB-IMPL::*INTERNAL-SYMBOL-OUTPUT-FUN* ; FIXME: printer not threadsafe
+SB-IMPL::*BACKQUOTE-COUNT*                      ; bound
 SB-IMPL::*DIGIT-BASES* 
 SB-IMPL::*PREVIOUS-DRIBBLE-STREAMS* 
 SB-IMPL::*MAX-EVENT-TO-USEC* 
 SB-IMPL::*INPUT-ROUTINES* 
 SB-IMPL::*MAX-EVENT-TO-SEC* 
-SB-IMPL::*READ-BUFFER-LENGTH* 
+SB-IMPL::*READ-BUFFER-LENGTH* ; FIXME: not threadsafe
 SB-IMPL::*LONG-MONTH-TABLE* 
 SB-IMPL::*OLD-PACKAGE* 
 SB-IMPL::*INTEGER-READER-BASE-POWER* 
 SB-IMPL::*ERROR-THROW-UP-COUNT* 
-SB-IMPL::*BQ-AT-FLAG* 
+SB-IMPL::*BQ-AT-FLAG*                           ; readonly
 SB-IMPL::*MACHINE-VERSION*   ; unset/unbound ?  are we using this?
 SB-IMPL::*IGNORE-WILDCARDS* 
-SB-IMPL::*INCH-PTR* 
+SB-IMPL::*INCH-PTR*  ; FIXME: non-threadsafe
 SB-IMPL::*SHARP-EQUAL-ALIST* 
-SB-IMPL::*PREVIOUS-CASE* 
+SB-IMPL::*PREVIOUS-CASE* ; FIXME: printer not threadsafe
 
 *INLINE-EXPANSION-LIMIT* 
 *DERIVE-FUNCTION-TYPES* 
@@ -1095,11 +1102,8 @@ SB-IMPL::*PREVIOUS-CASE*
 *MACROEXPAND-HOOK* 
 *RANDOM-STATE* 
 
-SB-BIGNUM::*TRUNCATE-Y*
-SB-BIGNUM::*TRUNCATE-X*
-
-SB-INT:*CL-PACKAGE* 
-SB-INT:*KEYWORD-PACKAGE* 
+SB-INT:*CL-PACKAGE*                     ; readonly
+SB-INT:*KEYWORD-PACKAGE*                ; readonly
 SB-INT:*SETF-FDEFINITION-HOOK* 
 SB-INT:*DEFAULT-INIT-CHAR-FORM* 
 SB-INT:*EOF-OBJECT*