From: bryan o'c. <bry...@lu...> - 2005-09-16 19:50:16
|
This indeed fixes the openmcl-as-build-host breakage. can this be committed? thanks, ..bryan On Sep 13, 2005, at 3:34 AM, Rob MacLachlan wrote: > Yeah, it really does add any and every key during maphash. The > simplest fix is to make a new *repack-blocks* on each trip around > the loop which is in effect during the iteration over the previous > one. (all you really have to do is rebind *repack-blocks* to NIL, > then see if a new one gets created. This also eliminates the > (zerop (hash-table-count test)). This would also eliminate the > need to do the remhash at all. *repack-blocks* is basically a hash > set. > > Here's a patch of what I mean. be aware that this is against an > old version of cmucl, not current sbcl sources. > > --- opack.lisp 2005-09-13 06:28:24.986953907 -0400 > +++ pack.lisp 2005-09-13 06:30:51.722579315 -0400 > @@ -1678,14 +1678,14 @@ > (do-ir2-blocks (block component) > (emit-saves block) > (pack-load-tns block)))) > - (when *repack-blocks* > - (loop > - (when (zerop (hash-table-count *repack-blocks*)) (return)) > + (loop > + (unless *repack-blocks* (return)) > + (let ((orpb *repack-blocks*)) > + (setq *repack-blocks* nil) > (maphash #'(lambda (block v) > (declare (ignore v)) > - (remhash block *repack-blocks*) > (event repack-block) > (pack-load-tns block)) > - *repack-blocks*))))) > + orpb))))) > > (undefined-value)) > > > Rob |