From: Nikodemus Siivola Date: Wed, 14 Jul 2004 14:10:16 +0000 (+0000) Subject: 0.8.12.32: Fix the performance degradation in DEFCLASS caused X-Git-Url: http://repo.macrolet.net/gitweb/?a=commitdiff_plain;h=e801083c864fa8f11d79be53a5d95584c960f2b3;p=sbcl.git 0.8.12.32: Fix the performance degradation in DEFCLASS caused by package locks. * While at it, correct WITHOUT-PACKAGE-LOCKS to have identical semantics both with and without :SB-PACKAGE-LOCKS in features. * Yay for Boinkmarks for catching this. --- diff --git a/src/code/early-package.lisp b/src/code/early-package.lisp index c17ad6e..a1f24bb 100644 --- a/src/code/early-package.lisp +++ b/src/code/early-package.lisp @@ -69,11 +69,8 @@ (defmacro without-package-locks (&body body) #!+sb-doc "Ignores all runtime package lock violations during the execution of -body. Body can begin with declarations." - #!-sb-package-locks - `(progn ,@body) - #!+sb-package-locks - `(let ((*ignored-package-locks* t)) +body. Body can begin with declarations." + `(let (#!+sb-package-locks (*ignored-package-locks* t)) ,@body)) (!defun-from-collected-cold-init-forms !early-package-cold-init) diff --git a/src/pcl/defclass.lisp b/src/pcl/defclass.lisp index f525d4a..09bf800 100644 --- a/src/pcl/defclass.lisp +++ b/src/pcl/defclass.lisp @@ -100,20 +100,18 @@ (let ((defclass-form `(progn (let ,(mapcar #'cdr *initfunctions-for-this-defclass*) - (with-single-package-locked-error - (:symbol ',name "defining ~A as a class") - (%compiler-defclass ',name - ',*readers-for-this-defclass* - ',*writers-for-this-defclass* - ',*slot-names-for-this-defclass*) - (load-defclass ',name - ',metaclass - ',supers - (list ,@canonical-slots) - (list ,@(apply #'append - (when defstruct-p - '(:from-defclass-p t)) - other-initargs)))))))) + (%compiler-defclass ',name + ',*readers-for-this-defclass* + ',*writers-for-this-defclass* + ',*slot-names-for-this-defclass*) + (load-defclass ',name + ',metaclass + ',supers + (list ,@canonical-slots) + (list ,@(apply #'append + (when defstruct-p + '(:from-defclass-p t)) + other-initargs))))))) (if defstruct-p (progn ;; FIXME: (YUK!) Why do we do this? Because in order diff --git a/version.lisp-expr b/version.lisp-expr index a2d1d54..a7cc2a8 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.8.12.31" +"0.8.12.32"