1.0.23.37: more CLOS and classoid thread safety
[sbcl.git] / doc / internals-notes / threading-specials
index 9b67b2a..56895e7 100644 (file)
@@ -15,13 +15,12 @@ The goals are
 
        When looking at a particular symbol, please annotate it in
        this file when you figure out what it's for and how it's
-       changed.  To give us some confidence that we have reasonable
-       coverage, please don't just delete it if it looks ok.  Symbols
+       changed. To give us some confidence that we have reasonable
+       coverage, please don't just delete it if it looks ok. Symbols
        shoud only be deleted here if they're obviously not specials
        at all (e.g. functions with * in their names), or if the same
-       commit actually rids SBCL of the symbol itself (as we may soon
-       do for e.g. SB-SYS:*TASK-SELF*).  Otherwise, just add a
-       comment saying "read-only" or "unused" or whatever.
+       commit actually rids SBCL of the symbol itself. Otherwise,
+       just add a comment saying "read-only" or "unused" or whatever.
 
        (3) anything else that comes to mind as potential trouble
         spots.  Global state in closures, etc etc
@@ -98,16 +97,11 @@ SB-LOOP::*LOOP-BIND-STACK*
 
 = PCL
 
-The PCL authors thought a bit about thread safety, adding
-(without-interrupts ...) in some places to protect critical forms.
-We've implemented their without-interrupts macro as an acquitision of
-*pcl-lock*, so we hope they've done it properly.
+Critical parts of PCL are protected by *world-lock* (particularly
+those dealing with class graph changes), and some with finer-grained locks.
 
-Largish parts of PCL should also be protected by the compiler lock,
-but sometimes it can be hard to tell...
-
-The most suspicious parts should probably be tested by asserting
-at various sites that the *PCL-LOCK* is held.
+accesses locked with a nice granularity
+   SB-PCL::*CLASSOID-CELLS*
 
 read-only & safe:
    SB-PCL::*BUILT-IN-TYPEP-COST* 
@@ -132,6 +126,9 @@ bound & safe:
    SB-PCL::*PRECOMPILING-LAP* 
    SB-PCL::*CACHE-MISS-VALUES-STACK* 
 
+protected by PCL-LOCK:
+   SB-PCL::*PREVIOUS-NWRAPPERS* 
+
 believed protected by the compiler-lock:
    SB-PCL::*ALL-CTORS* 
    SB-PCL::*FGENS* 
@@ -142,7 +139,6 @@ potentially unsafe:
    SB-PCL::*CLASS-EQ-SPECIALIZER-METHODS* 
    SB-PCL::*EFFECTIVE-METHOD-CACHE* 
    SB-PCL::*EQL-SPECIALIZER-METHODS* 
-   SB-PCL::*FREE-HASH-TABLES* 
    SB-PCL::*METHOD-FUNCTION-PLIST* 
    SB-PCL::*PV-KEY-TO-PV-TABLE-TABLE* 
    SB-PCL::*PV-TABLE-CACHE-UPDATE-INFO* 
@@ -186,7 +182,6 @@ SB-PCL::*EMIT-FUNCTION-P*
 SB-PCL::*ENABLE-DFUN-CONSTRUCTOR-CACHING* 
 SB-PCL::*ENABLE-EMF-CALL-TRACING-P* 
 SB-PCL::*EQL-SPECIALIZER-TABLE* 
-SB-PCL::*FIND-CLASS* 
 SB-PCL::*GLOBAL-EFFECTIVE-METHOD-GENSYMS* 
 SB-PCL::*IN-GF-ARG-INFO-P* 
 SB-PCL::*IN-PRECOMPUTE-EFFECTIVE-METHODS-P* 
@@ -205,7 +200,6 @@ SB-PCL::*OPTIMIZE-SPEED*
 SB-PCL::*PCL-CLASS-BOOT* 
 SB-PCL::*PCL-LOCK*                         ; protecting the rest
 SB-PCL::*PCL-PACKAGE* 
-SB-PCL::*PREVIOUS-NWRAPPERS* 
 SB-PCL::*RAISE-METATYPES-TO-CLASS-P* 
 SB-PCL::*READERS-FOR-THIS-DEFCLASS*
 SB-PCL::*REBOUND-EFFECTIVE-METHOD-GENSYMS*
@@ -415,7 +409,6 @@ SB-DEBUG::*DEBUG-LOOP-FUN*
 SB-DEBUG::*NESTED-DEBUG-CONDITION*
 SB-DEBUG::*STEP-BREAKPOINTS* 
 SB-DEBUG::*DEBUG-RESTARTS*
-SB-DEBUG::*CACHED-FORM-NUMBER-TRANSLATIONS*
 SB-DEBUG::*BREAKPOINTS* 
 SB-DEBUG::*TRACED-FUNS* 
 SB-DEBUG::*DEBUG-COMMANDS* 
@@ -432,7 +425,6 @@ SB-DI::*PARSING-BUFFER*
 SB-DI::*IR1-BLOCK-DEBUG-BLOCK* 
 SB-DI::*OTHER-PARSING-BUFFER* 
 SB-DI::*COMPILED-DEBUG-FUNS* 
-SB-DI::*FORM-NUMBER-TEMP* 
 SB-DI::*COMPONENT-BREAKPOINT-OFFSETS* 
 SB-DI::*FUN-END-COOKIES* 
 SB-DI::*FORM-NUMBER-CIRCULARITY-TABLE* 
@@ -539,13 +531,10 @@ SB-THREAD::*BACKGROUND-THREADS-WAIT-FOR-DEBUGGER* ; intentionally global
 *PRINT-LINES* 
 *PRINT-ESCAPE* 
 *PRINT-LEVEL* 
-*ERROR-PRINT-LENGTH*
-*ERROR-PRINT-LINES*
 *READ-EVAL* 
 *PRINT-ESCAPE* 
 *TRACE-OUTPUT* 
 SB-IMPL::*INSPECT-LENGTH* 
-*ERROR-PRINT-LEVEL*
 SB-IMPL::*DRIBBLE-STREAM*         ; what to do with dribble in threaded lisp?
 SB-IMPL::*HELP-FOR-INSPECT*       ; read-only
 *PRINT-ARRAY*                     
@@ -701,7 +690,6 @@ SB-C::*BLOCK-COMPILE-ARG*
 SB-C::*COMPILER-ERROR-PRINT-LENGTH* 
 SB-C::*CONTINUATION-NUMBER* 
 SB-C::*PREV-SEGMENT*
-SB-C::*ALL-COMPONENTS*
 SB-C::*CONTROL-DELETED-BLOCK-EVENT-INFO* 
 SB-C::*ALLOW-DEBUG-CATCH-TAG* 
 SB-C::*ID-LABELS* 
@@ -853,11 +841,7 @@ 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
-*AFTER-GC-HOOKS*     ; ditto
-*GC-NOTIFY-AFTER*    ; going away
-*GC-NOTIFY-BEFORE*   ; going away
+*AFTER-GC-HOOKS*     ; must be global
 *GC-RUN-TIME*        
 SB-INT:*N-BYTES-FREED-OR-PURIFIED* 
 
@@ -918,15 +902,6 @@ SB-KERNEL::*BUILT-IN-CLASSES*
 
 = dead stuff
 
-SB-SYS:*TASK-NOTIFY*    ; unused
-SB-SYS:*TASK-SELF*      ; unused
-SB-SYS:*TASK-DATA*      ; unused
-SB-SYS:*TYPESCRIPTPORT* ' unused
-SB-THREAD::*FOREGROUND-THREAD-STACK*    ; unused, I think
-
-
-
-
 ------------------------------------------------------------------------
 
 = unclassified