From: Nikodemus Siivola Date: Fri, 8 Feb 2013 00:45:18 +0000 (-0500) Subject: update LIST-QUEUE-CONTENTS docstring, add note X-Git-Url: http://repo.macrolet.net/gitweb/?a=commitdiff_plain;h=4150a9f9936714c8a04fc2cd8ae6df26ec5f7db8;hp=31fbadea3713c2024fd1ac0d881f40f44b9f0df7;p=sbcl.git update LIST-QUEUE-CONTENTS docstring, add note --- diff --git a/NEWS b/NEWS index 8985a10..e717e47 100644 --- a/NEWS +++ b/NEWS @@ -27,6 +27,8 @@ changes relative to sbcl-1.1.4: * enhancement: test-suite results are colorized, failures in red, unexpected success in green. Works on Windows and on terminals with ANSI escape code support. Can be disabled with --no-color. + * optimization: SB-CONCURRENCY:QUEUE implementation is more efficient. + (thanks to James M. Lawrence) * bug fix: no more unused variable style warnings from RESTART-CASE macroexpansion (lp#1113859) * bug fix: no more unused variable style warnings when loading diff --git a/contrib/sb-concurrency/queue.lisp b/contrib/sb-concurrency/queue.lisp index 397e29e..9b0949e 100644 --- a/contrib/sb-concurrency/queue.lisp +++ b/contrib/sb-concurrency/queue.lisp @@ -92,6 +92,8 @@ and secondary value." (return (values value t))))))))) (defun try-walk-queue (fun queue) + ;; This isn't /quite/ as bad as it looks. We're in danger of needing + ;; to restart only as long as we're close to the head of the queue. (let ((node (queue-head queue))) (loop (let ((value (car node))) @@ -105,8 +107,9 @@ and secondary value." (defun list-queue-contents (queue) "Returns the contents of QUEUE as a list without removing them from the -QUEUE. Mainly useful for manual examination of queue state, as the list -may be out of date by the time it is returned." +QUEUE. Mainly useful for manual examination of queue state, as the list may be +out of date by the time it is returned, and concurrent dequeue operations may +in the worse case force the queue-traversal to be restarted several times." (tagbody :retry (collect ((result))