Microoptimize (signed-byte 64) type test on x86-64.
[sbcl.git] / doc / internals-notes / threading-specials
index 70e6c77..4b4cfd3 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
 
        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
        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
 
        (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
 
 
 = 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* 
 
 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* 
 
    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* 
 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::*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* 
    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::*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* 
 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::*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*
 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::*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* 
 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::*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* 
 SB-DI::*COMPONENT-BREAKPOINT-OFFSETS* 
 SB-DI::*FUN-END-COOKIES* 
 SB-DI::*FORM-NUMBER-CIRCULARITY-TABLE* 
@@ -698,7 +690,6 @@ SB-C::*BLOCK-COMPILE-ARG*
 SB-C::*COMPILER-ERROR-PRINT-LENGTH* 
 SB-C::*CONTINUATION-NUMBER* 
 SB-C::*PREV-SEGMENT*
 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* 
 SB-C::*CONTROL-DELETED-BLOCK-EVENT-INFO* 
 SB-C::*ALLOW-DEBUG-CATCH-TAG* 
 SB-C::*ID-LABELS* 
@@ -911,15 +902,6 @@ SB-KERNEL::*BUILT-IN-CLASSES*
 
 = dead stuff
 
 
 = 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
 ------------------------------------------------------------------------
 
 = unclassified
@@ -1035,7 +1017,6 @@ SB-IMPL::*INTEGER-READER-SAFE-DIGITS*
 SB-IMPL::*TIMEZONE-TABLE* 
 SB-IMPL::*BQ-COMMA-FLAG*                                ; readonly
 SB-IMPL::*PRINT-OBJECT-IS-DISABLED-P*
 SB-IMPL::*TIMEZONE-TABLE* 
 SB-IMPL::*BQ-COMMA-FLAG*                                ; readonly
 SB-IMPL::*PRINT-OBJECT-IS-DISABLED-P*
-SB-IMPL::*MERGE-SORT-TEMP-VECTOR*   ; safe, allocated per-thread
 SB-IMPL::*PROFILE-HASH-CACHE* 
 SB-IMPL::*FIXNUM-POWER--1* 
 SB-IMPL::*SHARP-EQUAL-CIRCLE-TABLE*
 SB-IMPL::*PROFILE-HASH-CACHE* 
 SB-IMPL::*FIXNUM-POWER--1* 
 SB-IMPL::*SHARP-EQUAL-CIRCLE-TABLE*
@@ -1048,7 +1029,6 @@ 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*      ; safe, allocated per-thread
 SB-IMPL::*ACTIVE-PROCESSES* 
 SB-IMPL::*SHARP-SHARP-ALIST*     
 SB-IMPL::*BASE-POWER* 
 SB-IMPL::*ACTIVE-PROCESSES* 
 SB-IMPL::*SHARP-SHARP-ALIST*     
 SB-IMPL::*BASE-POWER*