From: Gabor Melis Date: Fri, 18 Nov 2005 21:41:57 +0000 (+0000) Subject: 0.9.6.52: X-Git-Url: http://repo.macrolet.net/gitweb/?a=commitdiff_plain;h=8ade1fa8b1ddc95478d2287b4593a80d314b6bd3;p=sbcl.git 0.9.6.52: * fixed hash-table/gc deadlock introduced in .50 --- diff --git a/src/code/target-hash-table.lisp b/src/code/target-hash-table.lisp index b0cf137..0eb63f5 100644 --- a/src/code/target-hash-table.lisp +++ b/src/code/target-hash-table.lisp @@ -21,15 +21,19 @@ (defmacro with-spinlock-and-without-gcing ((spinlock) &body body) #!-sb-thread (declare (ignore spinlock)) - `(unwind-protect - (let ((*gc-inhibit* t)) - #!+sb-thread - (sb!thread::get-spinlock ,spinlock) - ,@body) - #!+sb-thread - (sb!thread::release-spinlock ,spinlock) - ;; the test is racy, but it can err only on the overeager side - (sb!kernel::maybe-handle-pending-gc))) + (with-unique-names (old-gc-inhibit) + `(let ((,old-gc-inhibit *gc-inhibit*) + (*gc-inhibit* t)) + (unwind-protect + (progn + #!+sb-thread + (sb!thread::get-spinlock ,spinlock) + ,@body) + #!+sb-thread + (sb!thread::release-spinlock ,spinlock) + (let ((*gc-inhibit* ,old-gc-inhibit)) + ;; the test is racy, but it can err only on the overeager side + (sb!kernel::maybe-handle-pending-gc)))))) (eval-when (:compile-toplevel :load-toplevel :execute) (defconstant max-hash sb!xc:most-positive-fixnum)) diff --git a/tests/mop.impure.lisp b/tests/mop.impure.lisp index 6b35e3b..8aad5b4 100644 --- a/tests/mop.impure.lisp +++ b/tests/mop.impure.lisp @@ -385,7 +385,7 @@ ;;; (addendum to test for #331: conditions suffered the same problem) (define-condition condition-bug-331-super () ()) (define-condition condition-bug-331-sub (condition-bug-331-super) ()) -(let ((subs (sb-mop:class-direct-subclasses +(let ((subs (sb-mop:class-direct-subclasses (find-class 'condition-bug-331-super)))) (assert (= 1 (length subs))) (assert (eq (car subs) (find-class 'condition-bug-331-sub)))) @@ -396,8 +396,8 @@ (let* ((gf #'slot331a) (methods (sb-mop:generic-function-methods gf))) (assert (= (length methods) 1)) - (assert (eq (car methods) - (find-method #'slot331a nil + (assert (eq (car methods) + (find-method #'slot331a nil (list (find-class 'condition-bug-331a)))))) ;;; detection of multiple class options in defclass, reported by Bruno Haible diff --git a/version.lisp-expr b/version.lisp-expr index 31083f3..4a5bdb2 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.6.51" +"0.9.6.52"