]> git.pond.sub.org Git - eow/blobdiff - locked-queue.lisp
Disable #. in prompt reader
[eow] / locked-queue.lisp
index 66f435452abff46c4fc7fd1a514be45fe72d7c24..d225faccc7e7242eb998dcfe897802e70efe3da8 100644 (file)
        (setf (car queue)
              (rest (car queue)))))))
 
+(defmethod dequeue-all ((q locked-queue))
+  (with-slots (queue mutex waitq) q
+    (with-mutex (mutex)
+      (if (or (null queue)
+             (null (first queue)))
+         (condition-wait waitq mutex))
+      (loop
+        until (null (car queue))
+        collect (car (car queue))
+        do (setf (car queue) (rest (car queue)))))))
+
 (defmethod enqueue ((q locked-queue) value)
   (with-slots (queue mutex waitq) q
     (with-mutex (mutex)
@@ -29,7 +40,6 @@
              (setf queue (cons last last))
              (condition-notify waitq))
            (progn
-             (setf (rest (cdr queue))
-                   last
+             (setf (rest (cdr queue)) last
                    (cdr queue) last)
              (cons (car queue) last)))))))