X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcode%2Ftarget-package.lisp;h=914e9ea5dc9a204902d5efc3a4a374b149605ca1;hb=81a75e4657328daad0d63bdbf9555ef4d309c39d;hp=673d17039912c2a9c59f29f70d603862e29457e3;hpb=4898ef32c639b1c7f4ee13a5ba566ce6debd03e6;p=sbcl.git diff --git a/src/code/target-package.lisp b/src/code/target-package.lisp index 673d170..914e9ea 100644 --- a/src/code/target-package.lisp +++ b/src/code/target-package.lisp @@ -694,8 +694,7 @@ error if any of PACKAGES is not a valid package designator." (values symbol nil)))))))) ;;; Check internal and external symbols, then scan down the list -;;; of hashtables for inherited symbols. When an inherited symbol -;;; is found pull that table to the beginning of the list. +;;; of hashtables for inherited symbols. (defun find-symbol* (string length package) (declare (simple-string string) (type index length)) @@ -716,8 +715,20 @@ error if any of PACKAGES is not a valid package designator." ((null table) (values nil nil)) (with-symbol (found symbol (car table) string length hash ehash) (when found - (unless (eq prev head) - (shiftf (cdr prev) (cdr table) (cdr head) table)) + ;; At this point we used to move the table to the + ;; beginning of the list, probably on the theory that we'd + ;; soon be looking up further items there. Unfortunately + ;; that was very much non-thread safe. Since the failure + ;; mode was nasty (corruption of the package in a way + ;; which would make symbol lookups loop infinitely) and it + ;; would be triggered just by doing reads to a resource + ;; that users can't do their own locking on, that code has + ;; been removed. If we ever add locking to packages, + ;; resurrecting that code might make sense, even though it + ;; didn't seem to have much of an performance effect in + ;; normal use. + ;; + ;; -- JES, 2006-09-13 (return-from find-symbol* (values symbol :inherited)))))))) ;;; Similar to FIND-SYMBOL, but only looks for an external symbol. @@ -756,7 +767,8 @@ error if any of PACKAGES is not a valid package designator." :interactive (lambda () (let* ((len (length symbols)) - (nlen (length (write-to-string len :base 10)))) + (nlen (length (write-to-string len :base 10))) + (*print-pretty* t)) (format *query-io* "~&~@