X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcode%2Ffilesys.lisp;h=32a48ef84e080379d735d977da94f2ee0f5c5046;hb=ba176faab453c2b5d4d9a6667a84680c8783c957;hp=46e9e8582171650feb60d0043b7d36a98080a543;hpb=11f02398a1a9ccbde847c82fd233e8378e45c29c;p=sbcl.git diff --git a/src/code/filesys.lisp b/src/code/filesys.lisp index 46e9e85..32a48ef 100644 --- a/src/code/filesys.lisp +++ b/src/code/filesys.lisp @@ -829,9 +829,16 @@ (merged-pathname (merge-pathnames pathname))) (!enumerate-matches (match merged-pathname) (let* ((*ignore-wildcards* t) - (truename (truename match))) - (setf (gethash (namestring truename) truenames) - truename))) + ;; FIXME: Why not TRUENAME? As reported by Milan Zamazal + ;; sbcl-devel 2003-10-05, using TRUENAME causes a race + ;; condition whereby removal of a file during the + ;; directory operation causes an error. It's not clear + ;; what the right thing to do is, though. -- CSR, + ;; 2003-10-13 + (truename (probe-file match))) + (when truename + (setf (gethash (namestring truename) truenames) + truename)))) (mapcar #'cdr ;; Sorting isn't required by the ANSI spec, but sorting ;; into some canonical order seems good just on the