From ebc0f0ebf9efd39519ab86ba28c33abdb25443e0 Mon Sep 17 00:00:00 2001 From: Nikodemus Siivola Date: Sun, 18 Jun 2006 23:47:57 +0000 Subject: [PATCH] 0.9.13.47: Thread safety miscellania * Use localtime_r and gmtime_r instead of thread-unsafe variants in time.c. * Note gethostby* reentrancy issue in sb-bsd-sockets in BUGS. * Trivial PCL cleanups: ** *ALL-PV-TABLE-LIST* was unused -- things only got pushed on it, but never read. Commented out with a comment, removed code that did the pushing. ** *INITIAL-PV-TABLE* was unused, deleted. ** *EMPTY-PV* was unused, deleted. ** *EMPTY-CACHE* was unused, deleted. ** *MFP1* & friends implemented a two-element cache outside a hash-table. Deleted and replaced with simple hash-table access. Boinkmarks will show the truth. ** Moved redundant toplevel SETQs to the original DEFPARAMTER of various *FOO-COST*s. How is this thread-safety related? It happened while flagging some PCL globals as safe and others as worthy of attention in doc/internals-notes/threading-specials. Also sorted the names, so *THE-FOO*s stand out in one place -- seeming to me as least-likely causes of trouble. * Whitespace. --- BUGS | 2 +- NEWS | 2 + doc/internals-notes/threading-specials | 497 ++++++++++++++++---------------- src/code/win32.lisp | 14 +- src/pcl/boot.lisp | 33 +-- src/pcl/cache.lisp | 1 - src/pcl/dfun.lisp | 19 +- src/pcl/vector.lisp | 44 +-- src/runtime/time.c | 4 +- tools-for-build/grovel-headers.c | 2 +- version.lisp-expr | 2 +- 11 files changed, 300 insertions(+), 320 deletions(-) diff --git a/BUGS b/BUGS index f73845f..890f957 100644 --- a/BUGS +++ b/BUGS @@ -900,7 +900,7 @@ WORKAROUND: strongly suspected problems, as of 0.8.3.10: please update this bug instead of creating new ones - localtime() - called for timezone calculations in code/time.lisp + gethostbyname, gethostbyaddr in sb-bsd-sockets 284: Thread safety: special variables There are lots of special variables in SBCL, and I feel sure that at diff --git a/NEWS b/NEWS index 926189a..8e8829f 100644 --- a/NEWS +++ b/NEWS @@ -20,6 +20,8 @@ changes in sbcl-0.9.14 relative to sbcl-0.9.13: down to an SB-SYS:FD-STREAM, allowing direct communication in more cases. Temporary files and pipes are still used as a fallback strategy. + * thread-safety: DECODE-UNIVERSAL-TIME & GET-DECODED-TIME depended + on the non-reentrant C functions localtime(3) and gmtime(3). * bug fix: global optimization policy was not visible in LOCALLY and MACROLET forms. * bug fix: class objects can be used as specializers in methods. diff --git a/doc/internals-notes/threading-specials b/doc/internals-notes/threading-specials index b76218d..d27b248 100644 --- a/doc/internals-notes/threading-specials +++ b/doc/internals-notes/threading-specials @@ -103,278 +103,287 @@ The PCL authors thought a bit about thread safety, adding We've implemented their without-interrupts macro as an acquitision of *pcl-lock*, so we hope they've done it properly. -SB-PCL::*STRUCTURE-TYPEP-COST* -SB-PCL::*SLOT-NAME-LISTS-OUTER* -SB-PCL::*THE-WRAPPER-OF-T* -SB-PCL::*CREATE-CLASSES-FROM-INTERNAL-STRUCTURE-DEFINITIONS-P* -SB-PCL::*WRITERS-FOR-THIS-DEFCLASS* -SB-PCL::*BOOT-STATE* ; pseudoconstant in finished lisp (not in bootstrap) -SB-PCL::*THE-WRAPPER-OF-BIT-VECTOR* +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. + +read-only & safe: + SB-PCL::*BUILT-IN-TYPEP-COST* + SB-PCL::*CACHE-EXPAND-THRESHOLD* + SB-PCL::*CACHE-LOOKUP-COST* + SB-PCL::*CASE-TABLE-LIMIT* + SB-PCL::*CHECK-CACHE-P* + SB-PCL::*COMPUTE-STD-CPL-CLASS->ENTRY-TABLE-SIZE* + SB-PCL::*EQ-CASE-TABLE-LIMIT* + SB-PCL::*NON-BUILT-IN-TYPEP-COST* + SB-PCL::*NON-VAR-DECLARATIONS* + SB-PCL::*SECONDARY-DFUN-CALL-COST* + SB-PCL::*SGF-WRAPPER* + SB-PCL::*STRUCTURE-TYPEP-COST* + SB-PCL::*UNSPECIFIC-ARG* + SB-PCL::*VAR-DECLARATIONS-WITH-ARG* + SB-PCL::*WRAPPER-OF-COST* + +bound & safe: + SB-PCL::*ALLOW-FORWARD-REFERENCED-CLASSES-IN-CPL-P* + SB-PCL::*IN-OBSOLETE-INSTANCE-TRAP* + SB-PCL::*PRECOMPILING-LAP* + +believed protected by the compiler-lock: + SB-PCL::*ALL-CTORS* + SB-PCL::*FGENS* + SB-PCL::*SGF-DFUN-STATE-INDEX* + SB-PCL::*VAR-DECLARATIONS-WITHOUT-ARG* + +potentially unsafe: + SB-PCL::*CACHE-MISS-VALUES-STACK* + 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::*PVS* + SB-PCL::*SLOT-NAME-LISTS-INNER* + SB-PCL::*SLOT-NAME-LISTS-OUTER* + +debugging / profiling -- low relevance: + SB-PCL::*DFUN-COUNT* + SB-PCL::*ALLOW-EMF-CALL-TRACING-P* + +build-options and bootstrap machinery -- irrelevant for user-code: + SB-PCL::*ALLOW-EXPERIMENTAL-SPECIALIZERS-P* + SB-PCL::*BOOT-STATE* ; pseudoconstant in finished lisp (not in bootstrap) + SB-PCL::*BUILT-IN-CLASS-SYMBOLS* + SB-PCL::*BUILT-IN-CLASSES* + SB-PCL::*BUILT-IN-WRAPPER-SYMBOLS* + SB-PCL::*CHECKING-OR-CACHING-LIST* + ;;; global, frobbed on generic function ;;; initialization/reinitialization, method precomputation, and ;;; compute-effective-method. Potentially unsafe, may be OK because ;;; of *pcl-lock*, but could easily be liable to races. -SB-PCL::*EFFECTIVE-METHOD-CACHE* -SB-PCL::*THE-WRAPPER-OF-COMPLEX-DOUBLE-FLOAT* -SB-PCL::*THE-CLASS-COMPLEX-DOUBLE-FLOAT* -SB-PCL::*THE-WRAPPER-OF-SIMPLE-ARRAY-SINGLE-FLOAT* -SB-PCL::*CACHE-LOOKUP-COST* -SB-PCL::*SLOT-NAME-LISTS-INNER* -SB-PCL::*MF2P* -SB-PCL::*THE-CLASS-RATIONAL* -SB-PCL::WRAPPER-CLASS* -SB-PCL::*PREVIOUS-NWRAPPERS* -SB-PCL::*MF1* -SB-PCL::*THE-CLASS-STANDARD-OBJECT* -SB-PCL::*THE-CLASS-CONDITION-DIRECT-SLOT-DEFINITION* -SB-PCL::*THE-CLASS-RATIO* -SB-PCL::*SHOW-MAKE-UNORDERED-METHODS-EMF-CALLS* -SB-PCL::*ALL-CTORS* -SB-PCL::*SUBTYPEP -SB-PCL::*THE-WRAPPER-OF-LRA* -SB-PCL::*INITFUNCTIONS-FOR-THIS-DEFCLASS* -SB-PCL::*STANDARD-SLOT-VALUE-USING-CLASS-METHOD* -SB-PCL::*EMPTY-PV* -SB-PCL::*CACHE-EXPAND-THRESHOLD* -SB-PCL::*THE-CLASS-INTEGER* -SB-PCL::*SGF-DFUN-STATE-INDEX* -SB-PCL::*ALL-PV-TABLE-LIST* -SB-PCL::*THE-WRAPPER-OF-RANDOM-CLASS* -SB-PCL::*THE-CLASS-SIMPLE-ARRAY-COMPLEX-SINGLE-FLOAT* -SB-PCL::*THE-CLASS-FDEFN* -SB-PCL::*THE-CLASS-SIMPLE-ARRAY-UNSIGNED-BYTE-32* -SB-PCL::*THE-WRAPPER-OF-SIMPLE-VECTOR* -SB-PCL::*CHECK-CACHE-P* -SB-PCL::*SGF-WRAPPER* + +SB-PCL::*CONDITION-SETF-SLOT-VALUE-USING-CLASS-METHOD* +SB-PCL::*CONDITION-SLOT-BOUNDP-USING-CLASS-METHOD* SB-PCL::*CONDITION-SLOT-VALUE-USING-CLASS-METHOD* -SB-PCL::*THE-WRAPPER-OF-SIMPLE-BIT-VECTOR* -SB-PCL::*THE-CLASS-SPECIALIZER* -SB-PCL::*THE-CLASS-SIMPLE-ARRAY-COMPLEX-DOUBLE-FLOAT* -SB-PCL::*THE-CLASS-STANDARD-CLASS* -SB-PCL::*THE-CLASS-STANDARD-ACCESSOR-METHOD* -SB-PCL::*THE-CLASS-STANDARD-READER-METHOD* -SB-PCL::*THE-WRAPPER-OF-DOUBLE-FLOAT* -SB-PCL::*NON-BUILT-IN-TYPEP-COST* -SB-PCL::*THE-CLASS-SIMPLE-ARRAY-UNSIGNED-BYTE-8* -SB-PCL::*THE-CLASS-DOCUMENTATION-MIXIN* -SB-PCL::*EMF-CALL-TRACE-SIZE* -SB-PCL::*OLD-C-A-M-GF-METHODS* -SB-PCL::*EMPTY-CACHE* -SB-PCL::*THE-WRAPPER-OF-SYMBOL* -SB-PCL::*THE-CLASS-STANDARD-METHOD-COMBINATION* -SB-PCL::*THE-WRAPPER-OF-SIMPLE-ARRAY-DOUBLE-FLOAT* -SB-PCL::*THE-CLASS-METHOD* -SB-PCL::*PRECOMPILING-LAP* -SB-PCL::*STRUCTURE-SLOT-BOUNDP-USING-CLASS-METHOD* -SB-PCL::*ENABLE-DFUN-CONSTRUCTOR-CACHING* -SB-PCL::*THE-CLASS-CONDITION-EFFECTIVE-SLOT-DEFINITION* -SB-PCL::*THE-WRAPPER-OF-STRUCTURE-OBJECT* -SB-PCL::*THE-CLASS-WEAK-POINTER* -SB-PCL::*STANDARD-SLOT-BOUNDP-USING-CLASS-METHOD* -SB-PCL::*THE-CLASS-FUNCALLABLE-STANDARD-OBJECT* -SB-PCL::*VAR-DECLARATIONS-WITH-ARG* -SB-PCL::*PV-TABLE-CACHE-UPDATE-INFO* -SB-PCL::*THE-WRAPPER-OF-STRING* -SB-PCL::*THE-CLASS-CONDITION* -SB-PCL::*THE-CLASS-PCL-CLASS* -SB-PCL::*THE-CLASS-CLASS* -SB-PCL::*PCL-LOCK* ; protecting the rest +SB-PCL::*CREATE-CLASSES-FROM-INTERNAL-STRUCTURE-DEFINITIONS-P* +SB-PCL::*DFUN-ARG-SYMBOLS* +SB-PCL::*DFUN-CONSTRUCTORS* +SB-PCL::*DFUN-LIST* +SB-PCL::*DFUN-MISS-GFS-ON-STACK* +SB-PCL::*EARLY-CLASS-DEFINITIONS* +SB-PCL::*EARLY-CLASS-PREDICATES* +SB-PCL::*EARLY-CLASS-SLOTS* SB-PCL::*EARLY-P* -SB-PCL::*PCL-CLASS-BOOT* -SB-PCL::*THE-CLASS-EFFECTIVE-SLOT-DEFINITION* -SB-PCL::*THE-WRAPPER-OF-CONS* -SB-PCL::*THE-CLASS-LRA* -SB-PCL::*THE-CLASS-EQL-SPECIALIZER* -SB-PCL::*EQL-SPECIALIZER-METHODS* -SB-PCL::*THE-WRAPPER-OF-FLOAT* -SB-PCL::*INITIAL-PV-TABLE* -SB-PCL::*THE-CLASS-COMPLEX-SINGLE-FLOAT* -SB-PCL::*STRUCTURE-SLOT-VALUE-USING-CLASS-METHOD* SB-PCL::*EMF-CALL-TRACE* -SB-PCL::*IN-OBSOLETE-INSTANCE-TRAP* -SB-PCL::*BUILT-IN-CLASS-SYMBOLS* -SB-PCL::*FREE-HASH-TABLES* -SB-PCL::*THE-WRAPPER-OF-WEAK-POINTER* -SB-PCL::*THE-CLASS-RANDOM-CLASS* -SB-PCL::*PVS* -SB-PCL::*THE-WRAPPER-OF-REAL* -SB-PCL::*LONG-METHOD-COMBINATION-FUNCTIONS* +SB-PCL::*EMF-CALL-TRACE-INDEX* +SB-PCL::*EMF-CALL-TRACE-SIZE* SB-PCL::*EMIT-FUNCTION-P* -SB-PCL::*THE-CLASS-DOUBLE-FLOAT* -SB-PCL::*NAME->CLASS->SLOTD-TABLE* -SB-PCL::*DFUN-COUNT* -SB-PCL::*COMPUTE-STD-CPL-CLASS->ENTRY-TABLE-SIZE* -SB-PCL::*THE-CLASS-SYMBOL* -SB-PCL::*THE-WRAPPER-OF-SIMPLE-ARRAY-SIGNED-BYTE-16* -SB-PCL::*THE-CLASS-STANDARD-DIRECT-SLOT-DEFINITION* -SB-PCL::*THE-CLASS-EXACT-CLASS-SPECIALIZER* -SB-PCL::*THE-CLASS-FLOAT* -SB-PCL::*THE-CLASS-BASE-CHAR* -SB-PCL::*PV-KEY-TO-PV-TABLE-TABLE* -SB-PCL::*THE-CLASS-STD-CLASS* -SB-PCL::*THE-CLASS-SLOT-OBJECT* -SB-PCL::*OPTIMIZE-SPEED* -SB-PCL::*THE-CLASS-STRUCTURE-EFFECTIVE-SLOT-DEFINITION* -SB-PCL::*VAR-DECLARATIONS-WITHOUT-ARG* -SB-PCL::*THE-CLASS-INSTANCE* -SB-PCL::*THE-WRAPPER-OF-SIMPLE-ARRAY-UNSIGNED-BYTE-4* -SB-PCL::*THE-CLASS-CONS* -SB-PCL::*THE-WRAPPER-OF-FIXNUM* -SB-PCL::*THE-SYSTEM-II-METHOD* -SB-PCL::*THE-CLASS-SIMPLE-ARRAY-SIGNED-BYTE-8* -SB-PCL::*THE-WRAPPER-OF-SIMPLE-ARRAY-UNSIGNED-BYTE-16* -SB-PCL::*THE-WRAPPER-OF-COMPLEX-SINGLE-FLOAT* -SB-PCL::*THE-WRAPPER-OF-SINGLE-FLOAT* -SB-PCL::*DFUN-MISS-GFS-ON-STACK* -SB-PCL::*THE-CLASS-CONDITION-CLASS* -SB-PCL::*THE-WRAPPER-OF-BIGNUM* -SB-PCL::*THE-CLASS-SPECIALIZER-WITH-OBJECT* -SB-PCL::*THE-CLASS-COMPLEX* -SB-PCL::*THE-WRAPPER-OF-INTEGER* -SB-PCL::*CONDITION-SLOT-BOUNDP-USING-CLASS-METHOD* -SB-PCL::*THE-CLASS-CHARACTER* -SB-PCL::*EARLY-CLASS-DEFINITIONS* -SB-PCL::*THE-WRAPPER-OF-NULL* +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::*INITFUNCTIONS-FOR-THIS-DEFCLASS* SB-PCL::*INTERNAL-PCL-GENERALIZED-FUN-NAME-SYMBOLS* -SB-PCL::*THE-CLASS-STRUCTURE-CLASS* -SB-PCL::*UNSPECIFIC-ARG* -SB-PCL::*SECONDARY-DFUN-CALL-COST* -SB-PCL::*THE-CLASS-SIMPLE-STRING* -SB-PCL::*THE-CLASS-STRUCTURE-SLOT-DEFINITION* -SB-PCL::*METHOD-FUNCTION-PLIST* -SB-PCL::*STANDARD-METHOD-COMBINATION* SB-PCL::*LAZY-DFUN-COMPUTE-P* -SB-PCL::*THE-WRAPPER-OF-SIMPLE-ARRAY-SIGNED-BYTE-8* -SB-PCL::*THE-CLASS-STRING* -SB-PCL::*THE-WRAPPER-OF-SIMPLE-ARRAY-UNSIGNED-BYTE-2* -SB-PCL::*EQL-SPECIALIZER-TABLE* -SB-PCL::*THE-WRAPPER-OF-SIMPLE-ARRAY-COMPLEX-DOUBLE-FLOAT* -SB-PCL::*BUILT-IN-WRAPPER-SYMBOLS* -SB-PCL::*THE-CLASS-STREAM* -SB-PCL::*CLASS-EQ-SPECIALIZER-METHODS* -SB-PCL::*THE-CLASS-REAL* -SB-PCL::*THE-WRAPPER-OF-SIMPLE-ARRAY-UNSIGNED-BYTE-32* -SB-PCL::*THE-CLASS-SIMPLE-VECTOR* -SB-PCL::*THE-CLASS-GENERIC-FUNCTION* -SB-PCL::*STANDARD-SETF-SLOT-VALUE-USING-CLASS-METHOD* -SB-PCL::*STD-CAM-METHODS* -SB-PCL::*THE-CLASS-STRUCTURE-DIRECT-SLOT-DEFINITION* -SB-PCL::*THE-WRAPPER-OF-FDEFN* -SB-PCL::*THE-WRAPPER-OF-VECTOR* -SB-PCL::*THE-CLASS-NULL* +SB-PCL::*LONG-METHOD-COMBINATION-FUNCTIONS* +SB-PCL::*MINIMUM-CACHE-SIZE-TO-LIST* +SB-PCL::*NAME->CLASS->SLOTD-TABLE* +SB-PCL::*NEW-CLASS* SB-PCL::*NORMALIZE-TYPE +SB-PCL::*NOT-IN-CACHE* +SB-PCL::*OLD-C-A-M-GF-METHODS* +SB-PCL::*OPTIMIZE-CACHE-FUNCTIONS-P* +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* -SB-PCL::*THE-CLASS-NUMBER* -SB-PCL::*THE-WRAPPER-OF-SIMPLE-STRING* -SB-PCL::*THE-CLASS-SIMPLE-ARRAY-SIGNED-BYTE-30* -SB-PCL::*MF2CP* -SB-PCL::*THE-CLASS-DEPENDENT-UPDATE-MIXIN* -SB-PCL::*THE-WRAPPER-OF-SIMPLE-ARRAY-SIGNED-BYTE-32* -SB-PCL::*THE-CLASS-VECTOR* -SB-PCL::*FIND-CLASS* -SB-PCL::*THE-CLASS-SIMPLE-ARRAY-SIGNED-BYTE-16* +SB-PCL::*SGF-ARG-INFO-INDEX* +SB-PCL::*SGF-METHOD-CLASS-INDEX* +SB-PCL::*SGF-METHODS-INDEX* +SB-PCL::*SGF-NAME-INDEX* +SB-PCL::*SGF-SLOTS-INIT* +SB-PCL::*SHOW-MAKE-UNORDERED-METHODS-EMF-CALLS* +SB-PCL::*SLOT-NAMES-FOR-THIS-DEFCLASS* +SB-PCL::*SLOT-VECTOR-SYMBOLS* +SB-PCL::*STANDARD-CLASSES* +SB-PCL::*STANDARD-METHOD-COMBINATION* +SB-PCL::*STANDARD-SETF-SLOT-VALUE-USING-CLASS-METHOD* +SB-PCL::*STANDARD-SLOT-BOUNDP-USING-CLASS-METHOD* SB-PCL::*STANDARD-SLOT-LOCATIONS* -SB-PCL::*FGENS* -SB-PCL::*PCL-PACKAGE* +SB-PCL::*STANDARD-SLOT-VALUE-USING-CLASS-METHOD* +SB-PCL::*STD-CAM-METHODS* +SB-PCL::*STRUCTURE-SETF-SLOT-VALUE-USING-CLASS-METHOD* +SB-PCL::*STRUCTURE-SLOT-BOUNDP-USING-CLASS-METHOD* +SB-PCL::*STRUCTURE-SLOT-VALUE-USING-CLASS-METHOD* +SB-PCL::*SUBTYPEP SB-PCL::*THE-CLASS-ARRAY* -SB-PCL::*CASE-TABLE-LIMIT* -SB-PCL::*THE-CLASS-METHOD-COMBINATION* +SB-PCL::*THE-CLASS-BASE-CHAR* +SB-PCL::*THE-CLASS-BIGNUM* +SB-PCL::*THE-CLASS-BIT-VECTOR* +SB-PCL::*THE-CLASS-BUILT-IN-CLASS* +SB-PCL::*THE-CLASS-CHARACTER* +SB-PCL::*THE-CLASS-CLASS* +SB-PCL::*THE-CLASS-CLASS-EQ-SPECIALIZER* +SB-PCL::*THE-CLASS-CLASS-PROTOTYPE-SPECIALIZER* +SB-PCL::*THE-CLASS-CODE-COMPONENT* +SB-PCL::*THE-CLASS-COMPLEX* +SB-PCL::*THE-CLASS-COMPLEX-DOUBLE-FLOAT* +SB-PCL::*THE-CLASS-COMPLEX-SINGLE-FLOAT* +SB-PCL::*THE-CLASS-CONDITION* +SB-PCL::*THE-CLASS-CONDITION-CLASS* +SB-PCL::*THE-CLASS-CONDITION-DIRECT-SLOT-DEFINITION* +SB-PCL::*THE-CLASS-CONDITION-EFFECTIVE-SLOT-DEFINITION* +SB-PCL::*THE-CLASS-CONDITION-SLOT-DEFINITION* +SB-PCL::*THE-CLASS-CONS* +SB-PCL::*THE-CLASS-DEFINITION-SOURCE-MIXIN* +SB-PCL::*THE-CLASS-DEPENDENT-UPDATE-MIXIN* SB-PCL::*THE-CLASS-DIRECT-SLOT-DEFINITION* +SB-PCL::*THE-CLASS-DOCUMENTATION-MIXIN* +SB-PCL::*THE-CLASS-DOUBLE-FLOAT* +SB-PCL::*THE-CLASS-EFFECTIVE-SLOT-DEFINITION* +SB-PCL::*THE-CLASS-EQL-SPECIALIZER* +SB-PCL::*THE-CLASS-EXACT-CLASS-SPECIALIZER* +SB-PCL::*THE-CLASS-FDEFN* SB-PCL::*THE-CLASS-FIXNUM* -SB-PCL::*THE-CLASS-STD-OBJECT* -SB-PCL::*THE-CLASS-SIMPLE-ARRAY-SIGNED-BYTE-32* -SB-PCL::*EARLY-CLASS-PREDICATES* -SB-PCL::*WRAPPER-OF-COST* -SB-PCL::*STANDARD-CLASSES* +SB-PCL::*THE-CLASS-FLOAT* +SB-PCL::*THE-CLASS-FORWARD-REFERENCED-CLASS* +SB-PCL::*THE-CLASS-FUNCALLABLE-INSTANCE* +SB-PCL::*THE-CLASS-FUNCALLABLE-STANDARD-CLASS* +SB-PCL::*THE-CLASS-FUNCALLABLE-STANDARD-OBJECT* +SB-PCL::*THE-CLASS-FUNCTION* +SB-PCL::*THE-CLASS-GENERIC-FUNCTION* +SB-PCL::*THE-CLASS-INSTANCE* +SB-PCL::*THE-CLASS-INTEGER* +SB-PCL::*THE-CLASS-LIST* SB-PCL::*THE-CLASS-LONG-METHOD-COMBINATION* -SB-PCL::*READERS-FOR-THIS-DEFCLASS* -SB-PCL::*THE-WRAPPER-OF-SIMPLE-ARRAY-SIGNED-BYTE-30* -SB-PCL::*EMF-CALL-TRACE-INDEX* -SB-PCL::*BUILT-IN-TYPEP-COST* -SB-PCL::*THE-CLASS-STANDARD-SLOT-DEFINITION* +SB-PCL::*THE-CLASS-LRA* +SB-PCL::*THE-CLASS-METHOD* +SB-PCL::*THE-CLASS-METHOD-COMBINATION* +SB-PCL::*THE-CLASS-NULL* +SB-PCL::*THE-CLASS-NUMBER* +SB-PCL::*THE-CLASS-PCL-CLASS* SB-PCL::*THE-CLASS-PLIST-MIXIN* -SB-PCL::*CONDITION-SETF-SLOT-VALUE-USING-CLASS-METHOD* -SB-PCL::*THE-CLASS-BIGNUM* -SB-PCL::*THE-WRAPPER-OF-CODE-COMPONENT* -SB-PCL::*THE-ESLOTD-STANDARD-CLASS-SLOTS* -SB-PCL::*SLOT-NAMES-FOR-THIS-DEFCLASS* -SB-PCL::*THE-CLASS-FUNCTION* -SB-PCL::*THE-WRAPPER-OF-SYSTEM-AREA-POINTER* +SB-PCL::*THE-CLASS-RANDOM-CLASS* +SB-PCL::*THE-CLASS-RATIO* +SB-PCL::*THE-CLASS-RATIONAL* +SB-PCL::*THE-CLASS-REAL* +SB-PCL::*THE-CLASS-SEQUENCE* SB-PCL::*THE-CLASS-SIMPLE-ARRAY* -SB-PCL::*THE-CLASS-STANDARD-EFFECTIVE-SLOT-DEFINITION* -SB-PCL::*THE-WRAPPER-OF-SEQUENCE* -SB-PCL::*THE-CLASS-FUNCALLABLE-STANDARD-CLASS* -SB-PCL::*THE-CLASS-SYSTEM-AREA-POINTER* -SB-PCL::*THE-WRAPPER-OF-LIST* -SB-PCL::*THE-CLASS-BUILT-IN-CLASS* -SB-PCL::*STRUCTURE-SETF-SLOT-VALUE-USING-CLASS-METHOD* +SB-PCL::*THE-CLASS-SIMPLE-ARRAY-COMPLEX-DOUBLE-FLOAT* +SB-PCL::*THE-CLASS-SIMPLE-ARRAY-COMPLEX-SINGLE-FLOAT* +SB-PCL::*THE-CLASS-SIMPLE-ARRAY-DOUBLE-FLOAT* +SB-PCL::*THE-CLASS-SIMPLE-ARRAY-SIGNED-BYTE-16* +SB-PCL::*THE-CLASS-SIMPLE-ARRAY-SIGNED-BYTE-30* +SB-PCL::*THE-CLASS-SIMPLE-ARRAY-SIGNED-BYTE-32* +SB-PCL::*THE-CLASS-SIMPLE-ARRAY-SIGNED-BYTE-8* +SB-PCL::*THE-CLASS-SIMPLE-ARRAY-SINGLE-FLOAT* +SB-PCL::*THE-CLASS-SIMPLE-ARRAY-UNSIGNED-BYTE-16* +SB-PCL::*THE-CLASS-SIMPLE-ARRAY-UNSIGNED-BYTE-2* +SB-PCL::*THE-CLASS-SIMPLE-ARRAY-UNSIGNED-BYTE-32* SB-PCL::*THE-CLASS-SIMPLE-ARRAY-UNSIGNED-BYTE-4* +SB-PCL::*THE-CLASS-SIMPLE-ARRAY-UNSIGNED-BYTE-8* SB-PCL::*THE-CLASS-SIMPLE-BIT-VECTOR* -SB-PCL::*THE-WRAPPER-OF-SIMPLE-ARRAY-COMPLEX-SINGLE-FLOAT* -SB-PCL::*GLOBAL-EFFECTIVE-METHOD-GENSYMS* -SB-PCL::*DFUN-CONSTRUCTORS* -SB-PCL::*THE-CLASS-CODE-COMPONENT* +SB-PCL::*THE-CLASS-SIMPLE-STRING* +SB-PCL::*THE-CLASS-SIMPLE-VECTOR* +SB-PCL::*THE-CLASS-SINGLE-FLOAT* +SB-PCL::*THE-CLASS-SLOT-CLASS* +SB-PCL::*THE-CLASS-SLOT-DEFINITION* +SB-PCL::*THE-CLASS-SLOT-OBJECT* +SB-PCL::*THE-CLASS-SPECIALIZER* +SB-PCL::*THE-CLASS-SPECIALIZER-WITH-OBJECT* +SB-PCL::*THE-CLASS-STANDARD-ACCESSOR-METHOD* +SB-PCL::*THE-CLASS-STANDARD-BOUNDP-METHOD* +SB-PCL::*THE-CLASS-STANDARD-CLASS* +SB-PCL::*THE-CLASS-STANDARD-DIRECT-SLOT-DEFINITION* +SB-PCL::*THE-CLASS-STANDARD-EFFECTIVE-SLOT-DEFINITION* +SB-PCL::*THE-CLASS-STANDARD-GENERIC-FUNCTION* +SB-PCL::*THE-CLASS-STANDARD-METHOD* +SB-PCL::*THE-CLASS-STANDARD-METHOD-COMBINATION* +SB-PCL::*THE-CLASS-STANDARD-OBJECT* +SB-PCL::*THE-CLASS-STANDARD-READER-METHOD* +SB-PCL::*THE-CLASS-STANDARD-SLOT-DEFINITION* SB-PCL::*THE-CLASS-STANDARD-WRITER-METHOD* -SB-PCL::*NON-VAR-DECLARATIONS* -SB-PCL::*IN-PRECOMPUTE-EFFECTIVE-METHODS-P* -SB-PCL::*CHECKING-OR-CACHING-LIST* -SB-PCL::*THE-CLASS-BIT-VECTOR* +SB-PCL::*THE-CLASS-STD-CLASS* +SB-PCL::*THE-CLASS-STD-OBJECT* +SB-PCL::*THE-CLASS-STREAM* +SB-PCL::*THE-CLASS-STRING* +SB-PCL::*THE-CLASS-STRUCTURE-CLASS* +SB-PCL::*THE-CLASS-STRUCTURE-DIRECT-SLOT-DEFINITION* +SB-PCL::*THE-CLASS-STRUCTURE-EFFECTIVE-SLOT-DEFINITION* +SB-PCL::*THE-CLASS-STRUCTURE-OBJECT* +SB-PCL::*THE-CLASS-STRUCTURE-SLOT-DEFINITION* +SB-PCL::*THE-CLASS-SYMBOL* +SB-PCL::*THE-CLASS-SYSTEM-AREA-POINTER* +SB-PCL::*THE-CLASS-T* +SB-PCL::*THE-CLASS-VECTOR* +SB-PCL::*THE-CLASS-WEAK-POINTER* +SB-PCL::*THE-ESLOTD-FUNCALLABLE-STANDARD-CLASS-SLOTS* +SB-PCL::*THE-ESLOTD-STANDARD-CLASS-SLOTS* +SB-PCL::*THE-SYSTEM-II-METHOD* +SB-PCL::*THE-SYSTEM-SI-METHOD* +SB-PCL::*THE-WRAPPER-OF-ARRAY* +SB-PCL::*THE-WRAPPER-OF-BASE-CHAR* +SB-PCL::*THE-WRAPPER-OF-BIGNUM* +SB-PCL::*THE-WRAPPER-OF-BIT-VECTOR* SB-PCL::*THE-WRAPPER-OF-CHARACTER* +SB-PCL::*THE-WRAPPER-OF-CODE-COMPONENT* SB-PCL::*THE-WRAPPER-OF-COMPLEX* -SB-PCL::*BUILT-IN-CLASSES* -SB-PCL::*ALLOW-EXPERIMENTAL-SPECIALIZERS-P* -SB-PCL::*ALLOW-EMF-CALL-TRACING-P* -SB-PCL::*SGF-METHOD-CLASS-INDEX* -SB-PCL::*SGF-METHODS-INDEX* +SB-PCL::*THE-WRAPPER-OF-COMPLEX-DOUBLE-FLOAT* +SB-PCL::*THE-WRAPPER-OF-COMPLEX-SINGLE-FLOAT* +SB-PCL::*THE-WRAPPER-OF-CONS* +SB-PCL::*THE-WRAPPER-OF-DOUBLE-FLOAT* +SB-PCL::*THE-WRAPPER-OF-FDEFN* +SB-PCL::*THE-WRAPPER-OF-FIXNUM* +SB-PCL::*THE-WRAPPER-OF-FLOAT* +SB-PCL::*THE-WRAPPER-OF-INTEGER* +SB-PCL::*THE-WRAPPER-OF-LIST* +SB-PCL::*THE-WRAPPER-OF-LRA* +SB-PCL::*THE-WRAPPER-OF-NULL* SB-PCL::*THE-WRAPPER-OF-NUMBER* +SB-PCL::*THE-WRAPPER-OF-RANDOM-CLASS* SB-PCL::*THE-WRAPPER-OF-RATIO* -SB-PCL::*RAISE-METATYPES-TO-CLASS-P* -SB-PCL::*EARLY-CLASS-SLOTS* -SB-PCL::*THE-WRAPPER-OF-SIMPLE-ARRAY* -SB-PCL::*MF1CP* SB-PCL::*THE-WRAPPER-OF-RATIONAL* -SB-PCL::*THE-CLASS-SIMPLE-ARRAY-UNSIGNED-BYTE-16* -SB-PCL::*THE-WRAPPER-OF-ARRAY* -SB-PCL::*THE-ESLOTD-FUNCALLABLE-STANDARD-CLASS-SLOTS* -SB-PCL::*THE-CLASS-SLOT-CLASS* -SB-PCL::*THE-CLASS-SLOT-DEFINITION* -SB-PCL::*OPTIMIZE-CACHE-FUNCTIONS-P* -SB-PCL::*MF2* -SB-PCL::*THE-CLASS-SEQUENCE* -SB-PCL::*EQ-CASE-TABLE-LIMIT* -SB-PCL::*THE-CLASS-STRUCTURE-OBJECT* -SB-PCL::*THE-CLASS-SIMPLE-ARRAY-DOUBLE-FLOAT* -SB-PCL::*SLOT-VECTOR-SYMBOLS* -SB-PCL::*ENABLE-EMF-CALL-TRACING-P* -SB-PCL::*THE-CLASS-SINGLE-FLOAT* -SB-PCL::*THE-SYSTEM-SI-METHOD* -SB-PCL::*THE-WRAPPER-OF-BASE-CHAR* -SB-PCL::*THE-CLASS-CONDITION-SLOT-DEFINITION* -SB-PCL::*DFUN-LIST* -SB-PCL::*THE-CLASS-STANDARD-METHOD* -SB-PCL::*DFUN-ARG-SYMBOLS* -SB-PCL::*NOT-IN-CACHE* -SB-PCL::*THE-CLASS-STANDARD-BOUNDP-METHOD* -SB-PCL::*THE-CLASS-LIST* -SB-PCL::*NEW-CLASS* +SB-PCL::*THE-WRAPPER-OF-REAL* +SB-PCL::*THE-WRAPPER-OF-SEQUENCE* +SB-PCL::*THE-WRAPPER-OF-SIMPLE-ARRAY* +SB-PCL::*THE-WRAPPER-OF-SIMPLE-ARRAY-COMPLEX-DOUBLE-FLOAT* +SB-PCL::*THE-WRAPPER-OF-SIMPLE-ARRAY-COMPLEX-SINGLE-FLOAT* +SB-PCL::*THE-WRAPPER-OF-SIMPLE-ARRAY-DOUBLE-FLOAT* +SB-PCL::*THE-WRAPPER-OF-SIMPLE-ARRAY-SIGNED-BYTE-16* +SB-PCL::*THE-WRAPPER-OF-SIMPLE-ARRAY-SIGNED-BYTE-30* +SB-PCL::*THE-WRAPPER-OF-SIMPLE-ARRAY-SIGNED-BYTE-32* +SB-PCL::*THE-WRAPPER-OF-SIMPLE-ARRAY-SIGNED-BYTE-8* +SB-PCL::*THE-WRAPPER-OF-SIMPLE-ARRAY-SINGLE-FLOAT* +SB-PCL::*THE-WRAPPER-OF-SIMPLE-ARRAY-UNSIGNED-BYTE-16* +SB-PCL::*THE-WRAPPER-OF-SIMPLE-ARRAY-UNSIGNED-BYTE-2* +SB-PCL::*THE-WRAPPER-OF-SIMPLE-ARRAY-UNSIGNED-BYTE-32* +SB-PCL::*THE-WRAPPER-OF-SIMPLE-ARRAY-UNSIGNED-BYTE-4* SB-PCL::*THE-WRAPPER-OF-SIMPLE-ARRAY-UNSIGNED-BYTE-8* -SB-PCL::*THE-CLASS-SIMPLE-ARRAY-UNSIGNED-BYTE-2* -SB-PCL::*THE-CLASS-CLASS-EQ-SPECIALIZER* -SB-PCL::*THE-CLASS-FUNCALLABLE-INSTANCE* -SB-PCL::*IN-GF-ARG-INFO-P* -SB-PCL::*THE-CLASS-STANDARD-GENERIC-FUNCTION* -SB-PCL::*SGF-ARG-INFO-INDEX* -SB-PCL::*ALLOW-FORWARD-REFERENCED-CLASSES-IN-CPL-P* -SB-PCL::*THE-CLASS-FORWARD-REFERENCED-CLASS* -SB-PCL::*THE-CLASS-SIMPLE-ARRAY-SINGLE-FLOAT* -SB-PCL::*MF1P* -SB-PCL::*MINIMUM-CACHE-SIZE-TO-LIST* -SB-PCL::*THE-CLASS-CLASS-PROTOTYPE-SPECIALIZER* -SB-PCL::*THE-CLASS-T* -SB-PCL::*CACHE-MISS-VALUES-STACK* -SB-PCL::*SGF-NAME-INDEX* -SB-PCL::*THE-CLASS-DEFINITION-SOURCE-MIXIN* -SB-PCL::*SGF-SLOTS-INIT* +SB-PCL::*THE-WRAPPER-OF-SIMPLE-BIT-VECTOR* +SB-PCL::*THE-WRAPPER-OF-SIMPLE-STRING* +SB-PCL::*THE-WRAPPER-OF-SIMPLE-VECTOR* +SB-PCL::*THE-WRAPPER-OF-SINGLE-FLOAT* +SB-PCL::*THE-WRAPPER-OF-STRING* +SB-PCL::*THE-WRAPPER-OF-STRUCTURE-OBJECT* +SB-PCL::*THE-WRAPPER-OF-SYMBOL* +SB-PCL::*THE-WRAPPER-OF-SYSTEM-AREA-POINTER* +SB-PCL::*THE-WRAPPER-OF-T* +SB-PCL::*THE-WRAPPER-OF-VECTOR* +SB-PCL::*THE-WRAPPER-OF-WEAK-POINTER* +SB-PCL::*WRITERS-FOR-THIS-DEFCLASS* +SB-PCL::WRAPPER-CLASS* = debugger diff --git a/src/code/win32.lisp b/src/code/win32.lisp index c4b7589..65e3d6a 100644 --- a/src/code/win32.lisp +++ b/src/code/win32.lisp @@ -121,7 +121,7 @@ (unless (zerop (peek-named-pipe handle nil 0 nil (addr avail) nil)) (return-from handle-listen (plusp avail))) - (unless (zerop (peek-console-input handle + (unless (zerop (peek-console-input handle (cast buf (* t)) input-record-size (addr avail))) (return-from handle-listen (plusp avail))) @@ -170,7 +170,7 @@ (defvar *codepage-to-external-format* (make-hash-table))) #+sb-unicode -(dolist +(dolist (cp '(;;037 IBM EBCDIC - U.S./Canada (437 :CP437) ;; OEM - United States ;;500 IBM EBCDIC - International @@ -334,7 +334,7 @@ (gethash (alien-funcall (extern-alien "GetACP@0" (function UINT))) *codepage-to-external-format* :latin-1)))) - + (declaim (ftype (function () keyword) oem-codepage)) (defun oem-codepage () (or *oem-codepage* @@ -345,7 +345,7 @@ ;; http://msdn.microsoft.com/library/en-us/dllproc/base/getconsolecp.asp (declaim (ftype (function () keyword) console-input-codepage)) -(defun console-input-codepage () +(defun console-input-codepage () (or #!+sb-unicode (gethash (alien-funcall (extern-alien "GetConsoleCP@0" (function UINT))) *codepage-to-external-format*) @@ -355,7 +355,7 @@ (declaim (ftype (function () keyword) console-output-codepage)) (defun console-output-codepage () (or #!+sb-unicode - (gethash (alien-funcall + (gethash (alien-funcall (extern-alien "GetConsoleOutputCP@0" (function UINT))) *codepage-to-external-format*) :latin-1)) @@ -415,7 +415,7 @@ (defun sb!unix:posix-getcwd () (with-alien ((apath (* tchar) (make-alien tchar (1+ MAX_PATH))) (afunc (function dword dword (* tchar)) - :extern + :extern #!-sb-unicode "GetCurrentDirectoryA@8" #!+sb-unicode "GetCurrentDirectoryW@8")) (let ((ret (alien-funcall afunc (1+ MAX_PATH) apath))) @@ -469,7 +469,7 @@ (with-alien ((aname (* tchar) (make-alien tchar (1+ name-length))) (aenv (* tchar) (make-alien tchar default-environment-length)) (afunc (function dword (* tchar) (* tchar) dword) - :extern + :extern #!-sb-unicode "GetEnvironmentVariableA@12" #!+sb-unicode "GetEnvironmentVariableW@12")) (dotimes (i name-length) diff --git a/src/pcl/boot.lisp b/src/pcl/boot.lisp index 4cbefe1..8ffba53 100644 --- a/src/pcl/boot.lisp +++ b/src/pcl/boot.lisp @@ -1363,37 +1363,12 @@ bootstrapping. (funcallable-instance-p (gdefinition name))))) (defvar *method-function-plist* (make-hash-table :test 'eq)) -(defvar *mf1* nil) -(defvar *mf1p* nil) -(defvar *mf1cp* nil) -(defvar *mf2* nil) -(defvar *mf2p* nil) -(defvar *mf2cp* nil) (defun method-function-plist (method-function) - (unless (eq method-function *mf1*) - (rotatef *mf1* *mf2*) - (rotatef *mf1p* *mf2p*) - (rotatef *mf1cp* *mf2cp*)) - (unless (or (eq method-function *mf1*) (null *mf1cp*)) - (setf (gethash *mf1* *method-function-plist*) *mf1p*)) - (unless (eq method-function *mf1*) - (setf *mf1* method-function - *mf1cp* nil - *mf1p* (gethash method-function *method-function-plist*))) - *mf1p*) - -(defun (setf method-function-plist) - (val method-function) - (unless (eq method-function *mf1*) - (rotatef *mf1* *mf2*) - (rotatef *mf1cp* *mf2cp*) - (rotatef *mf1p* *mf2p*)) - (unless (or (eq method-function *mf1*) (null *mf1cp*)) - (setf (gethash *mf1* *method-function-plist*) *mf1p*)) - (setf *mf1* method-function - *mf1cp* t - *mf1p* val)) + (gethash method-function *method-function-plist*)) + +(defun (setf method-function-plist) (val method-function) + (setf (gethash method-function *method-function-plist*) val)) (defun method-function-get (method-function key &optional default) (getf (method-function-plist method-function) key default)) diff --git a/src/pcl/cache.lisp b/src/pcl/cache.lisp index 313d96d..5eb5930 100644 --- a/src/pcl/cache.lisp +++ b/src/pcl/cache.lisp @@ -1238,4 +1238,3 @@ ((8 16) 4) (otherwise 6))) -(defvar *empty-cache* (make-cache)) ; for defstruct slot initial value forms diff --git a/src/pcl/dfun.lisp b/src/pcl/dfun.lisp index 1db2f02..3983779 100644 --- a/src/pcl/dfun.lisp +++ b/src/pcl/dfun.lisp @@ -633,9 +633,9 @@ Except see also BREAK-VICIOUS-METACIRCLE. -- CSR, 2003-05-28 (let ((cdc (caching-dfun-cost gf))) ; fast (> cdc (dispatch-dfun-cost gf cdc)))))) -(defparameter *non-built-in-typep-cost* 1) -(defparameter *structure-typep-cost* 1) -(defparameter *built-in-typep-cost* 0) +(defparameter *non-built-in-typep-cost* 100) +(defparameter *structure-typep-cost* 15) +(defparameter *built-in-typep-cost* 5) ;;; According to comments in the original CMU CL version of PCL, ;;; the cost LIMIT is important to cut off exponential growth for @@ -666,9 +666,9 @@ Except see also BREAK-VICIOUS-METACIRCLE. -- CSR, 2003-05-28 max-cost-so-far)) #'identity)) -(defparameter *cache-lookup-cost* 1) -(defparameter *wrapper-of-cost* 0) -(defparameter *secondary-dfun-call-cost* 1) +(defparameter *cache-lookup-cost* 30) +(defparameter *wrapper-of-cost* 15) +(defparameter *secondary-dfun-call-cost* 30) (defun caching-dfun-cost (gf) (let ((nreq (get-generic-fun-info gf))) @@ -679,13 +679,6 @@ Except see also BREAK-VICIOUS-METACIRCLE. -- CSR, 2003-05-28 *secondary-dfun-call-cost* 0)))) -(setq *non-built-in-typep-cost* 100) -(setq *structure-typep-cost* 15) -(setq *built-in-typep-cost* 5) -(setq *cache-lookup-cost* 30) -(setq *wrapper-of-cost* 15) -(setq *secondary-dfun-call-cost* 30) - (declaim (inline make-callable)) (defun make-callable (gf methods generator method-alist wrappers) (let* ((*applicable-methods* methods) diff --git a/src/pcl/vector.lisp b/src/pcl/vector.lisp index 3787318..c2103e9 100644 --- a/src/pcl/vector.lisp +++ b/src/pcl/vector.lisp @@ -47,15 +47,18 @@ #-sb-fluid (declaim (sb-ext:freeze-type pv-table)) -(defvar *initial-pv-table* (make-pv-table-internal nil nil)) - -; help new slot-value-using-class methods affect fast iv access -(defvar *all-pv-table-list* nil) +;;; FIXME: The comment below seem to indicate that this was intended +;;; to be actually used, however, it isn't anymore, and was commented +;;; out at 0.9.13.47. Also removed was code in MAKE-PV-TABLE that +;;; pushed each new PV-TABLE onto this list. --NS 2006-06-18 +;;; +;;; help new slot-value-using-class methods affect fast iv access +;;; +;;; (defvar *all-pv-table-list* nil) +(declaim (inline make-pv-table)) (defun make-pv-table (&key slot-name-lists call-list) - (let ((pv-table (make-pv-table-internal slot-name-lists call-list))) - (push pv-table *all-pv-table-list*) - pv-table)) + (make-pv-table-internal slot-name-lists call-list)) (defun make-pv-table-type-declaration (var) `(type pv-table ,var)) @@ -79,18 +82,19 @@ (setq new-p t) (make-pv-table :slot-name-lists snl :call-list cl)))))) - (let ((pv-table (outer (mapcar #'inner (cons call-list slot-name-lists))))) - (when new-p - (let ((pv-index 1)) - (dolist (slot-name-list slot-name-lists) - (dolist (slot-name (cdr slot-name-list)) - (note-pv-table-reference slot-name pv-index pv-table) - (incf pv-index))) - (dolist (gf-call call-list) - (note-pv-table-reference gf-call pv-index pv-table) - (incf pv-index)) - (setf (pv-table-pv-size pv-table) pv-index))) - pv-table)))) + (let ((pv-table + (outer (mapcar #'inner (cons call-list slot-name-lists))))) + (when new-p + (let ((pv-index 1)) + (dolist (slot-name-list slot-name-lists) + (dolist (slot-name (cdr slot-name-list)) + (note-pv-table-reference slot-name pv-index pv-table) + (incf pv-index))) + (dolist (gf-call call-list) + (note-pv-table-reference gf-call pv-index pv-table) + (incf pv-index)) + (setf (pv-table-pv-size pv-table) pv-index))) + pv-table)))) (defun note-pv-table-reference (ref pv-offset pv-table) (let ((entry (gethash ref *pv-key-to-pv-table-table*))) @@ -238,8 +242,6 @@ (defun make-pv-type-declaration (var) `(type simple-vector ,var)) -(defvar *empty-pv* #()) - (defmacro pvref (pv index) `(svref ,pv ,index)) diff --git a/src/runtime/time.c b/src/runtime/time.c index b980ba1..402a19f 100644 --- a/src/runtime/time.c +++ b/src/runtime/time.c @@ -23,8 +23,8 @@ void get_timezone(time_t when, int *secwest, boolean *dst) struct tm ltm, gtm; int sw; - ltm = *localtime(&when); - gtm = *gmtime(&when); + ltm = *localtime_r(&when, <m); + gtm = *gmtime_r(&when, >m); sw = (((gtm.tm_hour*60)+gtm.tm_min)*60+gtm.tm_sec) - (((ltm.tm_hour*60)+ltm.tm_min)*60+ltm.tm_sec); if ((gtm.tm_wday + 1) % 7 == ltm.tm_wday) diff --git a/tools-for-build/grovel-headers.c b/tools-for-build/grovel-headers.c index 169a719..3503f5c 100644 --- a/tools-for-build/grovel-headers.c +++ b/tools-for-build/grovel-headers.c @@ -178,7 +178,7 @@ main(int argc, char *argv[]) defconstant("enoent", ENOENT); defconstant("eexist", EEXIST); - + defconstant("s-ifmt", S_IFMT); defconstant("s-ifdir", S_IFDIR); defconstant("s-ifreg", S_IFREG); diff --git a/version.lisp-expr b/version.lisp-expr index ea15df7..94b9e21 100644 --- a/version.lisp-expr +++ b/version.lisp-expr @@ -17,4 +17,4 @@ ;;; checkins which aren't released. (And occasionally for internal ;;; versions, especially for internal versions off the main CVS ;;; branch, it gets hairier, e.g. "0.pre7.14.flaky4.13".) -"0.9.13.46" +"0.9.13.47" -- 1.7.10.4