(setf (documentation 'queuep 'function)
"Returns true if argument is a QUEUE, NIL otherwise."
(documentation 'queue-name 'function)
- "Name of a QUEUE. Can be assingned to using SETF. Queue names
+ "Name of a QUEUE. Can be assignned to using SETF. Queue names
can be arbitrary printable objects, and need not be unique.")
(defun make-queue (&key name initial-contents)
(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)))
(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))