0.9.4.73:
authorAlexey Dejneka <adejneka@comail.ru>
Sat, 17 Sep 2005 07:43:33 +0000 (07:43 +0000)
committerAlexey Dejneka <adejneka@comail.ru>
Sat, 17 Sep 2005 07:43:33 +0000 (07:43 +0000)
        * PACK does not modify a hashtable, which it iterates on
          (patch by Rob MacLachlan for a bug reported by Bryan
          O'Connor).

NEWS
src/compiler/pack.lisp
version.lisp-expr

diff --git a/NEWS b/NEWS
index c9e7279..fa545f2 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -39,6 +39,8 @@ changes in sbcl-0.9.5 relative to sbcl-0.9.4:
   * bug fix: flush closure information collected by physical
     environment analysis prepass before the main pass. (bug reported
     by Vasile Rotaru)
+  * bug fix: compiler pack phase does not modify a hashtable, which is
+    iterated. (reported by Bryan O'Connor, fixed by Rob MacLachlan)
   * threads
     ** bug fix: parent thread now can be gc'ed even with a live
        child thread
index a911dbd..235b0e5 100644 (file)
                   (do-ir2-blocks (block component)
                     (emit-saves block)
                     (pack-load-tns block))))
-           (when *repack-blocks*
-             (loop
-                 (when (zerop (hash-table-count *repack-blocks*)) (return))
-                 (maphash (lambda (block v)
-                            (declare (ignore v))
-                            (remhash block *repack-blocks*)
-                            (event repack-block)
-                            (pack-load-tns block))
-                          *repack-blocks*))))
+           (loop
+              (unless *repack-blocks* (return))
+              (let ((orpb *repack-blocks*))
+                (setq *repack-blocks* nil)
+                (maphash (lambda (block v)
+                           (declare (ignore v))
+                           (event repack-block)
+                           (pack-load-tns block))
+                         orpb))))
 
          (values))
     (clean-up-pack-structures)))
index 79890fd..b332bc6 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.4.72"
+"0.9.4.73"