X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=contrib%2Fsb-concurrency%2Fqueue.lisp;h=9b0949e0b06dadb953748196c2180bf2970d8e35;hb=24ecee137a93b3f769d1aa04589a5c9b0e76ea66;hp=397e29e7fd20a3b5ed8cfba65c70368fa5a9223f;hpb=31fbadea3713c2024fd1ac0d881f40f44b9f0df7;p=sbcl.git 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))