0.9.6.52:
authorGabor Melis <mega@hotpop.com>
Fri, 18 Nov 2005 21:41:57 +0000 (21:41 +0000)
committerGabor Melis <mega@hotpop.com>
Fri, 18 Nov 2005 21:41:57 +0000 (21:41 +0000)
  * fixed hash-table/gc deadlock introduced in .50

src/code/target-hash-table.lisp
tests/mop.impure.lisp
version.lisp-expr

index b0cf137..0eb63f5 100644 (file)
 (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))
index 6b35e3b..8aad5b4 100644 (file)
 ;;; (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))))
 (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
index 31083f3..4a5bdb2 100644 (file)
@@ -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"