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
         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
        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
 
 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* 
 *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::*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* 
 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
 
 
 = runtime stuff
+
+
 SB-VM:*STATIC-SPACE-FREE-POINTER* 
 SB-VM:*INITIAL-DYNAMIC-SPACE-FREE-POINTER* 
 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:*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:*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 ?
 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-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
 
 *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-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:*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:*MAXIMUM-ERROR-DEPTH* 
-SB-KERNEL:*CONDITION-RESTARTS* 
+SB-KERNEL:*CONDITION-RESTARTS*                                 ; bound per-thread
 SB-KERNEL:*TYPE-SYSTEM-INITIALIZED* 
 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::*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* 
 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::*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::*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::*%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::|*%%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::|*%%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-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::*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* 
 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::*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* 
 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::*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::*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::*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* 
 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::*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::*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::*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* 
 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::*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::*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::*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::*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::*SHARP-EQUAL-ALIST* 
-SB-IMPL::*PREVIOUS-CASE* 
+SB-IMPL::*PREVIOUS-CASE* ; FIXME: printer not threadsafe
 
 *INLINE-EXPANSION-LIMIT* 
 *DERIVE-FUNCTION-TYPES* 
 
 *INLINE-EXPANSION-LIMIT* 
 *DERIVE-FUNCTION-TYPES* 
@@ -1095,11 +1102,8 @@ SB-IMPL::*PREVIOUS-CASE*
 *MACROEXPAND-HOOK* 
 *RANDOM-STATE* 
 
 *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* 
 SB-INT:*SETF-FDEFINITION-HOOK* 
 SB-INT:*DEFAULT-INIT-CHAR-FORM* 
 SB-INT:*EOF-OBJECT*